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

NAT Traversal

NAT Traversal — это общее название набора технологий и методов, обеспечивающих установление и поддержание сетевых соединений между узлами, находящимися за устройствами, выполняющими трансляцию сетевых адресов (NAT). Основная задача NAT Traversal — преодоление ограничений, которые накладывает NAT на прямую IP-связь, особенно в протоколах, требующих инициализации соединения извне (например, в одноранговых сетях, VoIP, онлайн-играх и видеоконференциях).

Принцип работы NAT и возникновение проблемы

Что такое NAT

Трансляция сетевых адресов (NAT) — это механизм, при котором маршрутизатор или другое сетевое устройство изменяет IP-адреса и/или порты в заголовках пакетов при их прохождении между сетями. Наиболее распространённый сценарий — использование NAT для предоставления доступа в интернет устройствам в частной локальной сети (например, с адресами из диапазонов 10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16) через один публичный IP-адрес.

Проблема для прямых соединений

Когда два узла, каждый из которых находится за своим NAT, пытаются установить прямое соединение (peer-to-peer), они не могут напрямую обратиться друг к другу, так как их «внутренние» IP-адреса не маршрутизируются в глобальной сети. Устройство NAT скрывает внутреннюю структуру сети и, как правило, блокирует входящие соединения, не инициированные изнутри. Это создаёт проблему для протоколов, где инициатором соединения может выступать любой узел (например, SIP для VoIP, BitTorrent, онлайн-игры).

Основные методы NAT Traversal

Существует несколько подходов к решению проблемы прохождения через NAT, каждый из которых имеет свои особенности и области применения.

STUN (Session Traversal Utilities for NAT)

STUN — это протокол, позволяющий узлу определить свой внешний IP-адрес и порт, которые выделил ему NAT-устройство, а также тип используемого NAT. Клиент отправляет запрос на специальный STUN-сервер (расположенный в публичной сети), и сервер отвечает, указывая, с какого адреса и порта пришёл запрос. Эта информация используется для последующего установления прямого соединения. STUN эффективен для простых типов NAT (полный конус, ограниченный конус), но не работает с симметричным NAT.

TURN (Traversal Using Relays around NAT)

TURN — это протокол, который используется, когда прямое соединение невозможно (например, при симметричном NAT или при блокировке трафика брандмауэром). В этом случае трафик ретранслируется через специальный TURN-сервер, который выступает в роли посредника. TURN гарантирует соединение, но требует значительных ресурсов сервера и увеличивает задержку и нагрузку на сеть. Часто используется в WebRTC и VoIP-приложениях как резервный метод.

ICE (Interactive Connectivity Establishment)

ICE — это фреймворк, который объединяет STUN и TURN, а также другие методы, для выбора оптимального пути соединения. ICE собирает все возможные «кандидаты» на адреса (локальные, рефлексивные от STUN, релейные от TURN) и проводит проверку связности между ними. Протокол выбирает наилучший работающий кандидат, отдавая приоритет прямым соединениям (STUN) перед ретрансляцией (TURN). ICE широко применяется в WebRTC, SIP и других современных системах.

UPnP (Universal Plug and Play) и NAT-PMP (NAT Port Mapping Protocol)

UPnP и NAT-PMP — это протоколы, позволяющие приложениям на локальном устройстве динамически запрашивать у NAT-устройства проброс портов. Приложение может попросить маршрутизатор открыть определённый порт и перенаправлять входящий трафик на него. Это упрощает настройку, но создаёт уязвимости безопасности, так как любое приложение в локальной сети может открыть порт без ведома пользователя. UPnP более распространён, NAT-PMP является его упрощённым аналогом, разработанным Apple.

Методы, основанные на ретрансляции (Relay)

Помимо TURN, существуют и другие методы ретрансляции, такие как SOCKS-прокси или VPN-серверы. Они также позволяют обойти NAT, но не являются специализированными решениями для NAT Traversal. В отличие от TURN, они не оптимизированы для реального времени и часто имеют более высокую задержку.

Типы NAT и их влияние на проходимость

Эффективность методов NAT Traversal зависит от типа NAT, используемого на маршрутизаторе. Выделяют четыре основных типа:

  • Полный конус (Full Cone): Любой внешний узел может отправить пакет на внутренний узел, зная его внешний адрес и порт. Самый простой для прохождения.
  • Ограниченный конус (Restricted Cone): Внешний узел может отправить пакет только в том случае, если внутренний узел ранее отправил пакет на этот внешний адрес (независимо от порта).
  • Ограниченный по порту конус (Port Restricted Cone): Аналогичен ограниченному конусу, но дополнительно проверяется, что внутренний узел ранее отправлял пакет на конкретный порт внешнего узла.
  • Симметричный NAT (Symmetric NAT): Каждому исходящему соединению (уникальная пара «внутренний IP:порт — внешний IP:порт») NAT выделяет уникальный внешний порт. Даже если внутренний узел отправляет пакеты на один и тот же внешний адрес, но с разными портами, NAT может выделить разные внешние порты. Это самый сложный тип для прохождения, и STUN часто неэффективен.

Применение NAT Traversal

Технологии NAT Traversal используются в широком спектре приложений и протоколов:

  • IP-телефония (VoIP): Протоколы SIP, H.323 и другие используют STUN, TURN и ICE для установления звонков между абонентами, находящимися за NAT.
  • Видеоконференции и WebRTC: WebRTC, основа браузерных видеозвонков, активно использует ICE для установления прямых P2P-соединений.
  • Одноранговые сети (P2P): Файлообменные сети (BitTorrent), блокчейн-сети (например, Bitcoin) и мессенджеры (например, Skype, Telegram) используют NAT Traversal для соединения узлов.
  • Онлайн-игры: Многие многопользовательские игры используют NAT Traversal для создания прямых соединений между игроками, чтобы снизить задержки.
  • Удалённый доступ и VPN: Некоторые VPN-протоколы (например, OpenVPN, WireGuard) могут использовать методы NAT Traversal для установления соединения, если клиент находится за NAT.

Критика и ограничения

  • Безопасность: UPnP и NAT-PMP могут быть использованы злоумышленниками для открытия портов на маршрутизаторе без ведома пользователя. STUN и TURN могут раскрывать внешний IP-адрес устройства, что потенциально снижает анонимность.
  • Зависимость от серверов: STUN и TURN требуют наличия публичных серверов, что создаёт единую точку отказа и увеличивает затраты на инфраструктуру.
  • Несовместимость с некоторыми типами NAT: Симметричный NAT остаётся проблемным для многих методов, особенно для STUN.
  • Производительность: TURN и другие ретрансляционные методы увеличивают задержку и потребляют полосу пропускания, что может быть критично для приложений реального времени.

Источники

  • RFC 5389: Session Traversal Utilities for NAT (STUN)
  • RFC 5766: Traversal Using Relays around NAT (TURN): Relay Extensions to STUN
  • RFC 8445: Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal
  • RFC 6973: Privacy Considerations for ICE, STUN, and TURN
  • RFC 6886: NAT Port Mapping Protocol (NAT-PMP)
  • RFC 6970: Universal Plug and Play (UPnP) Internet Gateway Device - Port Control Protocol (IGD-PCP)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →