Порты SNAT для исходящего соединения из Azure (стек)
Мне не удается получить работающее исходящее соединение от моих виртуальных машин с балансировкой нагрузки, созданных в стеке Azure. У меня есть сценарий 2 документации: "Public Load Balancer, связанный с виртуальной машиной (нет публичного IP-адреса уровня экземпляра в экземпляре)". Только порт 80 работает как исходящее соединение из коробки. Я нахожусь за дополнительным брандмауэром, и я спрашиваю себя, нужно ли мне открывать какие-либо другие конкретные порты, чтобы разрешить связь с Интернетом. Три вопроса:
Проблема в том, что порт, к которому я пытаюсь получить доступ изнутри виртуальных машин, переводится на другой порт SNAT балансировщиком нагрузки?
В документации что-то говорится о количестве используемых портов SNAT, но не говорится, какие порты SNAT используются? Какие порты мне нужно открыть во внешнем брандмауэре?
Почему порт 80 работает из коробки? По умолчанию я могу получить доступ к Интернету из виртуальных машин. Это означает, что есть возможность достичь публичного интернета. Я не включил никаких дополнительных правил для 80-го порта.
В разделе входящих подключений группы безопасности Azure я обнаружил следующее: Между 49152 и 65534 явно упоминаются эфемерные порты. К сожалению, открытие этих портов в исходящих соединениях нашего внешнего брандмауэра также не помогло. Все внутренние межсетевые экраны ВМ открыты на всех портах.
Я создал кластер, используя следующий шаблон. Артикул должен быть стандартным по умолчанию, так как я не указал ничего другого для 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.
1 ответ
По вашему вопросу я расскажу вам все, что знаю. Надеюсь, это поможет вам.
Проблема в том, что порт, к которому я пытаюсь получить доступ изнутри виртуальных машин, переводится на другой порт SNAT балансировщиком нагрузки?
Нет, используйте правила SNAT, вы можете перевести поток доступа из Интернета на другой порт или нет, все так, как вы хотите. Правила SNAT Azure Load Balancer означают, что вы можете подключиться к порту А виртуальной машины внутри через Интернет с портом B. Порт A и порт B могут совпадать или нет.
В документации что-то говорится о количестве используемых портов SNAT, но не говорится, какие порты SNAT используются? Какие порты мне нужно открыть во внешнем брандмауэре?
Во время тестирования вы даже можете использовать порт 1 в правилах NAT для балансировки нагрузки. Итак, я предполагаю, что документ означает, сколько портов можно использовать для конфигурации IP. Я полагаю, что вы можете прочитать документ еще раз и понять внимательно.
Почему порт 80 работает из коробки? По умолчанию я могу получить доступ к Интернету из виртуальных машин. Это означает, что есть возможность достичь публичного интернета. Я не включил никаких дополнительных правил для 80-го порта.
Для этой проблемы вы должны убедиться в некоторых вещах. Во-первых, если с вашей виртуальной машиной связан общедоступный IP-адрес, за исключением балансировщика нагрузки. Во-вторых, вам следует взглянуть на портал Azure, если есть какие-либо другие правила NAT. Или вы можете использовать команду Cli az network lb inbound-nat-rule list
,