top of page

Настройка порт форвардинга в Windows

В ОС Windows, начиная с Windows XP, существует встроенная возможность установки перенаправления / проброса сетевых портов (порт форвардинга). Благодаря этой возможности входящее TCP соединение (IPv4 или IPv6) на любой локальный порт) можно перенаправить на другой порт или даже на порт удаленного компьютер. Причем не обязательно, чтобы в системе был сервис, слушающий данный порт.

В Linux перенаправление портов настраивается довольно просто с помощью iptables. На серверных системах Windows Server для организации перенаправления портов, как правило используется служба маршрутизации и удаленного доступа (RRAS). Однако есть более простой способ настройки порт форвардинга, который одинаково хорошо работает в любой версии Windows.

Настройка перенаправления портов в Windows осуществляется из командой строки через режим Portproxy команды Netsh. Синтаксис команды следующий:

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport где,

  • listenaddress – локальный IP адрес, на котором будет ожидаться соединение

  • listenport – локальный TCP порт, который должен слушаться (на нем будет ожидается входящее соединение)

  • connectaddress – локальный или удаленный IP-адрес или DNS-имя, на который нужно перенаправляться входящее подключение

  • connectport – TCP порт, на который будет перенаправляться соединение с порта listenport

Допустим наша задача, заставить службу RDP отвечать на нестандартном порту, например 3340 (этот порт, конечно, можно изменить в настройках самой службы, но мы используем именно RDP для упрощения демонстрации техники перенаправления). Для этого нам нужно перенаправить входящий трафик на TCP порт 3340 на другой локальный порт – 3389 (стандартный rdp порт).

Примечание. Данный порт не должен слушаться в системе другой службой.

Запускаем командную строку с правами администратора и выполняем.

netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110

Где 10.10.1.110 – текущий IP адрес данного компьютера

С помощью netstat проверим, что на компьютере стал прослушиваться порт 3340:

netstat -ano | findstr :3340

Примечание. Если эта команда ничего не возвращает и перенаправление портов через netsh interface portproxy не работает, убедитесь что у вас в системе включена служба iphlpsvc (IP Helper / Вспомогательная служба IP).

А на сетевом интерфейсе, для которого создается правило перенаправления портов должна быть включена поддержка IPv6.

Это обязательные условия для корректной работы порт-форвардинга. Без службы IP Helper и без включенной поддержки IPv6 механизм перенаправления не работает.

Определить процесс, который слушает этот порт можно с помощью его PID (в нашем примере PID – 636):

tasklist | findstr 636

Попытаемся подключиться к этому компьютеру с удаленной системы с помощью любого rdp клиента. В качестве rdp-порта нужно указать 3340 (порт указывается после двоеточия после адреса rdp-сервера), например, 10.10.1.110:3340:

Подключение должно успешно установиться.

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

netsh advfirewall firewall add rule name=”RDP_3340” protocol=TCP dir=in localip=10.10.1.110 localport=3340 action=allow

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

Можно создать любое количество правил перенаправления портов Windows. Все правила netsh interface portproxy являются постоянными и сохраняются в системе после перезагрузки Windows.

Выведем на экран список всех правил перенаправления TCP портов в системе:

netsh interface portproxy show all

В нашем случае присутствует только одно правило форвардинга с порта 3340 на 3389:

Listen on ipv4: Connect to ipv4:

Address Port Address Port --------------- ---------- --------------- ---------- 10.10.1.110 3340 10.10.1.110 3389

Совет. Также настройки режима portproxy можно получить так: netsh interface portproxy dump #======================== # Port Proxy configuration #======================== pushd interface portproxy reset add v4tov4 listenport=3340 connectaddress=10.10.1.110 connectport=3389 popd # End of Port Proxy configuration

Чтобы удалить определенное правило перенаправления:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110

Чтобы очистить все имеющиеся правила перенаправления:

netsh interface portproxy reset

Важно. Такая схема перенаправления работает только для TCP портов. . Трафик на UDP порты перенаправить не удастся. Также нельзя использовать в качестве connectaddress адрес 127.0.0.1.

Если нужно перенаправить входящее TCP соединение на другой компьютер, команда может выглядеть так:

netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.1.100

Это правило перенаправит все входящие RDP запросы (на порт 3389) с этого компьютера на удаленный компьютер с IP-адресом 192.168.1.100

Еще одной неявной возможностью portproxy является возможность создать видимость локальной работы любого удаленного сетевого сервиса.

Например, создадим такое перенаправление с локального порта 8888 на удаленный адрес 213.180.204.3:

netsh interface portproxy add v4tov4 listenport=8888 connectport=80 connectaddress= 213.180.204.3 protocol=tcp

Теперь, если в браузере перейди по адресу http://localhost:8888/, откроется стартовая страница Yandex. Т.е. несмотря на то, что браузер обращается к локальному компьютеру, в нем открывается удаленная страница.

Перенаправление портов также можно использовать, чтобы пробросить порт с внешнего адреса сетевой карты на порт виртуальной машины, запущенной на этом же компьютере.

Также были случаи, когда в Windows Server 2012 R2 правила перенаправления портов работали только до перезагрузки системы, а после перезагрузки сбрасывались. В этом случае нужно проверить нет ли периодических отключений на сетевом интерфейсе, и не меняется ли IP адрес при загрузке ОС (лучше использоваться статический IP). В качестве обходного решения пришлось добавить в планировщик Windows скрипт с правилами netsh interface portproxy, отрабатывающий при загрузке системы.

В Windows Server 2003 / XP для работы перенаправления дополнительно нужно включить параметр реестра IPEnableRouter = 1 в ветке HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters


Избранные посты
Ще немає постів цією мовою
Щойно пости будуть опубліковані, ви побачите їх тут.
Недавние посты
Архив
Поиск по тегам
Мы в соцсетях
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page