NAT
NAT (от англ. Network Address Translation — «преобразование сетевых адресов») — это механизм в компьютерных сетях, позволяющий изменять IP-адреса (и, опционально, порты транспортного уровня) в заголовках пакетов при их прохождении через маршрутизатор или межсетевой экран. Основное назначение NAT — обеспечение доступа устройств из частной (локальной) сети к ресурсам глобальной сети (Интернет) с использованием одного или нескольких публичных IP-адресов. Технология также выполняет функции базовой защиты внутренней сети, скрывая её топологию от внешних узлов.
История
Идея преобразования адресов возникла в начале 1990-х годов как временное решение проблемы исчерпания адресного пространства протокола IPv4. С ростом числа устройств, подключаемых к Интернету, стало очевидно, что выделение уникального публичного адреса каждому компьютеру невозможно. В 1994 году в документе RFC 1631 (авторы — П. Фрэнсис и К. Эггерт) было впервые формально описано преобразование сетевых адресов. Однако широкое распространение NAT получил после выхода RFC 1918 (1996 год), который определил диапазоны частных (так называемых «серых») IP-адресов:
- 10.0.0.0/8 (один класс A);
- 172.16.0.0/12 (16 классов B);
- 192.168.0.0/16 (256 классов C).
Эти адреса не маршрутизируются в глобальной сети и могут свободно использоваться внутри локальных сетей. NAT стал стандартным компонентом домашних маршрутизаторов и корпоративных файрволов. Несмотря на внедрение IPv6, который предполагает достаточное количество публичных адресов, NAT остаётся широко распространённым по историческим и совместимостным причинам.
Принцип работы
NAT работает на сетевом уровне (уровень 3 модели OSI) и, в случае преобразования портов, затрагивает транспортный уровень (уровень 4). Устройство, выполняющее NAT (обычно маршрутизатор), ведёт таблицу трансляции, в которой сопоставляются пары «внутренний IP:порт» с «внешним IP:портом». При отправке пакета из локальной сети в Интернет маршрутизатор заменяет исходный частный адрес и порт на свой публичный адрес и уникальный порт, записывая соответствие в таблицу. При получении ответного пакета маршрутизатор по номеру порта находит запись в таблице и заменяет адрес назначения на внутренний адрес нужного устройства.
Типы NAT
Существует несколько разновидностей NAT, различающихся способом отображения адресов и портов:
- Статический NAT (Static NAT) — однозначное соответствие между частным и публичным IP-адресом. Используется для серверов, которые должны быть доступны извне по фиксированному адресу. Например, внутренний сервер 192.168.1.10 всегда отображается на публичный 203.0.113.10.
- Динамический NAT (Dynamic NAT) — пул публичных адресов, из которых маршрутизатор выделяет адрес для каждого нового соединения изнутри. Если пул исчерпан, новые соединения блокируются.
- NAPT (Network Address Port Translation), также известный как PAT (Port Address Translation) или «маскарадинг» (masquerading) — наиболее распространённый тип. Множество внутренних устройств используют один публичный IP-адрес, различаясь по номерам портов. Именно этот режим используется в домашних роутерах.
- NAT с перегрузкой (Overloading) — синоним NAPT.
Классификация по поведению
В контексте работы приложений (особенно peer-to-peer) NAT классифицируют по реакции на входящие соединения:
- Полный конус (Full Cone) — все пакеты, приходящие на внешний адрес:порт, пересылаются на внутренний адрес:порт, независимо от источника.
- Ограниченный конус (Restricted Cone) — пересылаются только пакеты от тех внешних узлов, которым внутреннее устройство ранее отправляло данные.
- Ограниченный по портам конус (Port Restricted Cone) — аналогично, но дополнительно проверяется совпадение порта отправителя.
- Симметричный NAT (Symmetric NAT) — для каждого уникального внешнего адреса и порта назначения создаётся отдельное отображение. Даже если внутреннее устройство использует один и тот же внутренний порт, внешний порт для разных получателей будет разным. Этот тип наиболее сложен для организации прямых соединений.
Применение
NAT используется в следующих основных сценариях:
- Доступ в Интернет для локальных сетей — основное применение. Позволяет множеству устройств (компьютеры, смартфоны, IoT-устройства) выходить в сеть через один публичный адрес.
- Скрытие внутренней структуры сети — внешние узлы видят только публичный адрес маршрутизатора, что затрудняет прямое сканирование и атаки на внутренние устройства.
- Перенаправление портов (Port Forwarding) — настройка на маршрутизаторе, позволяющая пропускать входящие соединения на определённые порты к конкретным внутренним серверам (например, для игровых серверов, веб-камер, FTP-серверов).
- Балансировка нагрузки — с помощью NAT можно распределять входящий трафик между несколькими внутренними серверами (например, веб-серверами).
- Трансляция адресов при смене провайдера — статический NAT позволяет сохранить внутреннюю адресацию неизменной при изменении публичного адреса.
Проблемы и ограничения
Несмотря на широкое распространение, NAT имеет ряд недостатков:
- Нарушение сквозной связности (End-to-End Principle) — протоколы, предполагающие прямую адресацию устройств (например, VoIP, видеоконференции, торренты), работают через NAT некорректно без дополнительных механизмов (STUN, TURN, ICE). Для обхода симметричного NAT часто требуется ретранслятор (TURN-сервер).
- Проблемы с протоколами, встраивающими IP-адреса в тело пакета — FTP в активном режиме, SIP, H.323. Для таких протоколов требуется специальный модуль (ALG — Application Layer Gateway) на маршрутизаторе, который анализирует и корректирует содержимое пакетов.
- Увеличение нагрузки на маршрутизатор — поддержание и поиск в таблице трансляции требуют процессорного времени и памяти, особенно при большом количестве одновременных соединений.
- Усложнение протоколирования и трассировки — определить реальный источник пакета из-за NAT бывает затруднительно.
- Исчерпание портов — при NAPT количество одновременных соединений ограничено 65535 портами на один публичный адрес (теоретически, практически меньше из-за служебных портов).
NAT и IPv6
Протокол IPv6 изначально проектировался с расчётом на достаточное количество публичных адресов, поэтому NAT не является обязательным. Однако на практике NAT для IPv6 (NAT66, NPTv6 — Network Prefix Translation) иногда применяется для смены провайдера без изменения внутренней адресации или для скрытия топологии сети. В большинстве же случаев в IPv6-сетях используется прямая адресация, и устройства получают глобальные уникальные адреса (GUA).
Альтернативы
Для решения проблемы нехватки IPv4-адресов без использования NAT применяются:
- Прокси-серверы — работают на прикладном уровне, пересылая запросы от клиентов.
- SOCKS-прокси — работают на транспортном уровне, поддерживают любые протоколы.
- Туннелирование — например, 6to4, Teredo, позволяющие передавать IPv6-трафик через IPv4-сеть.
Однако все эти методы также не обеспечивают полной сквозной связности без дополнительных механизмов.
Источники
- RFC 1631 — The IP Network Address Translator (NAT)
- RFC 1918 — Address Allocation for Private Internets
- RFC 2663 — IP Network Address Translator (NAT) Terminology and Considerations
- RFC 3022 — Traditional IP Network Address Translator (Traditional NAT)
- RFC 4787 — Network Address Translation (NAT) Behavioral Requirements for Unicast UDP
- Олифер В. Г., Олифер Н. А. «Компьютерные сети. Принципы, технологии, протоколы» (5-е издание, 2016)
- Таненбаум Э., Уэзеролл Д. «Компьютерные сети» (5-е издание, 2012)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →