Для перемещения по дереву справки используйте строки заголовка.

Справка по NSG Linux 2.1.3
Дерево команд: ip.nat.…далее…

Что это такое?

Это настройка правил NAT (Network Address Translation, преобразование сетевых адресов). Или, точнее говоря, NAPT — Network Address and Port Translation.

Зачем это нужно?

  1. Для сопряжения сегментов сетей с несогласованными пространствами адресов и номерами портов (например, при интеграции готовой сети в более масштабное решение). Так оно было задумано.
  2. Для замены маршрутизации в случаях, когда нет возможности указать на вышестоящем шлюзе маршрут в сеть, находящуюся за вашим маршрутизатором. При использовании NAT вся сеть, скрытая за вашим маршрутизатором, представляется одним его внешним адресом (или, максимум, несколькими). Вышестоящему шлюзу достаточно знать только маршрут на этот адрес — а он всегда известен, иначе вы бы вообще не имели доступа к вышестоящим сетям. Так оно получилось.
  3. Для некоторой эфемерной степени безопасности. NAT скрывает структуру внутренней сети от внешнего мира и тем самым немного осложняет задачу злоумышленника, имеющего своей целью проникнуть в эту сеть. Так оно считается.
  4. Чтобы откосить от внедрения протокола IPv6. Как известно, IPv4 писался тогда, когда вас, коллега, ещё не было, скорее всего, на этом свете — да и компьютеров тоже столько не было. Поэтому авторы заложили в него смехотворно малое число возможных адресов — всего лишь 232=4294967296 штук. (Но в то время, в начале заключительной четверти XX века н.э., это было до очень много.) Применение NAT, по существу, заменяет IP-адрес, как уникальный и исчерпывающий идентификатор хоста, уникальной совокупностью IP-адреса и номера порта TCP или UDP. Таким образом, 32-битное поле IP-адреса расширяется ещё на 16 бит (или немного меньше) за счёт поля номера порта, и это позволяет иметь во всём мире до 281474976710656 хостов. На каждый интеллектуальный утюг, каждый оруэлловский телескрин и каждую дистанционно управляемую кормушку для котов, возможно, когда-нибудь не хватит, но пока что человечество вроде бы кое-как обходится... криво, коряво, зато привычно. Так оно применяется на самом деле.

Как это настроить?

Функция NAT в ОС Linux является частным случаем механизма netfilter, работающего в ядре Linux. Настройка этого механизма производится с помощью утилиты iptables. Узлы nat, filter, mangle и raw конфигурационного дерева NSG являются оболочкой к данной утилите. Подробно обо всех их возможностях и настройках см. первоисточник, т.е. man pages по iptables в оригинале. Настоятельно рекомендуется ознакомиться с этим документом хотя бы по диагонали, чтобы получить представление об общей структуре настроек.

Говоря коротко, настройка iptables производится в виде таблиц с именами nat, filter mangle и raw, соответственно. Каждая таблица состоит из цепочек последовательно выполняемых правил. На разных этапах обработки пакета в системе используются различные предопределённые цепочки и, кроме того, пользователь может создавать и подключать свои собственные цепочки по своему усмотрению.

Этапы обработки пакетов на сетевом уровне - NAT.

ПРИМЕЧАНИЕ. Многие действия (например, уничтожение пакета) могут, вообще говоря, выполняться в схожих цепочках, принадлежащих к разным таблицам. Однако для правильного понимания конфигурации принято разделять их по существу: преобразования адресов и портов — в таблицу nat, уничтожение или не уничтожение (а также подсчёт) пакетов — в таблицу filter, всё прочее — в mangle. Как минимум, это помогает избежать человеческих ошибок. Извращённые ситуации, когда требуется выполнять эти операции в ином порядке, нежели указано на схеме, теоретически возможны, но на практике крайне редки.

Механизм NAT в устройствах NSG включает в себя следующие цепочки:

PREROUTING
Преобразования, выполняемые до маршрутизации пакета (как входящего локально, так и транзитного). Наиболее частым из таких преобразований является замена адреса и порта назначения — Destination NAT (DNAT), известное также как проброс портов или виртуальные сервера.
POSTROUTING
Преобразования, выполняемые после маршрутизации транзитного пакета. Наиболее частые преобразования — это замена адреса и порта источника: статическая (Source NAT, SNAT) или динамическая (MASQUERADING). Именно последнее, выполняемое на внешнем интерфейсе, имеется в виду под тем NAT, который на простых бытовых маршрутизаторах включается единственной галочкой безо всяких настроек.
OUTPUT
Преобразования, выполняемые после маршрутизации исходящего пакета, т.е. сгенерированного локально на данном устройстве. Эти правила могут отличаться от правил для транзитных пакетов, или не требоваться вообще.
UPnP
Преобразования DNAT, автоматически сформированные при работе службы UPnP. Вызываются из цепочки PREROUTING; если пакет не подпадает под эти правила, то он возвращается на обработку обратно в PREROUTING.
Пользовательские цепочки
Эти цепочки подключаются к одной из 3 предопределённых цепочек. Для перехода между цепочками используются правила, в которых в качестве действия указано имя новой цепочки или RETURN. Для добавления цепочек используйте команды +, _new или _insert. Данный список является именованным и не упорядочивается автоматически. Для удаления используйте команду - или _remove.

При описании узлов nat, filter и mangle в данном справочном руководстве используются следующие понятия:

ВНИМАНИЕ! Механизмы nat, filter, mangle и raw, как и правила маршрутизации, относятся к самой сущности IP-маршрутизатора как целого и работают в тесной связи друг с другом, а также с процедурами IP-маршрутизации и IPsec. Именно по этой причине они настраиваются на уровне системы в целом, а не на уровне интерфейсов по отдельности. (Последнее возможно только для простейших бытовых маршрутизаторов, у которых заранее жёстко определены как роль каждого интерфейса, так и возможные преобразования.)
Чтобы ограничить действие правила одним интерфейсом, необходимо и достаточно указать этот интерфейс в критериях для анализа пакетов.

Некоторые сложные прикладные протоколы используют одновременно несколько портов TCP или UDP. К таковым относится, например, FTP. Для этих протоколов необходимо включить дополнительные механизмы — HELPERS, отслеживающие связь между этими портами. Вспомогательные механизмы нужны также для некоторых протоколов, имеющих другие специфические особенности, которые необходимо учитывать в работе алгоритмов NAT. В сложных случаях (например, при работе таких протоколов не на стандарных для них портах) настройку таких механизмов требуется производить вручную в таблице raw.

Об отдельных аспектах применения NAT см. справку ниже:

Потоки трафика
NAT и резервирование маршрутов
Упрощённая настройка NAT для отдельных типов интерфейсов NSG
Автоматическая настройка NAT с помощью UPnP
NAT и туннели IPsec
NAT и полезная нагрузка туннелей IPsec

ФАК, или Часто Задаваемые Вопросы

Примеры конфигурации

Что делать, если это не работает?

  1. Смотреть правила NAT, фактически созданные в соответствии с вашей конфигурацией, и статистику их срабатывания.
  2. Смотреть входящий и исходящий трафик на интерфейсах при помощи утилиты tcpdump. Изменены ли их адреса и порты в соответствии с вашими намерениями?
    Если интересующие вас пакеты не видны на тех интерфейсах, где они должны быть — смотрите на других, возможно, они NAT-ируются не так и маршрутизируются не туда. А возможно, уничтожаются вашими фильтрами. Обратите внимание на последовательность применения NAT и фильтров (см. схему выше).

© Network Systems Group 2015–2024 Отдел документации