Экспертно

Что такое переадресация портов?

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

Когда трафик, направленный на определенный порт, поступает на маршрутизатор или брандмауэр, или другое сетевое приложение, ответ, который оно получает, может быть определен в соответствии с портом, с которым оно пытается установить связь. При использовании переадресации портов вы можете перехватить сообщение, поступающее, например, на порт 8080, и перенаправить его на порт 80. Новый порт назначения может находиться на том же устройстве, что и принимающее сигнал, или на другом устройстве. Существует множество способов перенаправления портов, и для этого есть разные причины. В этой статье показаны наиболее распространенные сценарии.

Перенаправление портов с помощью маршрутизатора

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

Например, допустим, вы размещаете сервер Minetest и хотите пригласить друзей. Чтобы они могли пройти через ваш маршрутизатор и попасть на ваш сервер Minetest, вы должны пробросить порт с маршрутизатора на компьютер, на котором размещен Minetest. По умолчанию сервер Minetest работает на порту 30000. Вы можете пробросить порт 30000 на вашем маршрутизаторе на порт 30000 на вашем сервере Minetest, или вы можете произвольно придумать более простой порт для запоминания игроками и пробросить его вместо этого. Я обнаружил, что люди неизбежно неправильно считают нули в 30000 (особенно без запятой), поэтому я использую порт 1234 и перенаправляю его на мой внутренний порт 30000.

Интерфейсы маршрутизаторов разных производителей отличаются друг от друга, но идея одна и та же, независимо от того, маршрутизатор какой марки установлен у вас дома. Сначала войдите в свой маршрутизатор.

Его IP-адрес и информация для входа часто указаны на самом маршрутизаторе или в документации к нему. У меня маршрутизатор TP-Link GX90, и я вхожу в него, указывая в веб-браузере адрес 10.0.1.1, но ваш маршрутизатор может иметь адрес 192.168.0.1 или какой-либо другой.

Мой маршрутизатор GX90 называет переадресацию портов «Виртуальные серверы» — это категория, находящаяся на вкладке маршрутизатора «Переадресация NAT». NAT означает Network Address Translation (трансляция сетевых адресов). Другие маршрутизаторы могут называть это просто переадресацией портов, брандмауэром или службами. Чтобы найти нужную категорию, может потребоваться немного щелчков мышью, или вам придется потратить некоторое время на изучение документации к маршрутизатору.

Когда вы найдете настройку переадресации портов, добавьте новое правило, в котором будет указан внешний порт (1234, в моем примере) и внутренний порт (30000). Перенаправьте внешний порт на внутренний порт на IP-адресе компьютера, к которому вы хотите, чтобы люди могли получить доступ.

В этом примере я перенаправляю трафик, поступающий в мою домашнюю сеть через порт 1234, на порт 30000 моего домашнего сервера, расположенного по адресу 10.0.1.2.

Сохраните правило, чтобы продолжить работу.

Далее вам нужно узнать публичный IP-адрес вашей домашней сети. Его можно получить на таких сайтах, как ifconfig.me или icanhazip.com. Либо откройте браузер на одном из этих сайтов, либо получите IP с помощью команды curl:

$ curl ifconfig.me93.184.216.34

Теперь ваши друзья могут присоединиться к вашему серверу Minetest, введя 169.169.23.49:1234 в свой клиент Minetest.

Перенаправление портов с помощью брандмауэра

Сисадминам иногда необходимо перенаправлять порты для трафика, поступающего на сервер. Например, вы можете принять трафик на порт 80, но представить пользователю службу, работающую на порту 8065. Без проброса портов вашим пользователям пришлось бы помнить о необходимости добавлять определенный порт в конце URL, который они вводят в браузер, например, example.com:8065. Большинство пользователей не привыкли думать о портах, поэтому перехват вызова на обычный веб-порт 80 и перенаправление его на непонятный порт, на котором работает ваше веб-приложение, является большим удобством для ваших пользователей.

Вы можете перенаправлять трафик на сервере с помощью firewall-cmd, внешней команды демона firewalld.

Сначала задайте порты и протоколы, которые вы хотите перенаправлять:

$ sudo firewall-cmd \--add-forward-port \port=80:proto=tcp:toport=8065

Чтобы сделать изменение постоянным, используйте параметр —runtime-to-permanent:

$ sudo firewall-cmd --runtime-to-permanent

Переадресация в сети

В сетях существуют и другие виды переадресации, помимо переадресации портов. Например, IP-переадресация и проксирование являются формами переадресации. По мере ознакомления с тем, как обрабатывается сетевая информация при ее маршрутизации, вы можете попробовать различные виды переадресации (и проследить за ними с помощью tcpdump или аналогичных программ), чтобы понять, что лучше всего подходит для вашей конфигурации.