Skip to content

Обзор

NAT (Network Address Translation) — механизм, с помощью которого виртуальные машины и другие ресурсы во внутренней сети получают доступ в интернет через внешний IP-адрес.

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

Назначить внешний IP-адрес внутренним ресурсам можно одним из двух методов:

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 происходит следующим образом:

  1. ВМ отправляет пакет с адреса 192.168.0.4. Поля Source и Destination имеют значения:

    • Source: 192.168.0.4;
    • Destination: 198.51.100.10.
  2. Пакет поступает на внутренний интерфейс NAT-шлюза.

  3. В соответствии с установленным правилом для IP-адреса 192.168.0.4 NAT-шлюз:

    • заменяет в поле Source значение 192.168.0.4 на 203.0.113.10;
    • перенаправляет пакет в интернет.
  4. Внешний сервер с IP-адресом 198.51.100.10 принимает пакет с IP-адреса 203.0.113.10.

  5. Внешний сервер отправляет ответный пакет со следующими параметрами:

    • Source: 198.51.100.10;
    • Destination: 203.0.113.10;
  6. Пакет поступает на внешний интерфейс NAT-шлюза.

  7. В соответствии с правилом NAT-шлюз:

    • заменяет в поле Destination значение 203.0.113.10 на 192.168.0.4;
    • перенаправляет пакет во внутреннюю сеть.
  8. Сервер во внутренней сети принимает ответный пакет.

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.

Взаимодействие с внешним ресурсом происходит следующим образом:

  1. Виртуальная машина с IP-адресом 192.168.1.2 отправляет на адрес 198.51.100.10 пакет со следующими параметрами:

    • Source: 192.168.1.2;
    • Source port: 34567;
    • Destination: 198.51.100.10.
  2. В соответствии с таблицей маршрутизации пакет поступает на NAT-шлюз.

  3. NAT-шлюз выполняет преобразования:

    • внутренний IP-адрес ВМ (192.168.1.2) заменяется на внешний IP-адрес NAT-шлюза (203.0.113.15);
    • порт, с которого отправлен пакет, заменяется на случайный уникальный порт (например, 55431).
  4. Информация о преобразовании сохраняется на NAT-шлюзе в таблице состояний.

  5. Пакет отправляется в интернет со следующими параметрами:

    • Source: 203.0.113.15;
    • Source port: 55431;
    • Destination: 198.51.100.10.
  6. Внешний ресурс отправляет ответный пакет со следующими параметрами:

    • Source: 198.51.100.10;
    • Destination: 203.0.113.15;
    • Destination port: 55431.
  7. Пакет поступает на NAT-шлюз.

  8. NAT-шлюз выполняет преобразования:

    • в поле Destination значение 203.0.113.15 заменяется на 192.168.1.2;
    • в поле Destination port значение 55431 заменяется на 34567.
  9. Преобразованный пакет поступает на IP-адрес 192.168.1.2.