错误:通过另一个VM将NSG添加到Azure VM时,在TCP.onStreamRead上读取ECONNRESET

时间:2020-03-05 09:23:18

标签: node.js azure virtual-machine

我正在尝试通过另一个VM将NSG添加到Azure虚拟机中,并且我已经编写了这段代码,但它显示了此错误:

{ Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }

其原因可能是什么,如何解决?

const fs = require('fs');
let SFWConf = JSON.parse(fs.readFileSync("config/configFw.json"));
//const logger = require(CONSTANTS.SERVICES_PATH + "/logger.js")(module);
const getExtIP = require('external-ip')();
const request = require("request");

var hash = new Array();

var addIP = function (data, callback) {

    if (SFWConf.smartFW === true) {
        var dataReqIp = data.reqIP;
        var portToAdd = data.port;

        if (isPrivateIP(dataReqIp)) {
            getExternalIP(function (iptoadd) {
                if (iptoadd) {
                    callEc2InstanceToAddIp(iptoadd, portToAdd, callback);
                } else {
                    callback(false);
                }
            });
        } else {
            iptoadd = dataReqIp;
            callEc2InstanceToAddIp(iptoadd, portToAdd, callback);
        }
    } else {
        callback(true);
    }
};

function callEc2InstanceToAddIp(iptoadd, portToAdd, callback) {

    if (hash[iptoadd]) {
        if (hash[iptoadd].indexOf(portToAdd) == -1)
            hash[iptoadd].push(portToAdd);
    } else {
        hash[iptoadd] = [portToAdd];
    }

    let reqBody = {
        "properties": {
            "securityRules": [
                {
                    "name": "rule1",
                    "properties": {
                        "protocol": "tcp",
                        "sourceAddressPrefix": [iptoadd],
                        "destinationAddressPrefix": "*",
                        "access": "Allow",
                        "destinationPortRange": "80",
                        "sourcePortRange": portToAdd,
                        "priority": 130,
                        "direction": "Inbound"
                    }
                }
            ]
        },
        "location": "West India"
    }

    restPost(reqBody, "PUT", (response) => {
        logger.info("Response for adding rule=>" + JSON.stringify(response));
        logger.info(hash);
        if (response["result"] == true) {
            callback(true);
        } else {
            callback(false);
        }
    });
}

var deleteIP = function (ip, callback) {
    if (isPrivateIP(ip)) {
        getExternalIP(function (iptodel) {
            if (iptodel) {
                callEc2InstanceToDelIp(iptodel, callback);
            } else {
                callback(false);
            }
        });
    } else {
        callEc2InstanceToDelIp(ip, callback);
    }
};

function callEc2InstanceToDelIp(ip, callback) {

    if (SFWConf.smartFW && hash[ip]) {
        for (let i = 0; i < hash[ip].length; i++) {

            let reqBody = {
            }

            restPost(reqBody, "DELETE", (response) => {
                logger.info("Response for removing rule=>" + JSON.stringify(response));
                if (response["result"] == true) {
                    logger.info("removed=" + ip + "-" + hash[ip][i]);
                } else {
                    logger.info("Could not remove=" + ip + "-" + hash[ip][i]);
                }
            });

            logger.info(hash[ip]);

            if (i == (hash[ip].length - 1)) {
                callback(true);
            }
        }
    } else {
        callback(true);
    }
}

function restPost(req, method, callback) {
    let subscriptionId = "324d5958-9c32-46a5-a6ec-03b8d7d33a10";
    let resourceGroupName = "LC-AD";
    let networkSecurityGroupName = "LC-API-Calls-test-nsg";
    let host = SFWConf.hostAzure;
    let path = `/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/${networkSecurityGroupName}?api-version=2017-10-01`;

    let postheaders = {
        "Content-Type": "application/json"
    };

    let optionspost = {
        url: "http://" + host + path,
        json: true,
        method: method == "PUT" ? "PUT" : "DELETE",
        headers: postheaders,
        body: req
    };

    logger.info("post options=" + JSON.stringify(optionspost));
    logger.info("req body=" + JSON.stringify(req));

    request(optionspost, function (err, res, body) {

        if (err) {
            logger.error(err);
            callback({ result: false, message: err }); return;
        }

        logger.info("Status code->" + res.statusCode);
        // 200 means the operation was successful
        if (res.statusCode == 200 || res.statusCode == 201) {
            console.log(res.statusCode);
            callback({ result: true });
        } else {
            logger.error(body);
            callback({ result: false, message: body });
        }
    });
}

function isPrivateIP(ip) {
    var parts = ip.split('.');
    return parts[0] === '10' ||
        (parts[0] === '172' && (parseInt(parts[1], 10) >= 16 && parseInt(parts[1], 10) <= 31)) ||
        (parts[0] === '192' && parts[1] === '168') ||
        (ip === "127.0.0.1");
}

function getExternalIP(cb) {
    getExtIP(function (err, extip) {
        if (err) {
            // every service in the list has failed
            cb(false);
        } else {
            cb(extip);
        }
    });
}

module.exports = {
    addIP: addIP,
    deleteIP: deleteIP
};

addIP({ reqIP: "104.211.136.223", port: "2222" }, function (res) {
    console.log(res);
});

0 个答案:

没有答案