Network Address Translation
Network Address Translation (NAT, с англ. — «преобразование сетевых адресов») — это механизм в компьютерных сетях, позволяющий изменять IP-адреса и/или порты в заголовках пакетов при их прохождении через маршрутизирующее устройство (обычно маршрутизатор или межсетевой экран). Основная цель NAT — обеспечить связь между устройствами в частной (локальной) сети, использующими внутренние (частные) IP-адреса, и внешними сетями, такими как Интернет, где используются публичные IP-адреса. NAT является ключевой технологией для решения проблемы нехватки IPv4-адресов и повышения безопасности сети за счёт сокрытия внутренней топологии.
История
Концепция NAT была разработана в начале 1990-х годов как временное решение для замедления истощения пула публичных IPv4-адресов. Первоначально технология была описана в документе RFC 1631 (1994 год), авторами которого выступили К. Эйчвар и П. Фрэнсис. В 1999 году стандарт был уточнён и расширен в RFC 2663, где были введены основные типы NAT. Массовое внедрение NAT началось с распространением широкополосного доступа в Интернет (ADSL, кабельные модемы) в конце 1990-х — начале 2000-х годов, когда провайдеры начали выдавать клиентам один публичный IP-адрес на целую локальную сеть.
Принцип работы
NAT работает на сетевом уровне (уровень 3) модели OSI, но может взаимодействовать и с транспортным уровнем (уровень 4). Устройство, выполняющее NAT (NAT-устройство), ведёт таблицу трансляции, в которой сопоставляются пары «внутренний IP:порт» и «внешний IP:порт». Когда пакет из локальной сети отправляется во внешнюю сеть, NAT-устройство заменяет исходный IP-адрес (частный) на свой внешний IP-адрес (публичный), а также, при необходимости, изменяет номер порта. Ответные пакеты, поступающие на внешний адрес, NAT-устройство обрабатывает в обратном порядке: по таблице трансляции определяет, какому внутреннему устройству предназначается пакет, и заменяет адрес назначения.
Типы NAT
Существует несколько основных типов NAT, различающихся по способу трансляции адресов и портов:
- Статический NAT (Static NAT) — устанавливает постоянное, однозначное соответствие между внутренним частным IP-адресом и внешним публичным IP-адресом. Используется, когда внутреннее устройство (например, веб-сервер) должно быть постоянно доступно извне по одному и тому же адресу.
- Динамический NAT (Dynamic NAT) — отображает внутренние частные адреса на пул публичных адресов. При этом каждому внутреннему устройству временно выделяется один из свободных публичных адресов. Когда сеанс завершается, адрес возвращается в пул. Этот тип менее распространён из-за необходимости иметь несколько публичных адресов.
- NAT с перегрузкой портов (Port Address Translation, PAT) — наиболее распространённый тип, также известный как «маскарадинг» (masquerading). В этом режиме множество внутренних устройств используют один и тот же внешний IP-адрес, но различаются по номерам портов. NAT-устройство ведёт таблицу, сопоставляющую каждую внутреннюю пару «IP:порт» с уникальной внешней парой «IP:порт». PAT позволяет сотням устройств в локальной сети одновременно выходить в Интернет через один публичный адрес.
Классификация по поведению
В контексте одноранговых сетей (P2P) и приложений, требующих прямой связи (например, VoIP, онлайн-игры), NAT классифицируется по степени ограничения доступа извне:
- Полный конус (Full Cone NAT) — внешний порт NAT-устройства открыт для любого внешнего хоста, который может отправить пакет на этот порт. Любой внешний пакет, пришедший на этот порт, будет переслан внутреннему устройству, независимо от того, отправляло ли это устройство запрос ранее.
- Ограниченный конус (Restricted Cone NAT) — внешний порт открыт только для тех внешних хостов, на которые внутреннее устройство ранее отправляло пакеты. Внешний хост может отвечать, но не может инициировать соединение, если не знает точного адреса и порта внутреннего устройства.
- Ограниченный по портам конус (Port Restricted Cone NAT) — аналогичен ограниченному конусу, но дополнительно проверяется, что внешний хост использует тот же самый порт, на который внутреннее устройство отправляло пакет.
- Симметричный NAT (Symmetric NAT) — наиболее строгий тип. Каждое исходящее соединение от внутреннего устройства к разным внешним хостам получает уникальную внешнюю пару «IP:порт». Внешний хост может ответить только на ту пару, на которую он получил запрос, и только в рамках того же сеанса. Симметричный NAT создаёт наибольшие трудности для P2P-соединений.
Применение
NAT широко применяется в различных сценариях:
- Домашние и офисные сети — маршрутизаторы используют PAT для обеспечения доступа в Интернет всем устройствам локальной сети (компьютеры, смартфоны, принтеры) через один публичный IP-адрес, предоставленный провайдером.
- Корпоративные сети — NAT используется для организации доступа внутренних серверов к внешним ресурсам, а также для публикации сервисов (например, веб-серверов) во внешней сети с помощью статического NAT или проброса портов.
- Провайдеры услуг — операторы связи применяют Carrier-Grade NAT (CGNAT, также известный как Large Scale NAT) для обслуживания большого числа абонентов, когда пул публичных IPv4-адресов ограничен. При CGNAT используется несколько уровней NAT.
- Обход ограничений — NAT может использоваться для сокрытия внутренней структуры сети, что затрудняет внешние атаки и сканирование портов.
- Виртуализация и контейнеризация — в средах виртуализации (например, VirtualBox, VMware) NAT позволяет виртуальным машинам получать доступ к внешней сети через хост-систему.
Проблемы и ограничения
Несмотря на широкое распространение, NAT имеет ряд недостатков:
- Нарушение сквозной связности (end-to-end principle) — NAT нарушает фундаментальный принцип Интернета, согласно которому любой хост может напрямую связаться с любым другим хостом. Это усложняет работу многих приложений, требующих прямых соединений (P2P-файлообмен, видеоконференции, многопользовательские игры).
- Проблемы с протоколами, несущими IP-адреса в данных — некоторые протоколы (например, FTP в активном режиме, SIP, H.323) передают IP-адреса внутри полезной нагрузки пакетов. NAT не может автоматически изменить эти адреса, что приводит к сбоям в работе. Для решения этой проблемы применяются специальные шлюзы прикладного уровня (ALG) или настройки NAT.
- Увеличение задержки и нагрузки на процессор — обработка таблиц трансляции и модификация заголовков пакетов требуют вычислительных ресурсов, что может увеличить задержку и снизить пропускную способность на высоконагруженных маршрутизаторах.
- Сложность отладки и мониторинга — из-за трансляции адресов и портов затрудняется идентификация конкретного внутреннего устройства при анализе сетевого трафика (например, в логах межсетевого экрана).
- Ограничение количества одновременных соединений — таблица NAT имеет ограниченный размер, и при большом количестве параллельных сеансов (например, при торрент-загрузках) может произойти переполнение таблицы, что приведёт к сбросу новых соединений.
Альтернативы и будущее
С развитием протокола IPv6, который предоставляет практически неограниченное количество публичных адресов, необходимость в NAT отпадает. В сетях IPv6 каждое устройство может иметь собственный глобально маршрутизируемый адрес, что восстанавливает сквозную связность. Однако из-за медленного перехода на IPv6 и огромной инерции существующей инфраструктуры NAT продолжает активно использоваться. В качестве временных решений для обхода проблем NAT применяются такие технологии, как:
- STUN (Session Traversal Utilities for NAT) — протокол, позволяющий приложению определить свой внешний IP-адрес и тип NAT, а также установить, может ли оно быть доступно извне.
- TURN (Traversal Using Relays around NAT) — протокол, использующий ретранслятор (сервер-посредник) для передачи данных между двумя узлами, находящимися за NAT, когда прямое соединение невозможно.
- ICE (Interactive Connectivity Establishment) — фреймворк, объединяющий STUN и TURN для автоматического выбора наилучшего пути установления соединения.
Источники
- RFC 1631 — The IP Network Address Translator (NAT), 1994.
- RFC 2663 — IP Network Address Translator (NAT) Terminology and Considerations, 1999.
- RFC 3022 — Traditional IP Network Address Translator (Traditional NAT), 2001.
- RFC 4787 — Network Address Translation (NAT) Behavioral Requirements for Unicast UDP, 2007.
- Таненбаум Э., Уэзеролл Д. — Компьютерные сети. 5-е издание. — СПб.: Питер, 2012.
- Олифер В. Г., Олифер Н. А. — Компьютерные сети. Принципы, технологии, протоколы. — 5-е издание. — СПб.: Питер, 2016.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →