Проброс портов в Windows (портмаппинг)

Проброс портов в Windows (портмаппинг)

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

Брандмауэр Windows

Не смотря на то, что в настройках брандмауэра отсутствуют какие-либо намеки на портмаппинг, такие возможности у него есть - правда, доступны они только через командную строку, и ограничены только протоколом TCP.

Синтаксис команды для портмаппинга следующий:

netsh interface portproxy add v4tov4 listenaddress=[ПРОСЛУШИВАЕМЫЙ ЛОКАЛЬНЫЙ АДРЕС] listenport=[ПРОСЛУШИВАЕМЫЙ ЛОКАЛЬНЫЙ ПОРТ] connectaddress=[АДРЕС НАЗНАЧЕНИЯ] connectport=[ПОРТ НАЗНАЧЕНИЯ]

Уточним назначение данных параметров:

  • listenaddress - локальный адрес, с которого нужно будет переадресовать сетевое соединение
  • listenport - локальный порт, с которого нужно будет переадресовать сетевое соединение
  • connectaddress - адрес назначения, на который нужно будет будет переадресовать сетевое соединение
  • connectport - порт назначения, на который нужно будет будет переадресовать сетевое соединение

Примеры:

Представим, что наш компьютер имеет адрес 10.0.0.13, а где-то в сети с адресом 10.0.0.23 есть веб-сервер. Сделаем так, чтобы при обращению к 80 порту на наш компьютер, происходило открытые веб-сайта с адреса 10.0.0.23:

netsh interface portproxy add v4tov4 listenaddress=10.0.0.13 listenport=80 connectaddress=10.0.0.23 connectport=80

А теперь предположим, что все в той же сети есть компьютер с RDP сервером, расположенном на нестандартном для него порту 4200. Сделаем так, чтобы при попытке подключится к удаленному рабочему столу на нашем компьютере с адресом 10.0.0.13 происходило подключение к другому компьютеру.

netsh interface portproxy add v4tov4 listenaddress=10.0.0.13 listenport=3389 connectaddress=10.0.0.23 connectport=4200

Узнать, какие порты настроены для переадресации на компьютере, можно с помощью команды netsh interface portproxy show all.

Программа 3proxy

3proxy - маленькая программа (полтора мегабайта), автором которой является человек с ником 3APA3A. 3proxy позволяет переадресовывать TCP и UDP трафик, а так же может выступать в роли HTTP, HTTPS, POP3, SOCKS, SMTP прокси. В данном материале мы разберем, как настроить с её помощью портмаппинг TCP или UDP.

Все настройки проброса портов задаются в конфиге который имеет название 3proxy.cfg, и должен находиться в той же директории, что и исполняемый файл программы (по умолчанию, в папке bin).

Синтаксис файла конфига следующий:

[ПРОТОКОЛ TCP или UDP]pm -i[ПРОСЛУШИВАЕМЫЙ ЛОКАЛЬНЫЙ АДРЕС] [ПРОСЛУШИВАЕМЫЙ ЛОКАЛЬНЫЙ ПОРТ] [АДРЕС НАЗНАЧЕНИЯ] [ПОРТ НАЗНАЧЕНИЯ]

То есть, если при использовании протокола TCP нужно выполнить переадресацию с локального порта 80, имеющего адрес 10.0.0.13 на удаленный адрес 10.0.0.23 с портом 8080, нужно написать следующее:

tcppm -i10.0.0.13 80 10.0.0.23 8080

Если речь идет о протоколе UDP, то вместо tcppm будет udppm. В примере ниже, мы переадресуем UDP порт 3389 с локального компьютера с адресом 10.0.0.13 на компьютер с адресом 10.0.0.23.

udppm -i10.0.0.13 3389 10.0.0.23 3389
После каждого изменения файла конфига, программу необходимо перезапускать для применения изменений!

Так же есть возможность запустить программу как службу. Для этого нужно в файле конфига указать параметр service. После этого, нужно запустить программу с параметром --install:

3proxy.exe --install

После чего, произойдет установка программы как службы. Для удаления 3proxy из служб, следует использовать параметр --remove.

Для удобства отслеживания работы портмаппинга, можно включить логирование. Делается это добавлением следующей строчки в файл конфига:

log "C:\3proxy\logs\%Y.%m.%d.log" D

В данной строке "C:\3proxy\logs\%Y.%m.%d.log" - путь к файлу конфига (где %Y обозначает год, %m - месяц, %d - число в имени файла), D - ежедневная ротация лога. Подробнее о настройке логирования можно прочитать на официальном сайте программы.

Пример полноценного работающего конфига для 3proxy:

service
log "C:\Program Files\3proxy\logs\%Y.%m.%d.log" D

tcppm -i192.168.240.5 8080 10.10.10.2 80
tcppm -i192.168.240.5 8081 12.0.1.122 443

nginx

Программа nginx известная в первую очередь как веб-сервер, но за счет возможности по балансировке нагрузки, она может выступать и в роли программы для перенаправления и проброса портов. У nginx есть сборка под Windows, которая к сожалению, не позволяет работать программе как службе, но эта проблема решается использованием дополнительных программ.

Для простого перенаправления 3390 порта с локального адреса на удаленный адрес 10.0.0.23 с портом 3389, достаточно привести файл конфигурации nginx.conf к приведенному ниже виду, и после этого, запустить файл nginx.exe из командной строки.

worker_processes 1;

events {
	worker_connections 1024;
}

stream {

	upstream portforward {
		server 10.0.0.23:3389;
	}

	server {
		listen 3390;
		proxy_pass portforward;
	}
}

Для протокола UDP, потребуется дополнительно указать его использование в директиве listen.

worker_processes 1;

events {
	worker_connections 1024;
}

stream {

	upstream portforward {
		server 10.0.0.23:3389;
	}

	server {
		listen 3390 udp;
		proxy_pass portforward;
		proxy_responses 0;
	}
}
Была ли эта статья Вам полезна?

Добавить комментарий

Ваш адрес email не будет опубликован.

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.