Использование преобразования исходных сетевых адресов (SNAT) для исходящих подключений

Для некоторых сценариев требуется, чтобы виртуальные машины или вычислительные экземпляры имели исходящее подключение к Интернету. Интерфейсные IP-адреса общедоступной подсистемы балансировки нагрузки можно использовать для установки исходящих подключений к Интернету для серверных экземпляров. В этой конфигурации применяется преобразование исходных сетевых адресов (SNAT). С его помощью частный IP-адрес виртуальной машины преобразуется в общедоступный IP-адрес подсистемы балансировки нагрузки. SNAT сопоставляет IP-адрес серверного экземпляра c общедоступным IP-адресом подсистемы балансировки нагрузки. SNAT не позволяет внешним источникам напрямую обращаться к серверным экземплярам.

Методы исходящего подключения Azure

Ниже приведены наиболее распространенные методы Azure для включения исходящего подключения:

# Способ Тип выделения портов Производственный уровень? Rating
1 Использование интерфейсных IP-адресов подсистемы балансировки нагрузки для исходящего трафика через правила исходящего трафика Статическое, явное Да, но не в большом масштабе ОК
2 Связывание шлюза NAT с подсетью Динамические, явные Да Лучшее
3 Назначение виртуальной машине общедоступного IP-адреса Статическое, явное Да ОК
4 Исходящий доступ по умолчанию Неявный No Худший

Схема параметров исходящего трафика Azure.

1. Использование интерфейсного IP-адреса подсистемы балансировки нагрузки для исходящего трафика через правила исходящего трафика

Схема общедоступной подсистемы балансировки нагрузки с правилами для исходящего трафика.

Правила для исходящего трафика позволяют явным образом определять SNAT (преобразование исходных сетевых адресов) для общедоступной подсистемы балансировки нагрузки с SKU уровня "Стандартный". Эта конфигурация позволяет использовать общедоступные IP-адреса или IP-адреса подсистемы балансировки нагрузки для исходящего подключения к серверным экземплярам.

Эта конфигурация обеспечивает:

  • маскировку IP-адресов;

  • упрощение списков разрешений;

  • сокращение количества ресурсов общедоступных IP-адресов, требующих развертывания.

Правила для исходящего трафика позволяют полностью декларативно управлять исходящим подключением к Интернету. Правила для исходящего трафика позволяют масштабировать и настраивать эту функцию для конкретных нужд с помощью распределения портов вручную. Распределение портов SNAT вручную с учетом размера серверного пула и количества конфигураций интерфейсных IP-адресов поможет избежать исчерпания SNAT.

Порты SNAT можно распределять вручную по принципу "число портов для каждого экземпляра" или "максимальное число серверных экземпляров". Если в серверной части имеются виртуальные машины, рекомендуется распределить порты по принципу "число портов для каждого экземпляра", чтобы максимально использовать порты SNAT.

Вычислите порты для каждого экземпляра следующим образом:

Число внешних IP-адресов * 64 000 / число серверных экземпляров

Если в серверной части имеются Масштабируемые наборы виртуальных машин, рекомендуется распределить порты по принципу "максимальное число серверных экземпляров". Если в серверную часть добавляются больше виртуальных машин, чем разрешены остальные порты SNAT, масштабирование Масштабируемые наборы виртуальных машин может быть заблокировано, или новые виртуальные машины не получат достаточных портов SNAT.

Дополнительные сведения о правилах для исходящего трафика см. в этой статье.

2. Связывание шлюза NAT с подсетью

Схема шлюза NAT и общедоступной подсистемы балансировки нагрузки.

Шлюз NAT Azure упрощает исходящее подключение к Интернету для виртуальных сетей. При настройке NAT в подсети все исходящие подключения используют указанные статические общедоступные IP-адреса. Исходящее подключение возможно без подсистемы балансировки нагрузки или общедоступных IP-адресов путем прямого подключения к виртуальным машинам. Шлюз NAT полностью управляемый и высоко устойчивый.

Использование шлюза NAT является лучшим способом для исходящего подключения. Шлюз NAT обеспечивает высокую расширяемость, надежность и не имеет проблем, связанных с нехваткой портов SNAT.

Шлюз NAT имеет приоритет над другими методами исходящего подключения, включая подсистему балансировки нагрузки, общедоступные IP-адреса уровня экземпляра и Брандмауэр Azure.

Дополнительные сведения о шлюзе NAT Azure см. в статье "Что такое шлюз Azure NAT".

3. Назначение виртуальной машине общедоступного IP-адреса

Схема виртуальных машин с общедоступными IP-адресами уровня экземпляра.

Сопоставления Способ Протоколы IP
Общедоступный IP-адрес на сетевой карте виртуальной машины SNAT (преобразование исходных сетевых адресов)
не используется.
Протокол TCP
Протокол UDP
Протокол ICMP
Протокол ESP

Трафик возвращается клиенту запроса с общедоступного IP-адреса виртуальной машины (IP-адрес уровня экземпляра).

Azure использует общедоступный IP-адрес, назначенный IP-конфигурации сетевой карты в экземпляре, для всех исходящих потоков. Доступны все временные порты экземпляра. При этом неважно, применяется ли к виртуальной машине балансировка нагрузки. Этот сценарий имеет приоритет над другими, за исключением шлюза NAT.

Общедоступный IP-адрес назначается виртуальной машине в соотношении "один к одному" (а не "один ко многим") через NAT типа "один к одному" без отслеживания состояния.

4. Исходящий доступ по умолчанию

Схема исходящего доступа по умолчанию.

В Azure виртуальным машинам, созданным в виртуальной сети без явного определения исходящих подключений, назначается исходящий общедоступный IP-адрес по умолчанию. Этот IP-адрес обеспечивает исходящее подключение от ресурсов к Интернету. Этот доступ называется исходящим доступом по умолчанию. Этот метод доступа не рекомендуется, так как он незащищен, и IP-адреса подлежат изменению.

Внимание

30 сентября 2025 г. исходящий доступ по умолчанию для новых развертываний будет прекращен. Дополнительные сведения см. в официальном объявлении. Рекомендуется использовать одну из форм подключения, как показано в параметрах 1-3 выше.

Что такое порты SNAT?

Порты используются для создания уникальных идентификаторов, с помощью которых поддерживаются отдельные потоки. Чтобы обеспечить такое разделение подключений к Интернету, используется кортеж из 5 элементов.

Если порт используется для входящих подключений, на нем есть прослушиватель для запросов на такие подключения. Этот порт нельзя использовать для исходящих подключений. Чтобы установить исходящее подключение, в качестве порта для обмена данными и поддержки отдельного потока трафика используется временный порт. Если эти временные порты используются для SNAT, они называются портами SNAT.

По определению каждый IP-адрес имеет 65 535 портов. Каждый порт может использоваться для входящих или исходящих подключений по протоколам TCP и UDP. Если общедоступный IP-адрес добавлен в подсистему балансировки нагрузки в качестве интерфейсного IP-адреса, для SNAT будет предоставлено 64 000 портов.

Каждый порт, используемый в правиле балансировки нагрузки или правиле NAT для входящего трафика, использует диапазон из 8 портов из 64 000 доступных портов SNAT. Подобное использование сокращает количество портов, подходящих для SNAT, если для исходящего подключения используется один и тот же интерфейсный IP-адрес. Если используемые правила NAT для балансировки нагрузки или входящих правил NAT находятся в одном блоке из восьми портов, потребляемых другим правилом, правила не требуют дополнительных портов.

Примечание.

Если вам нужно подключиться к любым поддерживаемым службам Azure PaaS, таким как служба хранилища Azure, SQL Azure или Azure Cosmos DB, можно использовать Приватный канал Azure, чтобы избежать SNAT полностью. Приватный канал Azure направляет трафик из виртуальной сети в службы Azure через магистральную сеть Azure, а не через Интернет.

Приватный канал является более предпочтительным вариантом организации частного доступа к службам, размещенным в Azure по сравнению с использованием конечных служб. Дополнительные сведения о различиях между Приватным каналом и конечными точками служб см. в разделе Сравнение частных конечных точек и конечных точек служб.

Как SNAT работает по умолчанию?

Когда виртуальная машина создает исходящий поток, Azure преобразует исходный IP-адрес во временный IP-адрес. Это преобразование выполняется с помощью SNAT.

При использовании SNAT без правил исходящего трафика через общедоступную подсистему балансировки нагрузки порты SNAT предварительно выделяются, как описано в следующей таблице выделения портов SNAT по умолчанию:

Распределение портов по умолчанию

Если для использования распределения портов по умолчанию выбраны правила балансировки нагрузки или правила исходящего трафика настраиваются с параметром "Использовать число исходящих портов по умолчанию", порты SNAT выделяются по умолчанию на основе размера внутреннего пула. Серверные серверы получат количество портов, определенных таблицей, на внешний IP-адрес до 1024 портов.

Например, с 100 виртуальными машинами в серверном пуле и только одним интерфейсным IP-адресом каждая виртуальная машина получит 512 портов. Если добавляется второй внешний IP-адрес, каждая виртуальная машина получит дополнительные 512 портов. Это означает, что каждая виртуальная машина выделяется в общей сложности 1024 порта. В результате добавление третьего внешнего IP-адреса не увеличит количество выделенных портов SNAT за пределами 1024 портов.

Как правило, количество портов SNAT, предоставляемых при использовании выделения портов по умолчанию, можно вычислить как: MIN(# портов SNAT по умолчанию, предоставляемых на основе размера пула * количество интерфейсных IP-адресов, связанных с пулом, 1024).

В следующей таблице показаны предварительные расположения портов SNAT для одного внешнего IP-адреса в зависимости от размера внутреннего пула:

Размер пула (экземпляры виртуальных машин) Порты SNAT по умолчанию
1–50 1024
51–100 512
101–200 256
201–400 128
401–800 64
801–1000 32

Нехватка портов

Каждое соединение с одинаковым IP-адресом назначения и конечным портом использует порт SNAT. Для этого подключения поддерживается отдельный поток трафика от серверного экземпляра или клиента к серверу. В результате сервер получает отдельный порт, на который можно направлять трафик. Без этого процесса клиентский компьютер не знает, к какому потоку относится тот или иной пакет.

Представьте, что несколько браузеров обращаются к https://www.microsoft.com с такими параметрами:

  • IP-адрес назначения — 23.53.254.142;

  • порт назначения — 443;

  • Протокол = TCP

Без портов SNAT для возвращаемого трафика клиент не может отделять один результат запроса от другого.

Количество исходящих подключений может резко возрастать. Серверному экземпляру может быть выделено недостаточно портов. Используйте функции повторного использования подключений в приложении. Если не включить повторное использование подключений, то риск нехватки портов SNAT возрастет.

Дополнительные сведения по использованию пула подключений в Службе приложений Azure см. в статье Устранение нерегулярных ошибок исходящих подключений в Службе приложений Azure.

При возникновении нехватки портов новые исходящие подключения к целевому IP-адресу завершаются сбоем. Подключение е происходит успешно, когда порт становится доступным. Нехватка возникает, когда 64 000 портов, выделенных для IP-адреса, распределены по большому количеству серверных экземпляров. Сведения о том, как справиться с нехваткой портов SNAT, см. в руководстве по устранению неполадок.

Для TCP-подключений подсистема балансировки нагрузки использует один порт SNAT для каждого конечного IP-адреса и порта. Эта возможность многократного использования позволяет устанавливать несколько подключений к одному и тому же IP-адресу назначения с одним и тем же портом SNAT. Такое многократное использование ограничено, если подключение выполняется к одному порту назначения.

Для UDP-подключений подсистема балансировки нагрузки использует алгоритм NAT с ограничением по портам, который занимает один порт SNAT на один IP-адрес назначения независимо от порта назначения.

Порт используется повторно для неограниченного числа подключений. Повторное использование возможно только в том случае, если изменился IP-адрес или порт назначения.

Ограничения

  • Если подключение простаивает и новые пакеты не отправляются, порты будут освобождены через 4–120 минут.

  • Это пороговое значение можно настроить с помощью правил для исходящего трафика.

  • Каждому IP-адресу соответствует 64 000 портов, которые можно использовать для SNAT.

  • Каждый порт можно использовать для TCP- и UDP-подключений к IP-адресу назначения.

  • Порт SNAT для UDP-подключений необходим независимо от того, является ли порт назначения уникальным. Для каждого UDP-подключения к IP-адресу назначения используется один такой порт SNAT.

  • Порт SNAT для TCP-подключений можно использовать для нескольких подключений к одному и тому же IP-адресу назначения, если порты назначения различаются.

  • Нехватка SNAT возникает, когда у серверного экземпляра заканчиваются порты SNAT. При этом в подсистеме балансировки нагрузки могут оставаться неиспользуемые порты SNAT. Если используемые порты SNAT внутреннего экземпляра превышают заданные порты SNAT, то не удается установить новые исходящие подключения.

  • Фрагментированные пакеты удаляются, если исходящий трафик не выполняется через общедоступный IP-адрес уровня экземпляра на сетевом адаптере виртуальной машины.

  • Дополнительные конфигурации IP-адресов в сетевом интерфейсе не создают исходящие подключения (если с ними не связан общедоступный IP-адрес) через подсистему балансировки нагрузки.

Следующие шаги