Триггеринг портов
Триггеринг портов — это опция настройки на маршрутизаторе, осуществляющем трансляцию сетевых адресов (NAT), позволяющая определённому хосту выполнять динамическую и автоматическую переадресацию порта (по условно заданному правилу) на конкретный порт[1][2][3].
Другими словами, триггеринг портов позволяет открыть входящий порт, когда компьютер использует определённый исходящий порт для особого вида трафика. Это похоже на переадресацию портов, однако передача входящего трафика на определённый внутренний хост происходит только при выполнении условия — порт не открыт постоянно, а целевой внутренний хост определяется динамически.
Описание
При обмене данными между двумя сетями через маршрутизатор с NAT хосты внутренней сети с точки зрения внешних устройств выглядят так, будто используют IP-адрес самого маршрутизатора. Без правил маршрутизации трафика невозможно для хоста внешней сети (хост B) установить соединение с хостом во внутренней сети (хост A), так как отправка соединения возможна только на IP-адрес NAT, а внутренняя структура сети скрыта. С помощью триггеринга портов, когда хост A устанавливает исходящее соединение с хостом B через определённый порт или диапазон портов, весь входящий трафик на указанный порт маршрутизатор пересылает на хост A, что и является событием‑триггером для перенаправления. По истечении определённого времени без активности правило отключается[2].
Триггеринг портов полезен в тех сетевых приложениях, где необходимо динамически переключать роли клиента и сервера, например, для аутентификации в IRC‑чате или передачи файлов по FTP.
Пример
Для иллюстрации работы триггеринга портов рассмотрим подключение к IRC (англ. Internet Relay Chat), где обычно используется проверка имени пользователя по протоколу Ident через порт 113.
При соединении с IRC‑сервером клиент инициирует исходящее соединение с порта, например, 6667 (или другого из диапазона 6660–7000), после чего сервер IRC инициирует обратную проверку имени пользователя, открывая соединение с клиентским компьютером на порт 113. Если машина находится за NAT, этот обратный запрос чаще всего блокируется: NAT не способен определить, какому из внутренних устройств направить обратное соединение. Оба этих транспортных соединения необходимы для установления соединения с сервером IRC. Поскольку второе TCP/IP‑соединение становится невозможным, попытка подключения к IRC‑серверу завершится неудачей.
Используя триггеринг портов, маршрутизатор можно настроить так, чтобы при исходящем соединении на порт из диапазона 6660–7000 разрешались входящие соединения на порт 113 именно к этому внутреннему компьютеру. Это даёт больше гибкости, поскольку разрешающая правило не привязано к конкретному адресу во внутренней сети — несколько клиентов могут одновременно работать с IRC‑серверами через NAT‑маршрутизатор. Также обеспечивается дополнительная безопасность: порт для входящих соединений не остаётся постоянно открытым, а активируется только при необходимости.
Недостатки
Главный недостаток триггеринга портов — привязка срабатывающего порта к единственному клиенту одновременно. Пока порт закреплён за конкретной машиной, другие внутренние клиенты не могут использовать это правило. Например, при передаче файлов по FTP ни один другой клиент за NAT не сможет одновременно скачивать файлы с FTP‑сервера, использующего «активный режим» (active mode). В случае с IRC задержка сохранения правила может не позволить другим клиентам быстро подключиться к серверу. Кроме того, триггеринг не подходит для серверов, размещённых за NAT‑маршрутизатором: для получения входящих соединений необходимо, чтобы требуемое внутреннее устройство первым инициировало исходящее соединение. На некоторых моделях маршрутизаторов допускается одновременное использование триггеринга и стандартной переадресации портов несколькими клиентами, но не всегда — это зависит от реализации и может не работать одновременно.