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

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

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

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

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

Диаграмма вариантов исходящих соединений Azure.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Эта конфигурация включает следующее:

  • Маскирование IP-адресов

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

  • Сокращает количество ресурсов общедоступного IP-адреса для развертывания

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

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

Определите количество портов на один экземпляр следующим образом:

Количество интерфейсных IP-адресов * 64K / Число внутренних экземпляров

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

Примечание

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

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

4. Используйте фронтенд IP-адрес(а) балансировщика нагрузки для исходящего трафика без правил на исходящий трафик.

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

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

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

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

Важно

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

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

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

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

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

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

Примечание

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

Приватный канал является рекомендуемым вариантом по сравнению с конечными точками службы для частного доступа к размещенным в Azure службам. Дополнительные сведения о разнице между Приватный канал и конечными точками службы см. в разделе Compare Private Endpoints and Service Endpoints.

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

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

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

Таблица выделения портов по умолчанию

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

Можно включить несколько способов выделения портов по умолчанию:

  • Настройка правила балансировки нагрузки с параметром disableOutboundSnat, установленным в false, или путем выбора параметра выделения портов по умолчанию в правиле балансировки нагрузки на портале Azure.
  • Настройка правила исходящего трафика, но задание свойству OutboundPorts значение 0, или включение настройки выделения портов по умолчанию на портале Azure

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

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

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

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

Исчерпание портов

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

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

  • Конечный IP-адрес = 23.53.254.142

  • Порт назначения = 443

  • Протокол = TCP

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

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

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

При возникновении нехватки портов новые исходящие подключения к целевому IP-адресу завершаются сбоем. Подключения завершаются успешно, когда порт становится доступным. Эти исчерпания происходят, когда 64 000 портов из IP-адреса распределяются по множеству серверных экземпляров. Рекомендации по устранению нехватки портов SNAT см. в разделе Support и устранение неполадок для Azure Load Balancer.

Повторное использование порта

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

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

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

В примере в следующей таблице внутренний экземпляр с частным IP-адресом 10.0.0.1 делает TCP-подключения к конечным IP-адресам 23.53.254.142 и 26.108.254.155, а подсистема балансировки нагрузки настроена с интерфейсным IP-адресом 192.0.2.0. Так как IP-адреса назначения отличаются, один и тот же порт SNAT можно повторно использовать для нескольких подключений.

Flow Исходный кортеж Исходный кортеж после SNAT Целевой кортеж
1 10.0.0.1:80 192.0.2.0:1 23.53.254.142:80
2 10.0.0.1:80 192.0.2.0:1 26.108.254.155:80

Ограничения

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

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

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

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

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

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

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

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

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

Дальнейшие шаги