Настройка переброса портов в Windows
В ОС Windows, начиная с Windows XP, существует встроенная возможность установки перенаправления сетевых портов (порт форвардинга). Благодаря этой возможности входящее TCP соединение на любой порт) можно перенаправить на другой порт или даже на другой компьютер. Причем не обязательно, чтобы в системе был сервис, слушающий данный порт.
Функционал настройки порт-форвардинга в Windows реализуется через режим Portproxy команды Netsh. Синтаксис команды следующий:
netsh interface portproxy add v4tov4 listenaddress=X.X.X.X listenport=P.P.P.P connectaddress=A.A.A.A connectport=S.S.S.S
где,
- X.X.X.X – локальный адрес, на котором будет ожидаться соединение (Внешний IP адрес)
- P.P.P.P – локальный порт, который должен слушаться (на него ожидается соединение). Внешний порт.
- A.A.A.A – ip-адрес / dns-имя, на который будет перенаправляться соединение (Внутренний IP адрес)
- S.S.S.S – TPC порт, на который перенаправляется соединение с порта listenport (Внутренний порт)
Допустим наша задача, заставить службу RDP отвечать на нестандартном порту, например, 3340 (этот порт, конечно, можно изменить в настройках самой службы, но мы используем именно RDP для упрощения демонстрации техники перенаправления).
Запускаем командную строку с правами администратора и выполняем.
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110
С помощью netstat проверим, что на компьютере стал прослушиваться порт 3340:
netstat -ano | findstr :3340
Определить процесс, который слушает этот порт можно с помощью его PID (в нашем примере PID – 336):
tasklist | findstr 336
Попытаемся подключиться к этому компьютеру с удаленной системы с помощью любого rdp клиента. В качестве rdp-порта нужно указать 3340 (порт указывается после двоеточия после адреса rdp-сервера):
Подключение должно успешно установиться.
Важно. Проверьте, что в настройках вашего файервола (брандмауэра Windows или стороннего сетевого экрана, такие часто включаются в состав антивирусного ПО) разрешены входящие подключения на новый порт. В случае необходимости в брандмауэр Windows можно добавить новое правило командой:
netsh advfirewall firewall add rule name=”RDP_3340” protocol=TCP dir=in localip=10.10.1.110 localport=3340 action=allow
Выведем на экран список всех правил перенаправления в системе:
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 запросы на 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. Т.е. несмотря на то, что браузер обращается к локальному компьютеру, в нем открывается удаленная страница.
Перенаправление портов также можно использовать, чтобы пробросить порт с внешнего адреса сетевой карты на порт виртуальной машины, запущенной на этом же компьютере.