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

Egress NAT в сервисе VPC настраивается на уровне подсети. Для его настройки нужно создать NAT-шлюз. При создании NAT-шлюзу назначается внешний IP-адрес, который и будет использоваться для связи ресурсов подсети с интернетом. Можно использовать как динамические, так и статические IP-адреса.

По умолчанию при создании Egress NAT для каждой виртуальной машины из подсети выделяются 256 портов. При необходимости это количество можно изменить: увеличить, если виртуальная машина создает много исходящих соединений, или уменьшить, если нагрузки и количество соединений минимальны. Количество выделенных портов представляет собой степень числа 2 в диапазоне от 32 до 2048. При создании NAT-шлюза можно выделить 32, 64, 128, 256, 512, 1024 или 2048 портов.

Внимание

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.