Настройка port forwarding в Windows с помощью netsh

port-forwarding-netsh-windowsВ windows, начиная с версии Windows XP существует возможность настроить проброс портов (port forwarding или port mapping) без каких-либо внешних программ (и даже не используя встроенный брандмауэр!).

Зачем это может быть нужно? Например, для настройки еще одного (дополнительного) порта, на котором будет «висеть» служба. К примеру, вдобавок к порту 80 (на котором находится apache) можно вдобавок «открыть» порт 1580 или 65123, который будет фактически выполнять ту же роль, что и 80-й порт, но при этом он будет «секретным» портом.
Или же можно таким образом «прятать» фактические серверы: разрешать подключения на какой-либо локальный порт (на localhost, 127.0.0.1), а затем «пробрасывать» это подключение на другой сервер (и на другой порт).

Ограничение: данные перенаправления действуют только на TCP порты, UDP трафик таким образом перенаправить не удастся.

Как сделать port mapping (port forwarding) через netsh

Для этого в netsh есть контекст portproxy, который находится в контексте interface. Для создания port mapping выполните из командной строки (в windows Vista и выше — от имени администратора):

где:

  • listenport — обязательный параметр. Задает порт IPv4, который должен прослушиваться, по номеру порта или имени службы;
  • listenaddress — задает IPv4-адрес, который должен прослушиваться. Может быть введен IP-адрес, NetBIOS-имя или DNS-имя компьютера. Если адрес не задан, по умолчанию используется локальный компьютер;
  • connectaddress — задает IPv4-адрес, к которому следует подключаться. Может быть введен IP-адрес, NetBIOS-имя или DNS-имя компьютера. Если адрес не задан, по умолчанию используется локальный компьютер;
  • connectport — задает порт IPv4, к которому следует подключаться, по номеру порта или имени службы. Если параметр connectport не задан, по умолчанию используется значение listenport на локальном компьютере.

например:

Проверка правильности настройки port mapping

В первую очередь проверяем, появилось ли наше правило в списке правил netsh:

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

например:

Если порт не прослушивается (т.е. port mapping не выполняется), то эта команда не отобразит ничего. Если же наша затея увенчалась успехом, то мы увидим что-то типа такого сообщения:
TCP …:5556 0.0.0.0:0 LISTENING …

В случае возникновения проблем с подключением проверьте, что у Вас правильно настроен (или отключен) брандмауэр (который может блокировать подключения на открытый Вами порт).

Удаление port mapping

Для того, чтобы удалить все правила перенаправления (простейший случай) достаточно выполнить команду (напоминаю, командная строка должна быть запущена от имени администратора!):

После этого убедитесь, что все правила удалены: по команде

не должно ничего отображаться.

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

где:

  • listenport — обязательный параметр. Задает удаляемый порт IPv4;
  • listenaddress — задает удаляемый адрес IPv4. Если адрес не задан, по умолчанию используется локальный компьютер.

например:

В этом примере мы удаляем port mapping, который был настроен на локальном компьютере, на порту 5556.

Изменение настроек port mapping через netsh

Если Вы хотите изменить значения параметров существующей на portproxy-сервере (т.е. на компьютере, где Вы запускали команду netsh interface portproxy add …) записи, созданной командой add v4tov4, или добавить новую запись port mapping / port forwarding, выполните следующую команду:

где:

  • listenport — обязательный параметр. Задает порт IPv4, который должен прослушиваться, по номеру порта или имени службы;
  • listenaddress — задает IPv4-адрес, который должен прослушиваться. Может быть введен IP-адрес, NetBIOS-имя или DNS-имя компьютера. Если адрес не задан, по умолчанию используется локальный компьютер;
  • connectaddress — задает IPv4-адрес, к которому следует подключаться. Может быть введен IP-адрес, NetBIOS-имя или DNS-имя компьютера. Если адрес не задан, по умолчанию используется локальный компьютер;
  • connectport — задает порт IPv4, к которому следует подключаться, по номеру порта или имени службы. Если параметр connectport не задан, по умолчанию используется значение listenport на локальном компьютере.

например:

В этом примере на компьютере с IP адресом 192.168.1.1 была изменена настройка порта № 5556: теперь при подключении к этому порту все пакеты, приходящие на порт, автоматически будут пересылаться на IP адрес 192.168.1.10, на порт 3300.

Примечание: Можно изменять любые значения параметров для существующей записи сервера portproxy. Если значения не заданы, изменения не производятся.

Внимание! несмотря на то, что port mapping осуществляется с IPv4 на IPv4, для успешной работы перенаправления портов должен быть установлен IPv6.