Hyper v windows 10 проброс портов

Настроим NAT (общий интернет) и проброс портов для виртуальной сети Hyper-V

Сегодня поговорим о сети в Hyper-V, особенно о таких случаях, когда компьютер подключен по wifi, что в домашних условиях бывает часто…

В таких продуктах, как Vmware Player и Virtualbox изначально идет заточка под десктоп и там легко заводится тип подключения мост на wifi адаптер, когда ip адреса прокидываются в вашу беспроводную сеть… Но Hyper-V заточен больше под серверное применение, можете попробовать установить Linux на virtualbox или vmware (тут не говорю про серверный аналог, только десктопный продукт) и пингануть сеть, то пинги будут слегка больше иметь задержки, чем на Hyper-V, к тому же, Hyper-V еще имеет автозапуск в фоне независимо от того зашел пользователь в систему или нет.

Всё это и многое другое, к примеру скорость дисковой подсистемы, определяет выбор в пользу Hyper-V для домашнего Linux-сервера на Windows машине.

Но вот в Hyper-V нет никаких специальных сетевых драйверов-прослоек, которые бы позволяли его использовать по wifi в режиме моста (внешняя сеть), при таком использовании начнутся проблемы с обрывами между машинами и самым правильным решением будет использовать внутреннюю сеть или NAT.

Установка Hyper-V на Windows 10

Hyper-V работает только на редакциях Windows 10 pro, для его активации нужно запустить настройки — приложения -программы и компоненты

Далее нужно зайти в «включени и отключение компонентов»

И тут отметить галочкой Hyper-V, после перезагрузки в пуске появится Диспетчер Hyper-V

Создание внутренней сети в Hyper-V

Первым делом нужно создать виртуальный коммутатор, использовать Default Switch с недавнего времени стало невероятно, т.к. при каждой перезагрузке он сбрасывает ip на свой автоматический.

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

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

Назовем его к примеру VirtMachines

Настройка NAT на Windows 10 в PowerShell для Hyper-v (и не только)

Допустим, все виртуальные машины у нас будут в подсети 192.168.200.0, а шлюз у них будет 192.168.200.1, для этого этот айпи укажем у адаптера для virtmachines

А далее открываем PowerShell от имени администратора (правый клик по кнопке пуск)

И начинаем колдовать…

Первым делом нам нужно настроить сам nat, это snat или прямой нат или подмена источника… Он же маскарадинг. Дело в том, что если во внешнюю сеть улетит ip источника 192.168.200.100, то ответа никак не получит эта машина, для этого всю внутреннюю подсеть нужно скрывать за своим внешним или почти внешним айпи

New-NetNat -Name nat1 -InternalIPInterfaceAddressPrefix 192.168.200.0/24

Теперь в обратную сторону, то что приходит на физическую машину на 80 порт отправим на виртуальную машину с айпи 192.168.200.100

Add-NetNatStaticMapping -NatName nat1 -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.200.100 -InternalPort 80 -ExternalPort 80

Обратите внимание, что в прямом и обратном NAT применяется один NatName…

After digging through the article linked to in Alexis Tupeck’s answer, I was able to set up a Hyper-V Internal Switch, give it a new private IP/subnet, and create a new NAT on this subnet. Then I could set up VMs with static IPs on the subnet, and forward ports to them on the new NAT.

The following example will set up an internal network with the Hyper-V host on 172.16.10.254 /24, and the guest VM on 172.16.10.100.

1. Make a new Hyper-V Internal Switch

This can either be done through the Hyper-V Manager or through PowerShell:

New-VMSwitch  -SwitchName "NAT Switch"  -SwitchType Internal

This will create a new network adapter named «vEthernet (NAT Switch)», which we use below.

2. Set up a new IP address/subnet for the Hyper-V host on the new adapter

We will use 172.16.10.254 here, with a /24 subnet (255.255.255.0).

New-NetIPAddress  -IPAddress 172.16.10.254  -PrefixLength 24  -InterfaceAlias "vEthernet (NAT Switch)"

This new Hyper-V host IP will be the gateway for the VMs.

3. Set up a NAT Network on the new subnet:

New-NetNat  -Name NATNetwork  -InternalIPInterfaceAddressPrefix 172.16.10.0/24

This sets up Windows to perform network address translation on packets to/from this subnet.

4. Set up a VM on the virtual switch.

Give it a static IP of 172.16.10.100 — use /24 or 255.255.255.0 for the subnet mask — and set its gateway to the Hyper-V host on 172.16.10.254.

(Assuming the Hyper-V host isn’t serving DNS on your new subnet, you can likely just point its DNS servers to the same ones the host is using itself, or something external e.g. 1.1.1.1 or 8.8.8.8.)

You should now be able to reach the Internet from the VM through the Hyper-V host using the NAT.

5. Set up a port-forward on the NAT Network to the VM (e.g. TCP 1443 -> 172.16.10.100:443):

Add-NetNatStaticMapping  -NatName NATNetwork  -Protocol TCP  -ExternalIPAddress 0.0.0.0/24  -ExternalPort 1443  -InternalIPAddress 172.16.10.100  -InternalPort 443

After this, you should be able to access the VM’s port 443 through localhost:1443 on the Hyper-V host.

Создание сетей NAT возможно в Windows Server 2016, Hyper-V Server 2016 и более поздних версиях, а также Windows 10. На одном гипервизоре может быть создана только одна сеть NAT. Также обратите внимание, что в отличие от настольных средств виртуализации (VMWare Workstation или VirtualBox), служба NAT в Hyper-V не предоставляет дополнительных сетевых служб (DHCP или DNS), поэтому сетевые настройки виртуальным машинам необходимо назначить самостоятельно.

Также настройка NAT производится исключительно в консоли PowerShell и недоступна в графическом интерфейсе.

Создаем новый виртуальный коммутатор с типом сети Внутренняя:

New-VMSwitch -SwitchName "VM_NAT" -SwitchType Internal

Смотрим ifIndex только что созданного коммутатора:

Get-NetAdapter

Задаем адресацию:

New-NetIPAddress -IPAddress 192.168.10.1 -PrefixLength 24 -InterfaceIndex 21

Пояснения:

Создаем Nat:

New-NetNat -Name "vNAT" -InternalIPInterfaceAddressPrefix 192.168.10.0/24

Проверим что NAT создался:

Get-NetNat

Теперь для вновь создаваемых виртуальных машин нужно указать сеть VM_NAT и при настройке сети прописать адрес шлюза 192.168.10.1

Удалить можно командой

Remove-NetNat

После этого потребуется удалить назначенный шлюзу IP-адрес:

Remove-NetIPAddress -IPAddress 192.168.10.1 -InterfaceIndex 21

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

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

Remove-VMSwitch -SwitchName «VM_NAT»

Создаем проброс порта 22 в виртуальную машину:

Add-NetNatStaticMapping -NatName "vNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0/24 -ExternalPort 22 -InternalIPAddress 192.168.10.1 -InternalPort 22

Посмотреть список:

Get-NetNatStaticMapping

Удалить конкретное правило по ID:

Remove-NetNatStaticMapping -StaticMappingID <ID>

Удалить все правила:

Remove-NetNatStaticMapping

Установку компонент интеграции Hyper-V можно выполнить из официальных репозиториев Debian. После установки желательно перезагрузить гостевую ОС, чтобы убедиться в успешном автоматическом запуске служб:

# apt-get install hyperv-daemons
# reboot

Проверим состояние служб после перезагрузки:

# systemctl status hyperv-daemons.hv-*

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

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

Содержание:

  • Включить перенаправления порта в Windows с помощью netsh portproxy
  • Настройка правил файервола для режима перенаправления портов Windows
  • Управление правилами проброса портов netsh в Windows
  • Настройка перенаправления портов с помощью NAT на Hyper-V Server

Включить перенаправления порта в Windows с помощью netsh portproxy

Вы можете включить и настроить перенаправление портов в Windows из командой строки через режим Portproxy команды Netsh.

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

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

где,

  • listenaddress – локальный IP адрес, на котором ожидается соединение (полезно, если у вас несколько сетевых карт в разных подсетях/VLAN или несколько IP адресов на одном интерфейсе);
  • listenport – номер локального TCP порта, подключение к которому будет перенаправляться (на этом порту ожидается входящее соединение);
  • connectaddress – локальный или удаленный IP-адрес или DNS-имя хоста, на который нужно перенаправить сетевое подключение;
  • connectport – номер TCP порта, на который нужно перенаправить трафик с порта listenport.

С помощью опций
netsh interface portproxy add
v4tov6
/
v6tov4
/
v6tov6
можно создавать правила порт форвардинга между для IPv4 и IPv6 адресов илимежду ними.

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

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

netstat -na|find "3340"

Либо вы можете проверить что порт не слушается локально с помощью PowerShell командлета Test-NetConnection:

Test-NetConnection -ComputerName localhost -Port 3340

проверка доступности локального порта в windows

Чтобы создать правило перенаправления порта, запустите командную строку с правами администратора и выполните команду:
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110

netsh interface portproxy - правило перенаправления портов Windows

Где 10.10.1.110 – IP адрес вашего компьютера, на котором настраивается порт-форвардинг.

Теперь с помощью утилиты netstat проверьте, что в Windows теперь слушается локальный порт 3340:
netstat -ano | findstr :3340

netstat ano findstr

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

Проверьте состояние службу в консоли services.msc или с помощью команды PowerShell:

Get-Service iphlpsvc

служба iphlpsvc (IP Helper / Вспомогательная служба IP)

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

IPv6 включен на сетевом интерфейсе

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

В Windows Server 2003 / XP для работы перенаправления дополнительно нужно включить параметр реестра IPEnableRouter = 1 в ветке HKEY_LOCAL_MACHINE SystemCurrentControlSetservicesTcpipParameter. Можно включить этот параметр реестра с помощью PowerShell:

Set-ItemProperty -Path HKLM:systemCurrentControlSetservicesTcpipParameters -Name IpEnableRouter -Value 1

Этот параметр также позволяет включить маршрутизацию между разными подсетями в Hyper-V.

Вы можете определить процесс, который слушает указанный локальный порт по его PID (в нашем примере PID – 636):
tasklist | findstr 636

tasklist findstr pid

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

В этом примере порт 3340 нужно предварительно открыть в Windows Defender Firewall (см. следующий раздел статьи).

RDP подключение на другой порт

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

Правила проброса портов portproxy являются постоянными и не удаляются при перезагрузке Windows. Эти правила хранятся в реестре. Можно вывести список правил перенаправления netsh в реестре с помощью PowerShell:

Get-ItemProperty -Path HKLM:SYSTEMCurrentControlSetServicesPortProxyv4tov4tcp

правила portproxy в реестра windows

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

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

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

Нужно отметить, что режим portproxy в Windows не поддерживает сохранения IP источника в перенаправленном сетевом пакете. Т.е. если вы пробросите 443 порт Windows компьютера на внутренний веб-сервер, то на целевом сервере все входящие соединения будут идти с одного и того же IP адреса (Windows компьютер с активным режимом netsh portproxy). Если вам нужно использовать переадресацию с сохранением IP источника, нужно использовать NAT на внешнем фаейволе или на Hyper-V (описано ниже).

Так же для проброса локального порта на удаленный сервер в Windows можно использовать технику SSH туннелей.

Настройка правил файервола для режима перенаправления портов Windows

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

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

Или с помощью командлета PowerShell New-NetFirewallRule:
New-NetFirewallRule -DisplayName "RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow  -Enabled True

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

Если вы отключаете правило portproxy, не забудьте удалить оставшиеся правила файервола так:

netsh advfirewall firewall del rule name="RDP_3340"

или с помощью PowerShell:

Remove-NetFirewallRule -Name RDP_3340

Управление правилами проброса портов netsh в Windows

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

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

Чтобы вывести на экран список всех активных правил перенаправления TCP портов в Windows, выполните команду:

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

Конфигурация перенаправления портов Windows

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

netsh interface portproxy set v4tov4 listenport=3340 listenaddress=10.10.1.110  connectport=3300 connectaddress=10.10.1.110

В этом примере мы изменили адрес целевого порта portproxy на 3300.

netsh portproxy: вывести все правила перенаправления портов

Чтобы удалить определенное правило перенаправления порта, выполните:
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110

Дамп всех правил portproxy

Чтобы удалить все имеющиеся правила перенаправления и полностью очистить таблицу с правилами порт-форвардинга:
netsh interface portproxy reset

Удалить правило перенаправления портов

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

Если вы хотите включить перенаправление UDP трафика, можно использовать Windows Server с ролью RRAS и NAT. Вы можете настроить перенаправление портов между интерфейсами компьютера с помощью графической оснастки (
rrasmgmt.msc
) или командой:

netsh routing ip nat add portmapping Ethernet udp 0.0.0.0 53 192.168.1.54 53

Список NAT правил перенаправления портов в Windows Server можно вывести так:

netsh routing ip nat show interface

Если у вас на компьютере развернут WSL (Windows Subsystem for Linux), вы можете создать простой PowerShell скрипт создания правила перенаправления порта внутрь виртуальной машины WSL 2 (у ВМ на WSL 2 есть собственный виртуальный адаптер ethernet с уникальным IP адресом):

wsl --shutdown;
netsh interface portproxy reset;
$wsl_ipaddr = wsl -d Ubuntu-20.04 hostname -I;
netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$wsl_ipaddr ;
netsh interface portproxy show all;
exit;

Еще одной неявной возможностью portproxy является возможность создать видимость локальной работы любого удаленного сетевого сервиса. Например, вы хотите перенаправить весь трафик с локального порта 9090 на
google.com:443

netsh interface portproxy add v4tov4 listenport=9090 listenaddress=127.0.0.1     connectaddress=142.250.74.46 connectport=443 protocol=tcp

Теперь, если в браузере перейди по адресу https://localhost:9090 (нужно игнорировать ошибки SSL_ERROR_BAD_CERT_DOMAIN), откроется поисковая страница Google. Т.е. несмотря на то, что браузер обращается к локальному компьютеру, в нем открывается страница с внешнего веб-сервера.

пример локального перенаправления портов в windows

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

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

Настройка перенаправления портов с помощью NAT на Hyper-V Server

При использовании на вашем компьютере роли Hyper-V (может быть установлена как на Windows 10/11, так и на Windows Server или в виде бесплатного Windows Hyper-V Server), вы можете настроит проброс портов DNAT с помощью PowerShell. Допустим, вы хотите перенаправить все https запросы, которые получает ваш хост Hyper-V на IP адрес запущенной на хосте виртуальной машины. Для этого используется команды Hyper-V StaticMapping.

Создайте виртуальный коммутатор Hyper-V:

New-VMSwitch -SwitchName «NAT_Switch» -SwitchType Internal

hyper-v: команда new-vmswitch создать коммутатор

Задайте IP адрес для нового виртуального коммутатора:

New-NetIPAddress  -IPAddress 192.168.10.1  -PrefixLength 24  -InterfaceAlias "vEthernet (NAT_Switch)"

Включите NAT для данной сети:

New-NetNat -Name NATNetwork -InternalIPInterfaceAddressPrefix 192.168.10.0/24

Подключите ВМ в ваш коммутатор NAT_Switch и задайте для нее статический IP адрес (например, 192.168.10.80). В качестве шлюза-по умолчанию нужно указать IP адрес виртуального коммутатора Hyper-V (192.168.10.1).

Теперь можно настроить перенаправление порта с хоста Hyper-V в виртуальную машину:

Add-NetNatStaticMapping -NatName NATNetwork443  -Protocol TCP  -ExternalIPAddress 0.0.0.0/24  -ExternalPort 443  -InternalIPAddress 192.168.10.80  -InternalPort 443

После выполнения этих команд весь HTTPS трафик, который приходит на порт TCP/443 гипервизора будет переправлен на серый IP адрес виртуальной машины.

Если вы хотите перенаправить нестандартный порт, не забудьте открыть его в Windows Firewall:

New-NetFirewallRule -DisplayName "HyperV_Nat_443" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow -Enabled True

Полный список правил NAT на хосте Hyper-V можно вывести так:

Get-NetNat

Начиная с версии Hyper-V в Windows Server 2016/Windows 10 появилась встроенная возможность создавать сеть NAT (Network Address Translation). В этой статье мы рассмотрим, как настроить NAT сеть для виртуальных машин Hyper-V.

Основные ограничения:

  • Вы можете создать только одну NAT сеть;
  • Для NAT сети не будут доступны такие дополнительные службы, как DNS и DHCP. Это означает, что вам придется задавать сетевые настройки вашим виртуальным машинам за NAT сетью самостоятельно;
  • Настройка NAT сети выполняется только из консоли PowerShell.

Рассмотрим, как создать и настроить NAT сеть с помощью PowerShell.

Создайте новый виртуальный коммутатор с типом сети Internal:

New-VMSwitch -SwitchName "NAT_NET" -SwitchType Internal

При этом на хосте Hyper-V появляется новый виртуальный адаптер. Выведите список виртуальных адаптеров с помощью команды:

Get-NetAdapter

Запомните индекс сетевого интерфейса для вашей NAT сети (ifIndex). В нашем примере это 8.

PowerShell вывести сетевые адаптера в Hyper-V

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

  • New-NetIPAddress -IPAddress 192.168.51.1 -PrefixLength 24 -InterfaceIndex 8
  • InterfaceIndex – номер виртуального интерфейса NAT коммутатора
  • PrefixLength – соответствует маске подсети 255.255.255.0 (/24)

Теперь моно создать NAT сеть:

New-NetNat -Name "vHW_NAT" -InternalIPInterfaceAddressPrefix 192.168.51.0/24

Чтобы подключить виртуальную машину к сети через NAT, вам нужно в ее свойствах выбрать коммутатор NAT_NET. Вы можете переключить ВМ в NAT сеть через диспетчер Hyper-V или с помощью PowerShell:

Get-VM TestVM1,TestVM2|Get-VMNetworkAdapter| Connect-VMNetworkAdapter –SwitchName “NAT_NET”

Теперь нужно назначить корректный IP адрес и DNS настройки для гостевой ВМ. Вы можете развернуть в NAT сети отдельный сервис с ролями DHCP и DNS, или задать настройки сетевого адаптера вручную:

Вы можете подключить к ВМ с хоста Hyper-V через PowerShell Direct:

Enter-PSSession -VMName TestVM1

Теперь можно задать сетевые настройки:

Get-NetAdapter
Get-NetIPAddress -InterfaceIndex 5
New-NetIpAddress -InterfaceIndex 5 -IpAddress 192.168.51.20 -PrefixLength 24 -DefaultGateway 192.168.51.1
Set-DNSClientServerAddress –InterfaceIndex 5 –ServerAddresses 192.168.10.15,8.8.8.8

Проверьте что вы все настроили правильно:

Get-NetIPAddress -InterfaceIndex 5

Проверьте доступность внешних ресурсов:

ping 8.8.8.8

Вы можете пробросить порт с внешней сети (коммутатор Hyper-V) на любую из виртуальных машин за NAT. Например, пробросьте порт 22 (SSH) в одну из ВМ:

Add-NetNatStaticMapping -NatName "vNAT_TestVM1_SSH" -Protocol TCP -ExternalIPAddress 0.0.0.0/24 -ExternalPort 22 -InternalIPAddress 192.168.51.20 -InternalPort 22

Теперь вест трафик TCP/22, который приходит на хост Hyper-V будет перенаправляться на соответствующий порт виртуальной машины за NAT.

Полный список правил перенаправления портов можно вывести так:

Get-NetNatStaticMapping

Вы можете удалить одно правило NAT трансляции адресов или сразу все:

Remove-NetNatStaticMapping -StaticMappingID "vNAT_TestVM1_SSH"
Remove-NetNatStaticMapping

Если вы захотите изменить IP адресацию в NAT сети, вам придется удалить виртуальный коммутатор NAT и пересоздать его заново:

Remove-VMSwitch -SwitchName "NAT_VM"

Напоминаю, что в Hyper-V может быть только одна NAT сеть.

You can configure network port 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 a local TCP port to any other port number, or even to a port on a remote computer. 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 rules. On Windows Server hosts, the Routing and Remote Access Service (RRAS) is typically used to configure port redirections. However, there is an easier way to enable port forwarding using netsh portproxy mode, which works on all versions of Windows from Win XP to current builds of Windows 11 and Windows Server 2022.

Contents:

  • How to Enable Port Forwarding on Windows with Netsh Portproxy?
  • Configuring Firewall Rules for Port Forwarding Mode in Windows
  • Managing Netsh Port Forwarding Rules in Windows
  • Port Forwarding with NAT Rules on Hyper-V Virtual Switch

How to Enable Port Forwarding on Windows with 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 in different subnets/VLANs or multiple IP addresses on one interface);
  • listenport – a local TCP port number to listen on (the connection is waiting on);
  • connectaddress – is a local or remote IP address (or DNS name) to which you want to redirect the incoming connection;
  • connectport – is a TCP port to which the connection from listenport is forwarded to.

Using the netsh interface portproxy add v4tov6/v6tov4/v6tov6 options, you can create port forwarding rules between IPv4 and IPv6 addresses.

Let’s suppose your task is to make the RDP service respond on a non-standard port, for example 3340 (of course, this port number can be changed in the Windows settings, but we are using RDP to make it easier to demonstrate the port forwarding technique). 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).

Please note that the local port number that you specified in listenport should not be listened (used) by another service or process. Check that the port number is not used:

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

check local listening state on windows 10

To create a port forwarding rule on Windows, open 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

windows port forwarding rule using netsh interface portproxy add

Where 10.10.1.110 – the current IP address of your computer on which port forwarding is configured.

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

netstat -ano | findstr :3340

netstat -ano - Get process PID

Note. If this command returns nothing and port forwarding through the netsh interface portproxy doesn’t work, make sure that you have the iphlpsvc (IP Helper) service running on your Windows device.

Check the status of the service in the services.msc console or using the PowerShell command:

Get-Service iphlpsvc

 iphlpsvc (IP Helper) service

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

ipv6 protocol enabled

These are the prerequisites for the correct operation of port forwarding in Windows. 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 under the registry key HKEY_LOCAL_MACHINE SystemCurrentControlSetservicesTcpipParameter.

Set-ItemProperty -Path HKLM:systemCurrentControlSetservicesTcpipParameters -Name IpEnableRouter -Value 1

This option also allows you to enable routing between different subnets in Hyper-V.

You can identify the process that is listening on the specified port by its PID (in our example, the PID is 636):

tasklist | findstr 636

Now try to connect to the new port from a remote computer using any RDP client. You need to specify 3340 as the RDP port number. It is specified after the colon following the RDP host address. For example, 10.10.1.110:3340

RDP client connect to different port

In this example, port TCP/3340 must first be opened in Windows Defender Firewall (see the next section of the article).

The RDP connection should be established successfully.

Portproxy port forwarding rules are permanent and are not cleared when you restart Windows. These rules are stored in the registry. You can list the netsh forwarding rules in the registry using PowerShell:

Get-ItemProperty -Path HKLM:SYSTEMCurrentControlSetServicesPortProxyv4tov4tcp

get portproxy rules list from windows registry

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

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.

Note that the portproxy mode in Windows doesn’t support saving the source IP in a forwarded network packet. Those, if you forward port 443 port from a Windows device to an internal web server, then all incoming connections will appear on the target server as coming from the same IP address (from your Windows host with netsh portproxy enabled). If you need to use source IP forwarding, you need to use NAT on an external firewall or on Hyper-V (described below).

Also, you can use the SSH tunnels in Windows to forward the local port to a remote server.

Configuring Firewall Rules for Port Forwarding Mode in Windows

Ensure that your firewall (Microsoft Windows Defender or a third-party firewall, which is often part of the anti-virus software) allows incoming connections to the new port. You can add a new allow rule to Windows Defender Firewall with the command:

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 inbound firewall rule for TCP/3340 port via Windows Defender Firewall graphical interface, you don’t need to associate a program or process with the rule. This port is only listened on by the network driver.

If you disable the portproxy rule, be sure to remove the remaining firewall rule as follows:

netsh advfirewall firewall del rule name="RDP_3340"

or remove firewall rule with PowerShell:

Remove-NetFirewallRule -Name RDP_3340

Managing Netsh Port Forwarding Rules in Windows

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

Several times I encountered cases when in Windows Server 2012 R2 the port forwarding rules were reset after the server was rebooted. In this case, you need to check whether there is a periodic disconnection on the network interface and whether the IP address changes when the OS boots (it is better to use a static IP instead of dynamic DHCP). As a workaround, I had to add a batch script with the netsh interface portproxy rules to the Windows Task Scheduler that run on the system startup.

To display a list of all enabled 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:

Listen on ipv4:             Connect to ipv4:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
10.1.1.110     3340        10.1.1.110     3389

Display all port forward rules

Tip. You can also list all port forwarding rules in portproxy as follows:

netsh interface portproxy dump

#========================
# Port Proxy configuration
#========================
pushd interface portproxy
reset
add v4tov4 listenport=3340 connectaddress=10.1.1.110 connectport=3389
popd
# End of Port Proxy configuration

netsh interface portproxy dump

If you need to change the settings of an existing portproxy rule, use the following command:

netsh interface portproxy set v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3300 connectaddress=10.10.1.110

In this example, we have changed the portproxy target port number to 3300.

change port forwarding rule netsh portproxy

To remove a specific port forwarding rule:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

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

netsh interface portproxy reset

Important. This port forwarding scheme works only for TCP ports. You won’t be able to forward UDP ports this way. Also, you can’t use the loopback interface 127.0.0.1 (localhost) as the connectaddress.

You can use Windows Server with the RRAS (Routing and Remote Access Service and NAT) role installed to enable port forwarding for UDP traffic. You can configure port forwarding between server network 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

The list of NAT port forwarding rules in Windows Server can be listed as follows:

netsh routing ip nat show interface

If you have WSL (Windows Subsystem for Linux) installed on your computer, you can create a simple PowerShell script to create a port forwarding rule to the WSL 2 virtual machine (a WSL2 VM has its own virtual ethernet adapter with a unique IP address):

wsl --shutdown;
netsh interface portproxy reset;
$wsl_ipaddr = wsl -d Ubuntu-20.04 hostname -I;
netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$wsl_ipaddr ;
netsh interface portproxy show all;
exit;

Another implicit feature of portproxy is the ability to make any remote network service look like it runs locally. For example, you want to forward the connections from local port 9090 to a remote HTTPS server (google.com:443)

netsh interface portproxy add v4tov4 listenport=9090 connectport=443 connectaddress=google.com protocol=tcp

Now, the Google search page will open if you go to http://localhost:9090/ in your browser (you need to ignore SSL_ERROR_BAD_CERT_DOMAIN errors). So despite the browser accessing the local computer address, it opens a page from an external web server.

portproxy: redirect local port to remote web service

Windows cannot forward a range of TCP ports. If you need to forward multiple ports, you will have to manually create multiple portproxy redirecting rules.

Port forwarding rules can also be used to redirect 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).

Port Forwarding with NAT Rules on Hyper-V Virtual Switch

When using the Hyper-V role on your computer (it can be installed on both Windows 10/11 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.

Create a Hyper-V virtual switch:

New-VMSwitch -SwitchName NAT_Switch -SwitchType Internal

create hyperv nat switch using powershell

Set the IP address for the new virtual switch:

New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24  -InterfaceAlias "vEthernet (NAT_Switch)"

Enable NAT for this network:

New-NetNat -Name NATNetwork -InternalIPInterfaceAddressPrefix 192.168.100.0/24

Connect the VM to your NAT_Switch and assign it a static IP address (for example, 192.168.10.80). Set the Hyper-V virtual switch IP address (192.168.100.1 in this case) as the default gateway for the virtual machine’s network connection.

You can now enable port forwarding from the Hyper-V host to the virtual machine:

Add-NetNatStaticMapping -NatName NATNetwork443 -Protocol TCP  -ExternalIPAddress 0.0.0.0/24  -ExternalPort 443  -InternalIPAddress 192.168.10.80  -InternalPort 443

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

If you want to create a port forwarding rule for a non-standard port, don’t forget to open it in Windows Firewall:

New-NetFirewallRule -DisplayName "HyperV_Nat_444" -Direction Inbound -LocalPort 444 -Protocol TCP -Action Allow -Enabled True

You can display a complete list of NAT/PAT port forwarding rules on a Hyper-V host like this:

Get-NetNat

The Windows 10 Fall Update/1511 (and Windows Server 2016 TP4) includes new functionality in Hyper-V that supports native network address translation (NAT). This functionality wasn’t previously available in Hyper-V without setting up Internet sharing within the OS or running an intermediary VM as a gateway. In this article, I’ll show you how to set up NAT in Windows 10 Hyper-V using the new NAT virtual switch.

Contents

  1. Create the NAT switch
  2. View the switch in the Virtual Switch Manager
  3. View the new vEthernet adapter
  4. Configure the VM manually
  5. DHCP Server for Windows
  • Author
  • Recent Posts

Kyle Beckman works as a systems administrator in Atlanta, GA supporting Office 365 in higher education. He has 17+ years of systems administration experience.

Setting up NAT in Windows 10 has always been one of the shortcomings of Hyper-V on the Windows desktop OS when compared to other virtualization products such as VMware Workstation and Oracle VirtualBox. In the past, it was necessary to set up Internet connection sharing or use a VM running Windows Server with two NICs to share your computer’s Internet connection under NAT.

In previous versions of Hyper-V, three types of virtual switches exist: External, Internal, and Private. In Windows 10 Fall Update, a fourth switch, the NAT switch, is included. As of today, the NAT switch type can only be created using PowerShell. But, it’s pretty safe to assume it will make it into the GUI eventually.

Create the NAT switch

Creating the NAT switch is a two-part process. You’ll first need to create the switch and then configure the NAT object in the host OS. To create the virtual switch, open a PowerShell window with Admin rights and run the following command:

New-VMSwitch -Name "NAT" -SwitchType NAT -NATSubnetAddress 10.0.75.0/24

The -Name parameter sets the name of the new virtual switch. The –SwitchType parameter (which needs to be set to NAT) is what selects NAT as the switch type. The –NATSubnetAddress parameter sets the subnet that will be used on the NAT network. The virtual NIC that is created on the host computer will use the top address, .1, as its IP. In the example subnet I used, the virtual NIC will use 10.0.75.1.

Next, you’ll need to create the NAT object on the host system. In the same PowerShell window, run the following command:

New-NetNat –Name NAT –InternalIPInterfaceAddressPrefix 10.0.75.0/24

The -Name parameter sets the name for the NAT object. The –InternalIPInterfaceAddressPrefix parameter sets the subnet that NAT will use; it should be the same subnet that you used in the last command.

Configuring the NAT virtual switch with PowerShell
Configuring the NAT virtual switch with PowerShell

View the switch in the Virtual Switch Manager

In Hyper-V Manager, go to Virtual Switch Manager to see your new virtual switch named “NAT.” The GUI doesn’t recognize the new switch type and shows it as an Internal switch. An Internal switch allows the VMs on the host system to communicate with each other as well as with the host system. So, it makes sense that it would see the switch this way—at least until the GUI is updated.

NAT virtual switch in Hyper-V Virtual Switch Manager
NAT virtual switch in Hyper-V Virtual Switch Manager

View the new vEthernet adapter

The process of adding the new NAT switch will also create a new vEthernet adapter on the system. If you open the properties of the virtual NIC, it should show the IP address 10.0.75.1. This address can be used as the default gateway on VMs connected to the switch.

New vEthernet adapter created on the Hyper-V host
New vEthernet adapter created on the Hyper-V host

Configure the VM manually

After you configure a VM to use the NAT virtual switch, you will need to manually configure the network settings for the VM. Unfortunately, the built-in NAT switch doesn’t include a DHCP server for automatic network configuration. In my example VM below, I’ve configured the gateway to 10.0.75.1 and used 10.0.75.10 as the IP address of the VM. For a DNS server, I’ve used Google’s public DNS server, 8.8.8.8.

Manually configuring the Hyper-V VM

Manually configuring the Hyper-V VM

Obviously, you’re not going to want to manually configure all of your VMs that use the NAT switch. One option if you’re already running a small lab on your Windows 10 system is to use DHCP on a Windows Server. If you don’t want to run a full server for DHCP, I’ve found one other option.

DHCP Server for Windows

You can use a small, freeware, DHCP server called DHCP Server for Windows for providing DHCP to your NAT network in Hyper-V. After you download the software, extract it and run the dhcpwiz.exe utility to configure the server.

First, select the network interface vEthernet (NAT). Good news: the GUI does a good job of warning you about setting up a DHCP server on a NIC that is already receiving an IP address through DHCP.

Selecting the vEthernet NAT network interface
Selecting the vEthernet NAT network interface

Set the pool of IP addresses you want to use as well as a lease time. When you’re done, make sure you click the Advanced… button.

Setting the pool of IP addresses in DHCP Server for Windows
Setting the pool of IP addresses in DHCP Server for Windows

In Advanced Configuration, you’ll need to configure your gateway (10.0.75.1) and DNS servers.

Configuring DNS and gateway in Advanced Configuration
Configuring DNS and gateway in Advanced Configuration

In the final screen of the wizard, click the Write INI file button to save your settings to an .ini file and then click Next.

Once you’re done, the control application, dhcpsrv.exe, should run automatically. If it doesn’t, the executable is in the same folder as the setup wizard.

DHCP Server for Windows control application
DHCP Server for Windows control application

You’ll first need to click the Admin… button to run the executable with Admin rights (if you didn’t already). In this utility, you can set the Windows Firewall rules necessary to run the DHCP server. You can also install the executable as a service and start/stop it from running. After you’ve installed it as a service and started the service, you’re ready to start using NAT with your VMs on Hyper-V.

Во всех версиях Windows вы можете настроить переадресацию / переадресацию сетевых портов без использования сторонних инструментов. Используя правило переадресации, вы можете перенаправить входящее TCP-соединение (IPv4 или IPv6) с локального TCP-порта на любой другой номер порта или даже на порт на удаленном компьютере. Кроме того, Windows не требуется, чтобы служба прослушивала определенный порт TCP. Перенаправление портов в Windows часто используется для обхода брандмауэров или для сокрытия внутреннего сервера или службы от внешней сети (NAT / PAT).

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

Как включить перенаправления портов в Windows 10 с помощью netsh portproxy?

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

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

где это находится,

  • listenaddress – локальный IP-адрес, на котором ожидается соединение (полезно, если у вас несколько сетевых карт или несколько IP-адресов на одном интерфейсе);
  • listenport – номер локального TCP-порта, соединение на которое будет перенаправлено (на этом порту ожидается входящее соединение);
  • connectaddress – локальный или удаленный IP-адрес или DNS-имя, на которое вы хотите перенаправить сетевое соединение;
  • connectport – номер TCP-порта, на который вы хотите перенаправить трафик с прослушивающего порта.

Используя параметры

netsh interface portproxy add

v4tov6

/

v6tov4

/

v6tov6

, вы можете создавать правила переадресации портов между адресами IPv4 и IPv6.

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

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

netstat -na|find "3340"

Кроме того, вы можете проверить, не прослушивает ли порт локально, с помощью командлета PowerShell Test-NetConnection:

Test-NetConnection -ComputerName localhost -Port 3340

проверить доступность локального порта в Windows

Чтобы создать правило переадресации портов, запустите командную строку от имени администратора и выполните команду:

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

netsh interface portproxy - правило переадресации портов Windows

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

Теперь используйте утилиту netstat, чтобы убедиться, что Windows теперь прослушивает локальный порт 3340:

netstat -ano | findstr :3340

netstat и findstr

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

iphlpsvc service (IP-помощник)

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

IPv6 включен в сетевом интерфейсе

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

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

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

tasklist | findstr 636

список задач findstr pid

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

10.10.1.110:3340

RDP подключение к другому порту

RDP-соединение должно быть установлено правильно.

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

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

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

Кроме того, для перенаправления локального порта на удаленный сервер в Windows вы можете использовать метод SSH-туннелирования.

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

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

Или с помощью командлета PowerShell New-NetFirewallRule:

New-NetFirewallRule -DisplayName "RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow

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

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

Несколько раз я встречал случаи, когда в Windows Server 2012 R2 правила переадресации портов сбрасывались после перезапуска сервера. В этом случае рекомендуется проверить, есть ли периодические отключения на сетевом интерфейсе и не меняется ли IP-адрес при запуске операционной системы (лучше использовать статический IP, а не динамический DHCP). В качестве обходного пути мне пришлось добавить сценарий с правилами

netsh interface portproxy

в планировщик Windows, который создает правило переадресации портов при запуске операционной системы.

Чтобы увидеть список всех активных правил переадресации TCP-портов в Windows, выполните команду:

netsh interface portproxy show all

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

Слушайте ipv4: подключитесь к ipv4: Port Address Port Address --------------- ---------- ------------- - ---------- 10.10.1.110 3340 10.10.1.110 3389

Совет. Вы также можете просмотреть настройки переадресации портов в режиме portproxy следующим образом:

netsh interface portproxy dump

# ======================== # Конфигурация прокси порта # ================= == = ==== pushd portproxy interface reset add v4tov4 listenport = 3340 connectaddress = 10.10.1.110 connectport = 3389 popd # Конец конфигурации прокси порта

Настройка переадресации портов Windows

Чтобы удалить определенное правило переадресации портов, запустите:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110

Скачать все правила прокси порта

Чтобы удалить все существующие правила переадресации и полностью очистить таблицу правил переадресации портов:

netsh interface portproxy reset

Удалить правило переадресации портов

Важный. Эта схема пересылки работает только для портов TCP. Трафик на порты UDP не может быть перенаправлен. Кроме того, 127.0.0.1 нельзя использовать в качестве адреса подключения.

Для настройки пересылки UDP-трафика вы можете использовать Windows Server с ролью RRAS и NAT. Настроить переадресацию портов между компьютерными интерфейсами можно с помощью графической оснастки (rrasmgmt.msc) или командой:

netsh routing ip nat add portmapping Ethernet udp 0.0.0.0 53 192.168.1.54 53

Еще одна неявная особенность 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/, откроется главная страница Яндекс. Те, даже если браузер обращается к локальному компьютеру, открывает страницу с внешнего веб-сервера.

Яндекс редирект

Перенаправление портов также можно использовать для перенаправления порта с внешнего IP-адреса сетевого адаптера на порт виртуальной машины, работающей на том же компьютере. В Hyper-V эту переадресацию портов можно настроить на виртуальном коммутаторе (см. Ниже).

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

netsh interface portproxy add

с разными портами в Блокноте, а затем вставить его в командную строку для выполнения.

Настройка перенаправления портов в Hyper-V Server

При использовании роли Hyper-V на вашем компьютере (может быть установлена ​​как на Windows 10, так и на Windows Server или в качестве бесплатного сервера Windows Hyper-V) вы можете настроить переадресацию портов DNAT с помощью PowerShell. Допустим, вы хотите перенаправить все https-запросы, которые получает ваш хост Hyper-V, на IP-адрес виртуальной машины, работающей на хосте. Для этого используйте команды Hyper-V StaticMapping.

Для начала нужно создать виртуальный коммутатор с NAT:

New-VMSwitch -Name "NAT" -SwitchType NAT -NATSubnetAddress 192.168.0.0/24

Затем необходимо подключить необходимую виртуальную машину к указанному коммутатору и включить правило трансляции адресов для всех виртуальных машин, подключенных через этот виртуальный коммутатор Hyper-V:

Новый-NetNat -Webname_NAT -InternalIPInterfaceAddressPrefix 192.168.0.0/24
Добавить-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.0.2" -InternalPort 443 -NatName Web_NAT

После выполнения этих команд весь HTTPS-трафик, поступающий на порт 443 гипервизора, будет перенаправлен на серый IP-адрес виртуальной машины.

Источник изображения: winitpro.ru

Понравилась статья? Поделить с друзьями:
  • Hyper v windows 10 общие папки
  • Hyper v windows 10 обмен файлами
  • Hyper v windows 10 нет сети
  • Hyper v windows 10 нет интернета
  • Hyper v windows 10 нет в параметрах