Обзор
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 один внутренний IP-адрес постоянно соотносится с одним внешним. Во время взаимодействия ресурса с интернетом NAT выполняет трансляцию: преобразует внешний IP-адрес во внутренний, и наоборот. One-to-One NAT настраивается автоматически при назначении виртуальной машине или другому ресурсу внешнего IP-адреса.
В отличие от Egress NAT, трансляция происходит на уровне IP-адресов без изменения портов.
One-to-One NAT используется в ситуациях, когда ресурсу нужен постоянный внешний IP-адрес: например, для веб-серверов, почтовых серверов, VPN-шлюзов и т.п.
Как работает One-to-One NAT (пример)
Виртуальная машина (ВМ) имеет внутренний IP-адрес 192.168.0.4. С помощью One-to-One NAT для этого внутреннего IP-адреса настроен выход в интернет через внешний IP-адрес 203.0.113.10.
Взаимодействие этой ВМ с внешним ресурсом с адресом 198.51.100.10 происходит следующим образом:
ВМ отправляет пакет с адреса
192.168.0.4. ПоляSourceиDestinationимеют значения:Source:192.168.0.4;Destination:198.51.100.10.
Пакет поступает на внутренний интерфейс NAT-шлюза.
В соответствии с установленным правилом для IP-адреса
192.168.0.4NAT-шлюз:- заменяет в поле
Sourceзначение192.168.0.4на203.0.113.10; - перенаправляет пакет в интернет.
Внешний сервер с IP-адресом
198.51.100.10принимает пакет с IP-адреса203.0.113.10.Внешний сервер отправляет ответный пакет со следующими параметрами:
Source:198.51.100.10;Destination:203.0.113.10;
Пакет поступает на внешний интерфейс NAT-шлюза.
В соответствии с правилом NAT-шлюз:
- заменяет в поле
Destinationзначение203.0.113.10на192.168.0.4; - перенаправляет пакет во внутреннюю сеть.
Сервер во внутренней сети принимает ответный пакет.
Egress NAT
Egress 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 портов.
Внимание
One-to-One NAT имеет приоритет перед Egress NAT. Если ресурсу в подсети с настроенным Egress NAT назначить внешний IP-адрес методом One-to-One NAT, связь с интернетом будет идти через него, а не через NAT-шлюз.
Egress NAT используется в ситуациях, когда виртуальным машинам или другим ресурсам нужно обеспечить доступ в интернет (например, для регулярного обновления ПО или взаимодействия с внешними API), но при этом они должны оставаться недоступными для подключений извне.
При работе Egress NAT может быть достаточно одного внешнего IP-адреса для подсети. Однако в сценариях, когда ресурсы создают много одновременных исходящих соединений, для всех нужд может не хватить доступного пространства портов одного внешнего IP-адреса. В этом случае настройте Egress NAT для двух или более IP-адресов. Трафик между двумя адресами будет распределяться с помощью внутреннего механизма балансировки.
Создать NAT-шлюз с несколькими внешними адресами можно только через API или с помощью утилиты MWS CLI.
Как работает Egress NAT (пример)
Для подсети 192.168.1.0/24 нужно обеспечить доступ в интернет с помощью Egress NAT. Создан NAT-шлюз с внешним IP-адресом 203.0.113.15. Для всей подсети создан маршрут, в котором NAT-шлюз обозначен в качестве next hop. Нужно обратиться из внутренней сети к внешнему ресурсу с IP-адресом 198.51.100.10.
Взаимодействие с внешним ресурсом происходит следующим образом:
Виртуальная машина с IP-адресом
192.168.1.2отправляет на адрес198.51.100.10пакет со следующими параметрами:Source:192.168.1.2;Source port:34567;Destination:198.51.100.10.
В соответствии с таблицей маршрутизации пакет поступает на NAT-шлюз.
NAT-шлюз выполняет преобразования:
- внутренний IP-адрес ВМ (
192.168.1.2) заменяется на внешний IP-адрес NAT-шлюза (203.0.113.15); - порт, с которого отправлен пакет, заменяется на случайный уникальный порт (например,
55431).
Информация о преобразовании сохраняется на NAT-шлюзе в таблице состояний.
Пакет отправляется в интернет со следующими параметрами:
Source:203.0.113.15;Source port:55431;Destination:198.51.100.10.
Внешний ресурс отправляет ответный пакет со следующими параметрами:
Source:198.51.100.10;Destination:203.0.113.15;Destination port:55431.
Пакет поступает на NAT-шлюз.
NAT-шлюз выполняет преобразования:
- в поле
Destinationзначение203.0.113.15заменяется на192.168.1.2; - в поле
Destination portзначение55431заменяется на34567.
Преобразованный пакет поступает на IP-адрес
192.168.1.2.