Port Forwarding – или проброс портов, который также иногда называемый перенаправлением портов или туннелированием – это процесс пересылки трафика, адресованного конкретному сетевому порту с одного сетевого узла на другой. Этот метод позволяет внешнему пользователю достичь порта на частном IPv4-адресе (внутри локальной сети) извне, через маршрутизатор с поддержкой NAT.
Обычно peer-to-peer (p2p) программы и операции обмена файлами, такие как веб-сервер и FTP, требуют, чтобы порты маршрутизаторов были перенаправлены или открыты, чтобы позволить этим приложениям работать.
Поскольку NAT скрывает внутренние адреса, p2p работает только в ситуации где соединение идет изнутри наружу, где NAT может сопоставлять исходящие запросы с входящими ответами.
Проблема в том, что NAT не разрешает запросы, инициированные извне, но эту ситуацию можно решить с помощью перенаправления портов. Проброс портов может быть настроен для определенных портов, которые могут быть перенаправлены внутренним хостам.
Напомним, что программные приложения в интернете взаимодействуют с пользовательскими портами, которые должны быть открыты или доступны для этих приложений. В различных приложениях используются разные порты. Например, HTTP работает через well-known порт 80. Когда кто-то набирает адрес wiki.merionet.ru то браузер отображает главную страницу нашей базы знаний. Обратите внимание, что им не нужно указывать номер порта HTTP для запроса страницы, потому что приложение принимает порт 80. Если требуется другой номер порта, его можно добавить к URL-адресу, разделенному двоеточием (:). Например, если веб-сервер слушает порт 8080, пользователь вводит http://www.example.com:8080.
Проброс портов позволяет пользователям в интернете получать доступ к внутренним серверам с помощью адреса порта WAN маршрутизатора и соответствующего номера внешнего порта. Внутренние серверы обычно конфигурируются с частными адресами IPv4 и когда запрос отправляется на адрес порта WAN через Интернет, маршрутизатор перенаправляет запрос на соответствующий сервер в локальной сети. По соображениям безопасности широкополосные маршрутизаторы по умолчанию не разрешают перенаправление любого внешнего сетевого запроса на внутренний хост.
Пример с ”домашним” роутером
На схеме показан пример, когда проброс портов выполнятся при помощи домашнего SOHO (small office/home office) роутера. Переадресация портов может быть включена для приложений при помощи указания внутреннего локального адреса. Пользователь в интернете вводит адрес //wiki.merionet.ru, который соответствует внешнему адресу 212.193.249.136 и пакет попадает на маршрутизатор, который перенаправляет HTTP-запрос на внутренний веб-сервер по адресу IPv4 192.168.1.10, используя номер порта по умолчанию 80.
Можно указать порт, отличный от порта 80 по умолчанию. Тем не менее, внешний пользователь должен знать конкретный номер порта для использования. Подход, используемый для настройки перенаправления портов, зависит от марки и модели маршрутизатора.
Настройка проброса порта
Реализация перенаправления (проброса) портов с помощью команд IOS аналогична командам, используемым для настройки статического NAT. Переадресация портов - это, по существу, статическая трансляция NAT с указанным номером TCP или UDP-порта.
В общем виде основная команда выглядит так:
ip nat inside source {static{tcp | udp local-ip local-port global-ip global-port} [extendable]
где:
- tcp или udp – указывает это tcp или udp порт;
- local-ip – это ip адрес присвоенный хосту внутри сети;
- local-port – устанавливает локальный tcp/udp порт в диапазоне от 1 до 65535. Это номер порта, который слушает сервер;
- global-ip – это уникальный глобальный IP адрес внутреннего хоста, по которому клиенты в интернете будут связываться с ним;
- global-port – устанавливает глобальный tcp/udp порт в диапазоне от 1 до 65535. Это номер порта снаружи, по которому будут связываться клиенты;
- extendable – эта опция применяется автоматически. Она разрешает пользователю настраивать двойственные статические трансляции, если они идут на один и тот же адрес;
Пример настройки:
Router(config)#Ip nat inside source static tcp 192.168.1.10 80 212.193.249.136:8080 Router(config)# interface serial0/0/0 Router(config-if)# ip nat outside Router(config)# interface serial0/0/1 Router(config-if)# ip nat inside
Показана настройка для данной схемы, где 192.168.1.10 - внутренний локальный адрес IPv4 веб-сервера, прослушивающий порт 80. Пользователи получат доступ к этому внутреннему веб-серверу, используя глобальный IP-адрес 212.193.249.136:, глобальный уникальный публичный IPv4-адрес. В этом случае это адрес интерфейса Serial 0/0/1. Глобальный порт настроен как 8080. Это будет порт назначения, вместе с глобальным адресом 212.193.249.136 для доступа к внутреннему веб-серверу. Как и другие типы NAT, перенаправление портов требует конфигурации как внутренних, так и внешних NAT-интерфейсов.
Подобно статическому NAT, команда show ip nat translations может использоваться для проверки переадресации портов.
Router# show ip nat translations Pro Inside Global Inside Local Outside local Outside global tcp 212.193.249.136:8080 192.168.1.10:80 212.193.249.17:46088 212.193.249.17:46088 tcp 212.193.249.136:8080 192.168.1.10:80 --- ---