0

我无法从 Azure Stack 中创建的负载平衡 VM获得有效的传出连接。我有文档的场景 2:“与 VM 关联的公共负载均衡器(实例上没有实例级公共 IP 地址)”。只有端口 80 作为开箱即用的传出连接。我在一个额外的防火墙后面,我问自己是否必须打开任何其他特定端口才能允许与 Internet 通信。三个问题:

  • 问题是我尝试从虚拟机内部访问的端口被负载平衡器转换为不同的 SNAT 端口吗?

  • 文档说明了已使用 SNAT 端口的数量,但没有说明使用了哪些SNAT 端口?我必须在外部防火墙中打开哪些端口?

  • 为什么端口 80 开箱即用?默认情况下,我可以从虚拟机中访问网络。这意味着,可以访问公共互联网。我自己没有为 80 端口添加任何附加规则。

我在 Azure 安全组的传入连接部分发现了以下内容:防火墙设置中的提示在 49152 和 65534 之间明确提到了临时端口。不幸的是,在我们的外部防火墙的传出连接中打开这些端口也没有起到作用。所有 VM 内部防火墙在所有端口上都打开。

我使用以下模板创建了集群。SKU 应该是默认的“标准”,因为我没有为 LoadBalancer 指定任何其他内容。

  {
    "apiVersion": "[variables('lbApiVersion')]",
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB','-', parameters('clusterName'),'-',variables('vmNodeType0Name'))]",
    "location": "[variables('location')]",
    "dependsOn": [
      "[concat('Microsoft.Network/publicIPAddresses/',concat(variables('lbIPName'),'-','0'))]"
    ],
    "properties": {
      "frontendIPConfigurations": [
        {
          "name": "LoadBalancerIPConfig",
          "properties": {
            "publicIPAddress": {
              "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('lbIPName'),'-','0'))]"
            }
          }
        }
      ],
      "backendAddressPools": [
        {
          "name": "LoadBalancerBEAddressPool",
          "properties": {}
        }
      ],
      "loadBalancingRules": [
        {
          "name": "LBRule",
          "properties": {
            "backendAddressPool": {
              "id": "[variables('lbPoolID0')]"
            },
            "backendPort": "[variables('nt0fabricTcpGatewayPort')]",
            "enableFloatingIP": "false",
            "frontendIPConfiguration": {
              "id": "[variables('lbIPConfig0')]"
            },
            "frontendPort": "[variables('nt0fabricTcpGatewayPort')]",
            "idleTimeoutInMinutes": "5",
            "probe": {
              "id": "[variables('lbProbeID0')]"
            },
            "protocol": "tcp"
          }
        },
        {
          "name": "LBHttpRule",
          "properties": {
            "backendAddressPool": {
              "id": "[variables('lbPoolID0')]"
            },
            "backendPort": "[variables('nt0fabricHttpGatewayPort')]",
            "enableFloatingIP": "false",
            "frontendIPConfiguration": {
              "id": "[variables('lbIPConfig0')]"
            },
            "frontendPort": "[variables('nt0fabricHttpGatewayPort')]",
            "idleTimeoutInMinutes": "5",
            "probe": {
              "id": "[variables('lbHttpProbeID0')]"
            },
            "protocol": "tcp"
          }
        },
        {
          "name": "AppPortLBRule1",
          "properties": {
            "backendAddressPool": {
              "id": "[variables('lbPoolID0')]"
            },
            "backendPort": "[parameters('loadBalancedAppPort1')]",
            "enableFloatingIP": "false",
            "frontendIPConfiguration": {
              "id": "[variables('lbIPConfig0')]"
            },
            "frontendPort": "[parameters('loadBalancedAppPort1')]",
            "idleTimeoutInMinutes": "5",
            "probe": {
              "id": "[concat(variables('lbID0'),'/probes/AppPortProbe1')]"
            },
            "protocol": "tcp"
          }
        },
        {
          "name": "AppPortLBRule2",
          "properties": {
            "backendAddressPool": {
              "id": "[variables('lbPoolID0')]"
            },
            "backendPort": "[parameters('loadBalancedAppPort2')]",
            "enableFloatingIP": "false",
            "frontendIPConfiguration": {
              "id": "[variables('lbIPConfig0')]"
            },
            "frontendPort": "[parameters('loadBalancedAppPort2')]",
            "idleTimeoutInMinutes": "5",
            "probe": {
              "id": "[concat(variables('lbID0'),'/probes/AppPortProbe2')]"
            },
            "protocol": "tcp"
          }
        }
      ],
      "probes": [
        {
          "name": "FabricGatewayProbe",
          "properties": {
            "intervalInSeconds": 5,
            "numberOfProbes": 2,
            "port": "[variables('nt0fabricTcpGatewayPort')]",
            "protocol": "tcp"
          }
        },
        {
          "name": "FabricHttpGatewayProbe",
          "properties": {
            "intervalInSeconds": 5,
            "numberOfProbes": 2,
            "port": "[variables('nt0fabricHttpGatewayPort')]",
            "protocol": "tcp"
          }
        },
        {
          "name": "AppPortProbe1",
          "properties": {
            "intervalInSeconds": 5,
            "numberOfProbes": 2,
            "port": "[parameters('loadBalancedAppPort1')]",
            "protocol": "tcp"
          }
        },
        {
          "name": "AppPortProbe2",
          "properties": {
            "intervalInSeconds": 5,
            "numberOfProbes": 2,
            "port": "[parameters('loadBalancedAppPort2')]",
            "protocol": "tcp"
          }
        }
      ],
      "inboundNatPools": [
        {
          "name": "LoadBalancerBEAddressNatPool",
          "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
              "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "4500",
            "frontendPortRangeStart": "3389",
            "protocol": "tcp"
          }
        }
      ]
    },
    "tags": {
      "resourceType": "Service Fabric",
      "clusterName": "[parameters('clusterName')]"
    }
  },

为了缩短?如何实现来自 Azure VM 的出站连接。

4

1 回答 1

0

对于你的问题,我会告诉你我所知道的一切。希望它会帮助你。

问题是我尝试从虚拟机内部访问的端口被负载平衡器转换为不同的 SNAT 端口吗?

不,使用 SNAT 规则,您可以根据需要将来自 Internet 的访问流转换为不同的端口或不转换为不同的端口。Azure 负载均衡器 SNAT 规则意味着您可以使用端口 B 从 Internet 连接到内部的 VM 端口 A。端口 A 和端口 B 可以相同或不同。

文档说明了使用的 SNAT 端口的数量,但没有说明使用了哪些 SNAT 端口?我必须在外部防火墙中打开哪些端口?

正如我测试的那样,您甚至可以在负载均衡器 NAT 规则中使用端口 1。所以我假设该文档意味着每个 IP 配置可以使用多少个端口。建议你可以再看一遍文档,仔细理解。

为什么端口 80 开箱即用?默认情况下,我可以从虚拟机中访问网络。这意味着,可以访问公共互联网。我自己没有为 80 端口添加任何附加规则。

对于这个问题,你应该确保一些事情。首先,如果您有一个与您的 VM 关联的公共 IP(负载均衡器除外)。其次,如果有任何其他 NAT 规则,您应该查看 Azure 门户。或者您可以使用 cli 命令az network lb inbound-nat-rule list

于 2018-07-23T07:56:26.563 回答