Port forwarding windows server

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

О чём речь и зачем это нужно

В 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 и выше — от имени администратора):

netsh interface portproxy add v4tov4 listenport= <целое_число или имя_службы>listenaddress= connectport= <целое_число или имя_службы>connectaddress=

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

например:
netsh interface portproxy add v4tov4 listenport=5556 listenaddress=192.168.1.1 connectport=3389 connectaddress=192.168.1.10
В этом примере на компьютере с IP адресом 192.168.1.1 был открыт порт № 5556. При подключении к этому порту все пакеты, приходящие на порт, автоматически будут пересылаться на IP адрес 192.168.1.10, на порт 3389 (RDP).

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

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

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

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

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

Удаление port mapping

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

После этого убедитесь, что все правила удалены: по команде
netsh interface portproxy show all
не должно ничего отображаться.

Если же Вы хотите удалить только одно правило перенаправления портов, команда будет немного сложнее:
netsh interface portproxy delete v4tov4 listenport= <целое_число или имя_службы>listenaddress=

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

например:
netsh interface portproxy delete v4tov4 listenport=5556
В этом примере мы удаляем port mapping, который был настроен на локальном компьютере, на порту 5556.

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

Если Вы хотите изменить значения параметров существующей на portproxy-сервере (т.е. на компьютере, где Вы запускали команду netsh interface portproxy add . ) записи, созданной командой add v4tov4, или добавить новую запись port mapping / port forwarding, выполните следующую команду:
netsh interface portproxy set v4tov4 listenport= <целое_число или имя_службы>listenaddress= connectport= <целое_число или имя_службы>connectaddress=

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

например:
netsh interface portproxy set v4tov4 listenport=5556 listenaddress=192.168.1.1 connectport=3300 connectaddress=192.168.1.10
В этом примере на компьютере с IP адресом 192.168.1.1 была изменена настройка порта № 5556: теперь при подключении к этому порту все пакеты, приходящие на порт, автоматически будут пересылаться на IP адрес 192.168.1.10, на порт 3300.

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

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

  • Главная
  • Windows Server. Настравиваем форвардинг портов через RRAS.

Windows Server. Настравиваем форвардинг портов через RRAS.

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

В тестовой сети имеется роутер с внутренним адресом 10.0.0.2 и терминальный сервер с адресом 10.0.0.5, к которому мы будем организовывать доступ. Внешний адрес условно принят нами как 192.168.64.203. Оба сервера работают под управлением Windows Server 2008 R2.

Настроить форвардинг портов в Windows Server не просто, а очень просто. Откроем Пуск — Администрирование — Маршрутизация и удаленный доступ.

Последовательно разворачивая пункты, находим Преобразование сетевых адресов (NAT), в окне справа выбираем внешний интерфейс и, щелкнув на него правой кнопкой мыши, заходим в его Свойства.

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

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

Подтверждаем изменения и пробуем подключиться с удаленного ПК. Все должно работать без перезапуска сервера и службы RRAS.

Поставим более сложную задачу. Нам необходимо подключаться из внешней сети к удаленному рабочему столу роутера для административных целей и в тоже время обеспечить удаленным клиентам доступ к терминальному серверу. Оба сервера используют для удаленных подключений порт 3389 и пробросив его для сервера 10.0.0.5 как указано выше, мы лишимся возможности удаленно подключаться к серверу 10.0.0.2. Как быть? Ответ прост: использовать другой порт. Для сервера 10.0.0.5 мы будем использовать порт 3390, в то время как подключение на 3389 даст нам возможность управлять роутером.

На закладке Службы и порты нажимаем Добавить и в открывшемся окне указываем имя службы, входящий порт (порт на который будут подключаться из внешней сети), адрес службы во внутренней сети и исходящий порт (на котором служба работает во внутренней сети). В нашем примере исходящим портом будет 3389, а входящим 3390. Данное правило перенаправит все запросы на порт 3390 внешнего интерфейса роутера на порт 3389 терминального сервера во внутренней сети.

Для подключения в строке адреса необходимо указать также порт подключения через двоеточие:

Читайте также:  Линукс минт медленно работает

Как видим служба RRAS предоставляет в руки администратора мощный и в то же время простой инструментарий для управления перенаправлением портов, позволяя легко публиковать внутренние службы во внешней сети.

Configuring Port Forwarding on Windows

You can configure network ports forwarding in all Windows versions without using third-party tools. Using a port forwarding rule, you can redirect an incoming TCP connection (IPv4 or IPv6) from the local TCP port to any other port number, or even to a port on a remote computer. Moreover, it is not necessary for Windows to have a service that listens on a specific TCP port. Windows port forwarding is most commonly used to bypass firewalls or to hide an internal host or service from the external network (NAT/PAT).

In the Linux world, port forwarding is configured quite simply using iptables or firewalld. On Windows Server systems, the Routing and Remote Access Service (RRAS) is typically used to configure port redirections. However, there is an easier way to configure the port forwarding, which works well in any Windows version.

How to Configure Port Forwarding on Windows 10 using Netsh Portproxy?

You can configure port forwarding in Windows using the Portproxy mode of the Netsh command. The command syntax is as follows:

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
where

  • listenaddress – is a local IP address to listen for incoming connection (useful if you have multiple NICs or multiple IP addresses on one interface);
  • listenport – local listening TCP port number (the connection is waiting on);
  • connectaddress – is a local or remote IP address (or DNS name) to which you want to redirect incoming connection;
  • connectport – is a TCP port to which the connection from listenport is forwarded to.

Let’s suppose our task i is to make the RDP service to respond on a non-standard port, for example 3340 (the port can be changed in the settings of the Remote Desktop service, but we are using RDP to make it easier to demonstrate port forwarding). To do this, we need to redirect incoming traffic from TCP port 3340 to another local port – 3389 (this is the default RDP port number).

netstat -na|find «3340»

Alternatively, you can check that the port is not listening locally using the PowerShell cmdlet Test-NetConnection:

Test-NetConnection -ComputerName localhost -Port 3340

To create a port forwarding rule on Windows 10, run a command prompt as an administrator and run the following command:

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

Where 10.10.1.110 – the current IP address of this computer.

Now, use the netstat tool to check that Windows is now listening on local port 3340:

netstat -ano | findstr :3340

IPv6 support must be enabled on the network interface for which the port forwarding rule is created.

These are the prerequisites for the correct operation of port forwarding. Without the IP Helper service and without IPv6 support enabled, the port redirection won’t work.

To make port forwarding work on Windows Server 2003/XP, you must additionally set the IPEnableRouter parameter to 1 in the registry key HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters.

You can find out what process is listening on the specified port using its PID (in our example, the PID is 636):

tasklist | findstr 636

Let’s try to connect to this port from a remote computer using any RDP client. Port 3340 should be specified as the RDP port number. It is specified after the colon following the RDP server address. For example, 10.10.1.110:3340

The RDP connection should be established successfully.

If you want to forward an incoming TCP connection to a remote computer, use the following command:

Читайте также:  Не удалятся windows old

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

This rule will redirect all incoming RDP traffic (from local TCP port 3389) from this computer to a remote host with an IP address 192.168.1.100.

Managing Port Forwarding Rules in Windows

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

Or using the New-NetFirewallRule PowerShell cmdlet:
New-NetFirewallRule -DisplayName «forwarder_RDP_3340» -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow

When creating an incoming firewall rule for port 3340 via Windows Defender Firewall graphical interface, no program needs to be associated with it. This port is only listened by the network driver.

You can create any number of Windows port forwarding rules. All netsh interface portproxy rules are persistent and are stored in the system after a Windows restart.

To display a list of all active TCP port forwarding rules on Windows, run the command:

netsh interface portproxy show all

In our case there is only one forwarding rule from local port 3340 to 3389:

netsh interface portproxy dump

To remove a specific port forwarding rule:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

To remove all existing mapping rules and completely clear the port forwarding rules table:

netsh interface portproxy reset

You can use Windows Server with the RRAS and NAT role installed to configure port forwarding for UDP traffic. You can configure port forwarding between server interfaces using the graphical snap-in ( rrasmgmt.msc ) or with the command:

netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53

Another portproxy feature is an opportunity to make it look like any remote network service is running locally.

For example, let’s redirect the connection from the local port 5555 to a remote HTTP server with IP address 157.166.226.25 (CNN website):

netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp

Now if you go to http://localhost:5555/ in your browser, the CNN Start page will open. So despite the browser is accessing the local computer, it opens a page from an external web server.

Port forwarding rules can also be used to forward a port from the external IP address of a physical NIC to a port of a virtual machine running on the same host. In Hyper-V, you can configure port forwarding on a Virtual Switch level (see below).

Windows cannot forward a range of TCP ports. If you need to forward multiple ports, you will have to manually create multiple portproxy forwarding rules. The easiest way is to generate a list of netsh interface portproxy add commands with different port numbers in notepad and then paste them into the command prompt for execution.

Port Forwarding in Hyper-V Server

When using the Hyper-V role on your computer (it can be installed on both Windows 10 and Windows Server, or as a free Hyper-V Server), you can configure DNAT port forwarding rules using PowerShell. Suppose you want to redirect all https traffic that your Hyper-V host receives to the IP address of the virtual machine running on the host. To do this, use the Hyper-V StaticMapping commands.

First you need to create a Virtual Switch with NAT:

New-VMSwitch -Name «HTTPS-NAT» -SwitchType NAT -NATSubnetAddress 192.168.100.0/24

Then you need to connect the necessary VM to the specified vswitch and enable the address translation rule for all virtual machines connected through this Hyper-V virtual switch:

New-NetNat -Name HTTPS-NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Add-NetNatStaticMapping -ExternalIPAddress «0.0.0.0/24» -ExternalPort 443 -Protocol TCP -InternalIPAddress «192.168.100.77» -InternalPort 443 -NatName HTTPS-NAT

After executing these PowerShell commands, all HTTPS traffic that comes to port 443 of the Hyper-V host will be forwarded to the private IP address of the virtual machine.

Оцените статью