Преобразование сетевых адресов (NAT)¶
Обзор¶
NAT — это технология, которая преобразует IP-адреса и/или порты в заголовках транзитных пакетов. Чаще всего используется для маршрутизации нескольких внутренних IP-адресов через общий внешний IP-адрес и для сокрытия внутренних адресов от внешних сетей.
NAT на маршрутизаторе Факел поддерживает три типа преобразования адресов:
NAT44 — внутренний IPv4-адрес во внешний IPv4;
NAT64 — внутренний IPv6-адрес во внешний IPv4;
NAT66 — внутренний IPv4-адрес во внешний IPv4.
Направления преобразования
NAT преобразует адреса в соединениях трех направлений: исходящем (SNAT), входящем (DNAT) и двустороннем (Bi-NAT). В каждом случае маршрутизатор находится посередине, между внутренней и внешней сетью, и выполняет преобразования входящего и/или исходящего трафика в соответствии с заданными параметрами. Адрес, в который преобразуется исходный адрес называется целевым адресом преобразования.
Механизмы NAT
В NAT существуют четыре механизма: статический NAT, динамический NAT, преобразование порта (PAT) и переадресация порта (Port Forwarding).
Статический NAT (static NAT) на маршрутизаторе Факел преобразует один внутренний IP-адрес в один внешний и обратно. Если извне поступит ответный пакет, NAT произведет обратное преобразование и допустит трафик до получателя во внутренней сети. Для статического преобразования достаточно лишь задать внешний адрес — destination и внутренний адрес получателя — translation. По сути, статический NAT совмещает в себе SNAT и DNAT и является упрощенной формой преобразования. Статический NAT работает без указания портов, поэтому вы можете использовать его в связке с протоколами, которые не использует порты, например, GRE.
Динамический NAT на маршрутизаторе Факел преобразует один внутренний IP-адрес во внешний динамическим способом, т.е. внешний IP-адрес назначается клиенту в порядке живой очереди из таблицы NAT с доступными и заранее выделенными внешними IP-адресами.
Преобразование порта (PAT) на маршрутизаторе Факел меняет внутренний IP-адрес на внешний и добавляет уникальный номер порта, соответствущий конкретной машине во внутренней сети. При этом маршрутизатор будет отслеживать адреса соединений в таблице NAT. Когда пакет будет возвращаться по обратному пути, маршрутизатор допустит пакет до адресата во внутреннюю сеть, если обнаружит соответствующую запись в своей таблице NAT. Некоторые порты (80 или 22) заняты службами и PAT не может их использовать в качестве идентификатора. Однако это не является проблемой, поскольку диапазон значений в пространстве TCP/IP допускает до 65536 уникальных номеров.
Переадресация порта на маршрутизаторе Факел чаще используется в сценариях для входящего трафика. Когда пакет поступает на определенный порт, его внешний адрес преобразуется во внутренний с учетом идентификатора порта и допускается до конкретного получателя.
Правила преобразования NAT
Чтобы включить и настроить механизмы NAT, используйте правила преобразования. Правила создаются отдельно для каждого типа преобразования (NAT44, NAT64, NAT66).
В дополнение каждый тип позволяет задать правила отдельно для исходящего и входящего направлений преобразования и отдельно для статического NAT. Чтобы создать правило для двустороннего соединения, укажите правила с одинаковыми порядковыми номерами для исходящего и входящего соединений.
Информация по работе с правилами содержится в соответствующих разделах для каждого типа преобразования:
Настройка NAT перед VPN
Если поставщик услуг (ASP) требует доступ к своим сервисам через VPN и специально предоставленный IP-адрес источника, настройте NAT перед VPN. В такой конфигурации NAT будет сначала преобразовывать внутренние IP-адреса в адрес источника от поставщика услуг, а затем направлять трафик через VPN-туннель на сервер поставщика услуг.
Распределение нагрузки
В NAT встроена функция распределения нагрузки между устройствами внутри сети с разными IP-адресами. Сначала NAT преобразует внешний IP-адрес в целевой адрес преобразования, а затем адресует пакет устройству с конкретным IP-адресом внутри сети согласно выбранному весу устройства и на основе типа хэширования.
Для распределения нагрузки между устройствами с разными IP-адресами NAT использует хэш: набор уникальных символов-идентификаторов, которые маркируют соединения и позволяют пакетам с одного и того же источника попадать на один и тот же адрес назначения. Таким образом NAT поддерживает состояние сессии на сервере.
Символы хэша генерируются случайно или представляют собой разное сочетание данных пакетов: адресов и/или портов источника и назначения. По умолчанию работает случайная генерация.
Чтобы включить распределение нагрузки, укажите нужные IP-адреса устройств load-balance backend и вес каждого из них load-balance backend x.x.x.x weight. Вес означает процентную долю соединений, которая будет направлена на соответствующий сервер. Суммарный вес всех устройств должен равняться 100.
Утечка трафика при NAT
В некоторых случаях с внешнего интерфейса может исходить трафик, который не был преобразован через NAT и это может выглядеть как неработающий NAT, однако на самом деле система работает исправно. Такое поведение вызвано тем, что интерфейс продолжает посылать трафик с флагами состояния TCP-соединения: RST, FIN ACK, RST ACK даже после того, как МСЭ пометил соединение как INVALID. Эти сообщения о состоянии не представляют угрозу.
Чтобы полностью убрать утечку, настройте МСЭ так, чтобы он отбрасывал пакеты с меткой INVALID. Однако соединения с меткой INVALID могут быть полезны для поиска неисправностей и при просмотре журнала событий.
Обратный NAT
Иногда может возникнуть ситуация, когда внутренний интерфейс будет обращаться через NAT ко внешнему IP-адресу устройства, которое на самом деле расположено в той же сети, что и внутренний интерфейс и обладает своим внутренним IP-адресом. В таком случае NAT будет преобразовывать внутренние адреса во внешние и обратно, но устройство-адресат не получит пакеты. Возникнет замкнутый цикл.
Чтобы этого не происходило, используйте технику обратного NAT (Hairpin NAT), которая перехватывает исходящий пакет и меняет внешний адрес назначения на внутренний. Таким образом, трафик не выходит за пределы сети и маршрутизируется корректно.
Чтобы настроить обратный NAT, добавьте к уже существующим правилам исходящего трафика еще номер порта назначения, внутренний интерфейс назначения, тип протокола и адрес преобразования.