Открыть сервис

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 →