Обзор
NAT (Network Address Translation) — механизм, с помощью которого виртуальные машины и другие ресурсы во внутренней сети получают доступ в интернет через внешний IP-адрес.
NAT преобразует IP-адреса пакетов в зависимости от направления трафика: при входящих соединениях внешний IP заменяется на внутренний, а пакеты передаются во внутреннюю сеть. При исходящих соединениях внутренний IP заменяется на внешний, и пакеты отправляются в интернет.
Назначить внешний IP-адрес внутренним ресурсам можно одним из двух методов:
- One-to-One NAT (1:1 NAT, static NAT);
One-to-One NAT
Заголовок раздела «One-to-One NAT»При использовании One-to-One NAT один внутренний IP-адрес постоянно соотносится с одним внешним. Во время взаимодействия ресурса с интернетом NAT выполняет трансляцию: преобразует внешний IP-адрес во внутренний, и наоборот. One-to-One NAT настраивается автоматически при назначении виртуальной машине или другому ресурсу внешнего IP-адреса.
В отличие от Egress NAT, трансляция происходит на уровне IP-адресов без изменения портов.
One-to-One NAT используется в ситуациях, когда ресурсу нужен постоянный внешний IP-адрес: например, для веб-серверов, почтовых серверов, VPN-шлюзов и т.п.
Egress NAT
Заголовок раздела «Egress NAT»Egress (Many-to-Many) NAT — механизм для маршрутизации исходящего трафика, при котором несколько внутренних IP-адресов сопоставляются с одним или несколькими внешними IP-адресам
Egress NAT обеспечивает только исходящие соединения. При трансляции изменяются не только IP-адреса, но и порты: чтобы отслеживать соединения, NAT-шлюз заменяет порт, с которого поступает пакет, на случайный уникальный порт из доступных. Этот порт называется SNAT-портом (англ. SNAT — Source Network Address Translation).
Egress NAT в сервисе VPC настраивается на уровне подсети. Для его настройки нужно создать NAT-шлюз. При создании NAT-шлюзу назначается внешний IP-адрес, который и будет использоваться для связи ресурсов подсети с интернетом. Можно использовать как динамические, так и статические IP-адреса.
Когда исходящий трафик проходит через Egress NAT, выполняется трансляция адреса и порта: для каждого соединения исходная пара <IP-адрес>:<порт> заменяется на внешний IP-адрес NAT-шлюза и выделенный SNAT-порт, а NAT сохраняет сопоставление для корректной доставки обратного трафика.
В Egress NAT используется динамическое выделение портов — режим работы, при котором виртуальные машины автоматически получают SNAT-порты из пула. Порты выделяются блоками по 256. По мере роста нагрузки выделяются дополнительные порты. Когда нагрузка снижается, освободившиеся порты возвращаются обратно в пул.
Размер пула задается при создании NAT-шлюза. По умолчанию минимальное количество портов составляет 0, максимальное — 4096. При необходимости эти значения можно изменить, но они должны быть кратны 256. Наибольшее количество, которое можно установить — 64 512 портов.
Egress NAT используется в ситуациях, когда виртуальным машинам или другим ресурсам нужно обеспечить доступ в интернет (например, для регулярного обновления ПО или взаимодействия с внешними API), но при этом они должны оставаться недоступными для подключений извне.
При работе Egress NAT может быть достаточно одного внешнего IP-адреса для подсети. Однако в сценариях, когда ресурсы создают много одновременных исходящих соединений, для всех нужд может не хватить доступного пространства портов одного внешнего IP-адреса. В этом случае настройте Egress NAT для двух или более IP-адресов. Трафик между двумя адресами будет распределяться с помощью внутреннего механизма балансировки.
Создать NAT-шлюз с несколькими внешними адресами можно только через API или с помощью утилиты MWS CLI.