NAT-шлюз¶
NAT-шлюз — это сетевой узел (маршрутизатор или сервер), выполняющий функцию трансляции сетевых адресов (NAT, Network Address Translation) для преобразования IP-адресов и портов в заголовках пакетов при их прохождении между сетями. Основное назначение NAT-шлюза — обеспечение связи между устройствами в частной (локальной) сети и внешними сетями, чаще всего интернетом, при использовании ограниченного количества публичных IP-адресов.
¶Принцип работы
NAT-шлюз работает на сетевом (третьем) и транспортном (четвёртом) уровнях модели OSI. Когда устройство из локальной сети отправляет пакет во внешнюю сеть, шлюз подменяет исходный IP-адрес и порт отправителя (частные) на свой собственный публичный IP-адрес и новый порт. Эта информация записывается в таблицу трансляции (NAT-таблицу). При получении ответного пакета шлюз сверяет его с таблицей и подменяет адрес назначения обратно на частный IP-адрес и порт исходного устройства.
¶Основные режимы трансляции
- Static NAT (статический NAT) — однозначное соответствие между частным и публичным IP-адресами. Используется для серверов, которые должны быть доступны извне по фиксированному адресу.
- Dynamic NAT (динамический NAT) — пул публичных адресов, из которого шлюз выделяет адрес для каждого нового соединения. После завершения сессии адрес возвращается в пул.
- NAPT (Network Address and Port Translation, также известный как PAT — Port Address Translation) — наиболее распространённый режим, при котором множество устройств в локальной сети используют один публичный IP-адрес, различаясь по номерам портов. Именно этот режим обычно подразумевается под «NAT-шлюзом» в бытовых и офисных маршрутизаторах.
¶Классификация
NAT-шлюзы можно классифицировать по нескольким признакам.
¶По месту размещения
- Пограничные маршрутизаторы — устройства на границе сети провайдера или предприятия, выполняющие NAT для всего трафика, выходящего во внешнюю сеть.
- Программные NAT-шлюзы — реализованы на базе операционных систем (Linux, Windows Server, FreeBSD) с использованием пакетных фильтров (iptables, nftables, PF). Примеры: _Shorewall_, _pfSense_, _OPNsense_.
- Аппаратные NAT-шлюзы — специализированные устройства (маршрутизаторы, межсетевые экраны), где NAT реализован на уровне аппаратного ускорения.
¶По типу сети
- Домашние и малые офисные (SOHO) — встроенные в ADSL/VDSL-модемы, Wi-Fi-роутеры. Обычно поддерживают только PAT.
- Корпоративные — высокопроизводительные устройства с поддержкой статического NAT, балансировки нагрузки и резервирования.
- Облачные — виртуальные шлюзы, предоставляемые облачными провайдерами (например, NAT Gateway в AWS, Cloud NAT в Google Cloud, NAT-шлюз в Яндекс.Облаке).
¶История
Концепция NAT была впервые предложена в 1994 году в документе RFC 1631 «The IP Network Address Translator (NAT)» как временное решение проблемы истощения адресного пространства IPv4. Разработчики из компании Cisco Systems (в частности, Пол Фрэнсис и Кьелл-Ове Баркер) заложили основу для механизма, который впоследствии стал одним из ключевых элементов интернета.
Широкое внедрение NAT началось в конце 1990-х — начале 2000-х годов с ростом числа домашних пользователей и распространением широкополосного доступа. В 2000-е годы NAT стал стандартной функцией в большинстве маршрутизаторов и межсетевых экранов. С переходом на IPv6, где адресное пространство практически неограниченно, необходимость в NAT для обеспечения связности отпадает, однако он продолжает использоваться для совместимости с IPv4-сетями (NAT64, NAT46).
¶Устройство и характеристики
¶Составные части
- Таблица трансляции (NAT-таблица) — хранит записи о текущих сессиях: исходный частный адрес:порт, публичный адрес:порт, адрес назначения, протокол и таймеры.
- Ядро трансляции — модуль, выполняющий подмену адресов и портов в заголовках пакетов.
- Модуль фильтрации — часто совмещён с межсетевым экраном, контролирует, какие соединения разрешено транслировать.
¶Ключевые параметры
- Пропускная способность — максимальный объём трафика, который шлюз может обработать без потери производительности (измеряется в Гбит/с).
- Количество одновременных сессий — максимальное число записей в NAT-таблице (для домашних устройств — несколько тысяч, для корпоративных — сотни тысяч или миллионы).
- Задержка (latency) — время, добавляемое на обработку каждого пакета (обычно микросекунды или единицы миллисекунд).
- Поддержка протоколов — помимо TCP/UDP, шлюз должен корректно обрабатывать ICMP, а также протоколы, инкапсулирующие IP-адреса (например, FTP в активном режиме, SIP, PPTP).
¶Применение
¶Основные сценарии
- Организация доступа в интернет для локальной сети — самый массовый случай. Позволяет десяткам устройств (компьютеры, смартфоны, IoT) выходить в интернет через один публичный IP-адрес.
- Сокрытие внутренней топологии — внешний наблюдатель видит только публичный адрес шлюза, что усложняет прямое сканирование внутренних устройств.
- Виртуализация и облачные вычисления — виртуальные машины в частных подсетях получают доступ к внешним ресурсам через NAT-шлюз облачного провайдера.
- Тестирование и разработка — эмуляция сетей с ограниченным числом публичных адресов.
¶Ограничения и проблемы
- Проблема с протоколами, передающими адреса на прикладном уровне — FTP, SIP, некоторые игры требуют дополнительных модулей (ALG — Application Layer Gateway) для корректной работы через NAT.
- Невозможность инициировать соединение извне — без настройки проброса портов (port forwarding) или статического NAT внешний узел не может обратиться к устройству внутри локальной сети.
- Снижение производительности — на высоких нагрузках обработка таблицы трансляции может стать узким местом.
- Проблемы с IPv6 — при переходе на IPv6 NAT не требуется, но для совместимости с IPv4-ресурсами используются шлюзы NAT64.
¶Критика
NAT подвергается критике по нескольким причинам. Во-первых, он нарушает принцип сквозного соединения (end-to-end), заложенный в архитектуре TCP/IP — каждый узел должен быть потенциально доступен по своему уникальному адресу. Это затрудняет работу одноранговых сетей (P2P), видеоконференций и онлайн-игр. Во-вторых, NAT усложняет администрирование сетей, особенно при необходимости обеспечить внешний доступ к внутренним серверам. В-третьих, он может создавать ложное ощущение безопасности: хотя NAT скрывает внутренние адреса, он не является полноценным межсетевым экраном и не защищает от атак на прикладном уровне.
Сторонники NAT отмечают его роль в замедлении исчерпания адресов IPv4 и снижении затрат на приобретение публичных IP-адресов. В условиях дефицита IPv4-адресов NAT остаётся де-факто стандартом для большинства сетей.
¶Интересные факты
- Термин «NAT» часто путают с «пробросом портов» (port forwarding), хотя последний является лишь одним из способов настройки NAT для обеспечения доступа извне.
- В операционной системе Linux NAT реализуется через подсистему Netfilter и утилиту iptables (или её современную замену nftables). Команда
iptables -t nat -Lпоказывает текущую таблицу трансляции. - В некоторых странах провайдеры используют Carrier-Grade NAT (CGNAT, или NAT444), когда домашние маршрутизаторы подключаются к сети провайдера через частный адрес, и провайдер выполняет трансляцию на своём уровне. Это позволяет экономить публичные адреса, но может вызывать проблемы с доступом к некоторым сервисам.
- Максимальное количество одновременных сессий для одного публичного IP-адреса в режиме PAT теоретически ограничено 65535 портами для UDP и TCP, но на практике ограничивается производительностью оборудования.
¶Источники
- RFC 1631 — The IP Network Address Translator (NAT)
- RFC 2663 — IP Network Address Translator (NAT) Terminology and Considerations
- RFC 3022 — Traditional IP Network Address Translator (Traditional NAT)
- Стивенс, У. TCP/IP. Иллюстрированное руководство. Том 1. — М.: Вильямс, 2010.
- Таненбаум, Э., Уэзеролл, Д. Компьютерные сети. — 5-е изд. — СПб.: Питер, 2012.