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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения о NAT виртуальных сетей Azure см. в этой статье.

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

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

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

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

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

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

Примечание

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

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

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

  • При использовании базового Load Balancer
  • Виртуальная машина в Azure (без описанных выше связей). В этом случае исходящее подключение предоставляется по IP-адресу исходящего трафика по умолчанию. Этот IP-адрес — это динамический IP-адрес, назначенный Azure, который нельзя контролировать. SNAT по умолчанию не рекомендуется для производственных рабочих нагрузок и может привести к сбоям подключения.
  • Виртуальная машина во внутреннем пуле Load Balancer без правил для исходящего трафика. В результате вы используете интерфейсный IP-адрес подсистемы балансировки нагрузки для исходящих и входящих подключений, что более подвержено сбоям подключения из-за нехватки портов SNAT.

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

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

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

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

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

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

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

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

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

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

Размер пула (экземпляры виртуальных машин) Выделяемые по умолчанию порты SNAT на каждую конфигурацию IP-адресов
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, он не сможет установить новые исходящие подключения.
  • Фрагментированные пакеты будут удалены, если только для исходящего трафика не используется общедоступный IP-адрес уровня экземпляра на сетевом адаптере виртуальной машины.
  • Дополнительные IP-конфигурации сетевого интерфейса не исходящие связи (если с ним не связано общедоступный IP-адрес) с помощью Load Balancer.

Дальнейшие действия