Поделиться через


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

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

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

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

# Method Тип выделения портов Production-grade? Rating
1 Связывание шлюза NAT с подсетью Динамический, явный Yes Best
2 Назначение общедоступного IP-адреса виртуальной машине Статический, явный Yes OK
3 Использование интерфейсных IP-адресов подсистемы балансировки нагрузки для исходящего трафика с помощью правил исходящего трафика Статический, явный Да, но не в масштабе OK
4 Использование внешних IP-адресов подсистемы балансировки нагрузки для исходящего трафика без правил исходящего трафика Статический, неявный No Worst
5 Исходящий доступ по умолчанию Implicit No Worst

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

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

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

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

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

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

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

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

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

Associations Method IP-протоколы
Общедоступный IP-адрес сетевой карты виртуальной машины SNAT (преобразование исходных сетевых адресов)
не используется.
Протокол UDP (протокол пользовательской диаграммы) UDP (протокол 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.

Note

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

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

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

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

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

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

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

Important

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

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

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

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

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

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

Note

Если вам нужно подключиться к любым поддерживаемым службам 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 портов. Выделение портов по умолчанию не рекомендуется для рабочих нагрузок, так как это позволяет выделить минимальное количество портов для каждого серверного экземпляра и повышает риск исчерпания портов 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 см. в руководстве по устранению неполадок.

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

Для 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

Constraints

  • Если подключение не выполняется без новых пакетов, порты будут освобождены через 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.

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