У всіх версіях 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 з командою рядка через режим Portproxy команди Netsh.
Синтаксис команди наступний:
Код: Виділити все
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
де,
listenaddress – локальна IP-адреса, на якій очікується з'єднання (корисно, якщо у вас кілька мережевих карт у різних підмережах/ VLAN або кілька IP-адрес на одному інтерфейсі );
listenport – номер локального TCP порту, підключення до якого перенаправлятиметься (на цьому порту очікується вхідне з'єднання);
conectaddress – локальна або віддалена IP-адреса або DNS-ім'я хоста, на яку потрібно перенаправити мережне підключення;
connectport – номер TCP порту, який потрібно перенаправити трафік з порту listenport.
За допомогою опцій netsh interface portproxy add v4tov6 / v6tov4 / v6tov6 можна створювати правила порт форвардингу між для IPv4 та IPv6 адрес або між ними.
Припустимо, наше завдання, змусити службу RDP відповідати на нестандартному порту, наприклад 3340 (цей порт, звичайно, можна змінити в налаштуваннях самої служби, але ми використовуємо саме RDP для спрощення демонстрації техніки перенаправлення та прокидання портів). Для цього нам потрібно перенаправити вхідний трафік на порт TCP 3340 на інший локальний порт - 3389 (це номер стандартного порту RDP).
Примітка. Зверніть увагу, що номер локального порту, який ви вказали в listenport, не повинен бути зайнятий (слухатися) іншою службою. Перевірте, чи номер порту вільний командою:
Або ви можете перевірити, що порт не слухається локально за допомогою PowerShell командлета Test-NetConnection :
Код: Виділити все
Test-NetConnection -ComputerName localhost -Port 3340
Щоб створити правило перенаправлення порту, запустіть командний рядок з правами адміністратора та виконайте команду:
Код: Виділити все
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110
Де,
10.10.1.110 – IP-адреса вашого комп'ютера, на якому налаштовується порт-форвардинг.
Тепер за допомогою утиліти netstat перевірте, що у Windows тепер слухається локальний порт 3340:

Примітка. Якщо ця команда нічого не повертає і перенаправлення портів через
netsh interface portproxy не працює, перевірте, чи у вас у Windows включена служба iphlpsvc (IP Helper/Допоміжна служба IP).
Перевірте стан служби в консолі
services.msc або за допомогою PowerShell:
Також на мережному інтерфейсі, для якого створюється правило перенаправлення портів, повинна бути включена підтримка протоколу IPv6.
Це обов'язкові умови коректної роботи порт-форвардинга. Без служби IP Helper і без увімкненої підтримки IPv6 механізм перенаправлення не працює.
У Windows Server 2003/XP для роботи перенаправлення додатково потрібно включити параметр реєстру
IPEnableRouter = 1 у гілці
HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\Tcpip\Parameter. Цей параметр реєстру можна ввімкнути за допомогою PowerShell:
Код: Виділити все
Set-ItemProperty -Path HKLM:\system\CurrentControlSet\services\Tcpip\Parameters -Name IpEnableRouter -Value 1
Цей параметр також дозволяє включити маршрутизацію між різними підмережами Hyper-V.
Ви можете визначити процес, який слухає вказаний локальний порт за його PID (у прикладі PID – 636):

- tasklist-findstr-pid.jpg (10.83 Кіб) Переглянуто 62059 разів
Тепер спробуйте підключитися на новий порт з віддаленого комп'ютера за допомогою будь-якого клієнта RDP. Як rdp-порт потрібно вказати 3340 (номер порту вказується після двокрапки після адреси rdp-сервера). Наприклад, 10.10.1.110:3340
У цьому прикладі порт 3340 потрібно попередньо відкрити Windows Defender Firewall (див. наступний розділ статті).
RDP підключення має успішно встановитись.
Правила прокидання портів
portproxy є постійними і не видаляються під час перезавантаження Windows. Ці правила зберігаються у реєстрі. Можна вивести список правил перенаправлення
netsh у реєстрі за допомогою PowerShell:
Код: Виділити все
Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4\tcp
Якщо потрібно перенаправити вхідне з'єднання 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:
Управління правилами прокидання портів netsh у Windows
Можна створити будь-яку кількість правил перенаправлення локальних портів Windows. Всі правила
netsh interface portproxy є постійними і зберігаються в системі після перезавантаження Windows.
Декілька разів стикався з випадками, коли в Windows Server 2012 R2 правила перенаправлення портів скидалися після перезавантаження сервера. У цьому випадку рекомендується перевірити чи немає періодичних відключень на мережному інтерфейсі, і чи не змінюється IP адреса при завантаженні ОС (краще використовуватися статичну IP замість динамічної - DHCP). Як обхідне рішення довелося додати до планувальника Windows скрипт з правилами netsh interface portproxy, який створює правило перенаправлення порту при завантаженні операційної системи.
Щоб вивести список усіх активних правил перенаправлення TCP портів у Windows, виконайте команду:
У нашому випадку є тільки одне правило форвардингу з локального порту 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 conectaddress=10.10.1.110 connectport=3389
popd
# End of Port Proxy configuration
Якщо потрібно змінити налаштування наявного правила portproxy, використовуйте таку команду:
Код: Виділити все
netsh interface portproxy set v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3300 connectaddress=10.10.1.110
У цьому прикладі ми змінили адресу цільового порту portproxy на 3300.
Щоб видалити певне правило перенаправлення порту, виконайте:
Код: Виділити все
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110
Щоб видалити всі наявні правила перенаправлення та повністю очистити таблицю з правилами порт-форвардингу:
Важливо. Така схема перенаправлення працює лише для TCP портів. Трафік UDP портів не можна перенаправити за допомогою режиму
portproxy. Також не можна використовувати як
conectaddress адресу
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 можна вивести так:
Якщо у вас на комп'ютері розгорнутий 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. Тобто. незважаючи на те, що браузер звертається до локального комп'ютера, у ньому відкривається сторінка із зовнішнього веб-сервера.
Перенаправлення портів також можна використовувати, щоб прокинути порт із зовнішньої 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-komanda-new-vmswitch.png (6.38 Кіб) Переглянуто 62059 разів
Введіть 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 можна вивести так:
У всіх версіях Windows можна настроїти перенаправлення/прокидання мережевих портів (порт форвардинг) без використання сторонніх інструментів. За допомогою правила форвардингу ви можете перенаправити вхідне з'єднання TCP (IPv4 або IPv6) з локального TCP порту на будь-який інший номер порту або навіть на порт віддаленого комп'ютера. Перенаправлення портів у Windows найчастіше використовується для обходу фаєрволів або щоб сховати сервер або службу від зовнішньої мережі (NAT/PAT).
У Linux можна досить просто налаштувати перенаправлення портів за допомогою правил iptables або firewalld. На серверних системах Windows Server для налаштування перенаправлення портів можна використовувати службу маршрутизації та віддаленого доступу (RRAS). Однак є більш простий спосіб налаштування прокидання портів за допомогою режиму [b]portproxy[/b], [b]netsh[/b] який однаково добре працює в будь-якій версії Windows (починаючи з Windows XP і закінчуючи сучасними Windows 11 та Windows Server 2022).
[b]Увімкнути перенаправлення порту в Windows за допомогою netsh portproxy[/b]
Ви можете увімкнути та налаштувати перенаправлення портів у Windows з командою рядка через режим Portproxy команди Netsh.
Синтаксис команди наступний:
[code]netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport[/code]
де,
[b]listenaddress[/b] – локальна IP-адреса, на якій очікується з'єднання (корисно, якщо у вас кілька мережевих карт у різних підмережах/ VLAN або кілька IP-адрес на одному інтерфейсі );
[b]listenport[/b] – номер локального TCP порту, підключення до якого перенаправлятиметься (на цьому порту очікується вхідне з'єднання);
[b]conectaddress[/b] – локальна або віддалена IP-адреса або DNS-ім'я хоста, на яку потрібно перенаправити мережне підключення;
[b]connectport[/b] – номер TCP порту, який потрібно перенаправити трафік з порту listenport.
[quote]За допомогою опцій [b]netsh interface portproxy add v4tov6 / v6tov4 / v6tov6[/b] можна створювати правила порт форвардингу між для IPv4 та IPv6 адрес або між ними.[/quote]
Припустимо, наше завдання, змусити службу RDP відповідати на нестандартному порту, наприклад 3340 (цей порт, звичайно, можна змінити в налаштуваннях самої служби, але ми використовуємо саме RDP для спрощення демонстрації техніки перенаправлення та прокидання портів). Для цього нам потрібно перенаправити вхідний трафік на порт TCP 3340 на інший локальний порт - 3389 (це номер стандартного порту RDP).
[quote][b]Примітка[/b]. Зверніть увагу, що номер локального порту, який ви вказали в listenport, не повинен бути зайнятий (слухатися) іншою службою. Перевірте, чи номер порту вільний командою:
[code]netstat -na|find "3340"[/code]
Або ви можете перевірити, що порт не слухається локально за допомогою PowerShell командлета Test-NetConnection :
[code]Test-NetConnection -ComputerName localhost -Port 3340[/code]
[attachment=13]pereviriti-lokalniy-port-windows.jpg[/attachment]
[/quote]
Щоб створити правило перенаправлення порту, запустіть командний рядок з правами адміністратора та виконайте команду:
[code]netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110[/code]
[attachment=12]netsh-interface-portproxy-add-v4tov4-uvimknuti-perenapravlennya.jpg[/attachment]
Де,
[b]10.10.1.110[/b] – IP-адреса вашого комп'ютера, на якому налаштовується порт-форвардинг.
Тепер за допомогою утиліти netstat перевірте, що у Windows тепер слухається локальний порт 3340:
[code]netstat -ano | findstr :3340[/code]
[attachment=11]netstat-ano-findstr.jpg[/attachment]
[quote]
[b]Примітка[/b]. Якщо ця команда нічого не повертає і перенаправлення портів через [b]netsh interface portproxy[/b] не працює, перевірте, чи у вас у Windows включена служба iphlpsvc (IP Helper/Допоміжна служба IP).
Перевірте стан служби в консолі [b]services.msc[/b] або за допомогою PowerShell:
[code]Get-Service iphlpsvc[/code]
[attachment=10]sluzhba-IP-Helper.jpg[/attachment]
Також на мережному інтерфейсі, для якого створюється правило перенаправлення портів, повинна бути включена підтримка протоколу IPv6.
[attachment=9]IPv6-povinen-bit-uvimkneniy.jpg[/attachment]
Це обов'язкові умови коректної роботи порт-форвардинга. Без служби IP Helper і без увімкненої підтримки IPv6 механізм перенаправлення не працює.
У Windows Server 2003/XP для роботи перенаправлення додатково потрібно включити параметр реєстру [b]IPEnableRouter = 1[/b] у гілці [b]HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\Tcpip\Parameter[/b]. Цей параметр реєстру можна ввімкнути за допомогою PowerShell:
[code]Set-ItemProperty -Path HKLM:\system\CurrentControlSet\services\Tcpip\Parameters -Name IpEnableRouter -Value 1[/code]
Цей параметр також дозволяє включити маршрутизацію між різними підмережами Hyper-V.
[/quote]
Ви можете визначити процес, який слухає вказаний локальний порт за його PID (у прикладі PID – 636):
[code]tasklist | findstr 636[/code]
[attachment=8]tasklist-findstr-pid.jpg[/attachment]
Тепер спробуйте підключитися на новий порт з віддаленого комп'ютера за допомогою будь-якого клієнта RDP. Як rdp-порт потрібно вказати 3340 (номер порту вказується після двокрапки після адреси rdp-сервера). Наприклад, 10.10.1.110:3340
[quote]У цьому прикладі порт 3340 потрібно попередньо відкрити Windows Defender Firewall (див. наступний розділ статті).[/quote]
[attachment=7]rdp-another-port.jpg[/attachment]
RDP підключення має успішно встановитись.
Правила прокидання портів [b]portproxy[/b] є постійними і не видаляються під час перезавантаження Windows. Ці правила зберігаються у реєстрі. Можна вивести список правил перенаправлення [b]netsh[/b] у реєстрі за допомогою PowerShell:
[code]Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4\tcp[/code]
[attachment=6]pravila-portproxy-v-reestre-windows.jpg[/attachment]
Якщо потрібно перенаправити вхідне з'єднання TCP на віддалений комп'ютер, використовуйте таку команду:
[code]netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.1.100[/code]
Це правило перенаправить весь вхідний трафік RDP (з локального порту TCP 3389) з цього комп'ютера на віддалений комп'ютер з IP-адресою [b]192.168.1.100[/b].
Потрібно зазначити, що режим portproxy у Windows не підтримує збереження IP джерела у перенаправленому мережевому пакеті. Тобто, якщо ви прокинете 443 порт Windows комп'ютера на внутрішній веб-сервер, то на цільовому сервері всі вхідні з'єднання будуть йти з однієї й тієї ж IP адреси (Windows комп'ютер з активним режимом netsh portproxy). Якщо вам потрібно використовувати переадресацію із збереженням IP джерела, потрібно використовувати NAT на зовнішньому файволі або Hyper-V (описано нижче).
[quote]Також для прокидання локального порту на віддалений сервер у Windows можна використовувати техніку SSH тунелів.[/quote]
[b]Налаштування правил фаєрволу для режиму перенаправлення портів Windows[/b]
Перевірте, що в налаштуваннях вашого фаєрвола (брандмауера Windows або стороннього міжмережевого екрану, такі часто включаються до антивірусного ПЗ) дозволені вхідні підключення на новий порт. Ви можете додати новий дозвіл у Windows Defender Firewall командою:
[code]netsh advfirewall firewall add rule name=”RDP_3340” protocol=TCP dir=in localip=10.10.1.110 localport=3340 action=allow[/code]
Або за допомогою командлета [b]PowerShell New-NetFirewallRule[/b]:
[code]New-NetFirewallRule -DisplayName "RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow -Enabled True[/code]
При створенні вхідного правила брандмауера для порту 3340 через графічний інтерфейс Windows Defender, не потрібно асоціювати з правилом програму або процесом. Цей порт слухається виключно мережним драйвером.
Якщо ви відключаєте правило [b]portproxy[/b], не забудьте видалити правила фаєрволу, що залишилися, командою:
[code]netsh advfirewall firewall del rule name="RDP_3340"[/code]
або за допомогою PowerShell:
[code]Remove-NetFirewallRule -Name RDP_3340[/code]
[b]Управління правилами прокидання портів netsh у Windows[/b]
Можна створити будь-яку кількість правил перенаправлення локальних портів Windows. Всі правила [b]netsh interface portproxy[/b] є постійними і зберігаються в системі після перезавантаження Windows.
[quote]Декілька разів стикався з випадками, коли в Windows Server 2012 R2 правила перенаправлення портів скидалися після перезавантаження сервера. У цьому випадку рекомендується перевірити чи немає періодичних відключень на мережному інтерфейсі, і чи не змінюється IP адреса при завантаженні ОС (краще використовуватися статичну IP замість динамічної - DHCP). Як обхідне рішення довелося додати до планувальника Windows скрипт з правилами [b]netsh interface portproxy,[/b] який створює правило перенаправлення порту при завантаженні операційної системи.[/quote]
Щоб вивести список усіх активних правил перенаправлення TCP портів у Windows, виконайте команду:
[code]netsh interface portproxy show all[/code]
У нашому випадку є тільки одне правило форвардингу з локального порту 3340 на 3389:
[code]Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
10.10.1.110 3340 10.10.1.110 3389[/code]
[quote][b]Порада[/b]. Також ви можете вивести вагу правила перенаправлення портів у режимі portproxy так:
[code]netsh interface portproxy dump
#========================
# Port Proxy configuration
#========================
pushd interface portproxy
reset
add v4tov4 listenport=3340 conectaddress=10.10.1.110 connectport=3389
popd
# End of Port Proxy configuration[/code]
[attachment=5]netsh-interface-portproxy-show-all-spisok-perenapravlennya.jpg[/attachment][/quote]
Якщо потрібно змінити налаштування наявного правила portproxy, використовуйте таку команду:
[code]netsh interface portproxy set v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3300 connectaddress=10.10.1.110[/code]
У цьому прикладі ми змінили адресу цільового порту portproxy на 3300.
[attachment=4]netsh-portproxy-vivesti-vsi-pravila.jpg[/attachment]
Щоб видалити певне правило перенаправлення порту, виконайте:
[code]netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110[/code]
[attachment=3]netsh-interface-portproxy-dump.jpg[/attachment]
Щоб видалити всі наявні правила перенаправлення та повністю очистити таблицю з правилами порт-форвардингу:
[code]netsh interface portproxy reset[/code]
[attachment=2]skidannya-pravil-netsh-interface-portproxy-reset.jpg[/attachment]
[quote]Важливо. Така схема перенаправлення працює лише для TCP портів. Трафік UDP портів не можна перенаправити за допомогою режиму [b]portproxy[/b]. Також не можна використовувати як [b]conectaddress[/b] адресу [b]localhost 127.0.0.1[/b].
Якщо ви хочете увімкнути перенаправлення UDP трафіку, можна використовувати Windows Server за участю RRAS та NAT. Ви можете налаштувати перенаправлення портів між інтерфейсами комп'ютера за допомогою графічного оснащення (rrasmgmt.msc) або командою:
[code]netsh routing ip nat add portmapping Ethernet udp 0.0.0.0 53 192.168.1.54 53[/code]
Список NAT правил перенаправлення портів у Windows Server можна вивести так:
[code]netsh routing ip nat show interface[/code][/quote]
Якщо у вас на комп'ютері розгорнутий WSL (Windows Subsystem for Linux), ви можете створити простий PowerShell скрипт створення правила перенаправлення порту всередину віртуальної машини WSL 2 (у ВМ на WSL 2 є власний віртуальний адаптер ethernet з унікальною IP адресою):
[code]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;[/code]
Ще однією неявною можливістю portproxy є можливість створити видимість локальної роботи будь-якого віддаленого мережевого сервісу. Наприклад, ви хочете перенаправити весь трафік з локального порту 9090 на google.com:443
[code]netsh interface portproxy add v4tov4 listenport=9090 listenaddress=127.0.0.1 connectaddress=142.250.74.46 connectport=443 protocol=tcp[/code]
Тепер, якщо в браузері перейди за адресою https://localhost:9090 (потрібно ігнорувати помилки SSL_ERROR_BAD_CERT_DOMAIN), відкриється пошукова сторінка Google. Тобто. незважаючи на те, що браузер звертається до локального комп'ютера, у ньому відкривається сторінка із зовнішнього веб-сервера.
[attachment=1]priklad-vikoristannya-lokalnogo-prenapravlennya-portsv-na-zovnishniy-sayt.jpg[/attachment]
Перенаправлення портів також можна використовувати, щоб прокинути порт із зовнішньої IP-адреси мережної карти на порт віртуальної машини, запущеної на цьому ж комп'ютері. У Hyper-V такий прокид порту можна налаштувати на віртуальному комутаторі (див. нижче).
Windows не вміє прокидати діапазон TCP портів. Якщо вам потрібно прокинути кілька портів, доведеться вручну створювати кілька правил перенаправлення.
[b]Налаштування перенаправлення портів за допомогою NAT на Hyper-V Server[/b]
При використанні на вашому комп'ютері ролі Hyper-V (можна бути встановлена як на Windows 10/11, так і на Windows Server або у вигляді безкоштовного Windows Hyper-V Server), ви можете налаштувати прокидання портів DNAT за допомогою PowerShell. Допустимо, ви хочете перенаправити всі https запити, які отримує ваш хост Hyper-V на IP адресу запущеної на хості віртуальної машини. Для цього використовується команда Hyper-V StaticMapping.
Створіть віртуальний комутатор Hyper-V:
[code]New-VMSwitch -SwitchName "NAT_Switch" -SwitchType Internal[/code]
[attachment=0]hyper-v-komanda-new-vmswitch.png[/attachment]
Введіть IP адресу для нового віртуального комутатора:
[code]New-NetIPAddress -IPAddress 192.168.10.1 -PrefixLength 24 -InterfaceAlias "vEthernet (NAT_Switch)"[/code]
Увімкніть NAT для цієї мережі:
[code]New-NetNat -Name NATNetwork -InternalIPInterfaceAddressPrefix 192.168.10.0/24[/code]
Підключіть ВМ до вашого комутатора NAT_Switch і задайте для неї статичну IP адресу (наприклад, 192.168.10.80). Як шлюз за-замовчуванням, потрібно вказати IP адресу віртуального комутатора Hyper-V (192.168.10.1).
Тепер можна налаштувати перенаправлення порту з хоста Hyper-V у віртуальну машину:
[code]Add-NetNatStaticMapping -NatName NATNetwork443 -Protocol TCP -ExternalIPAddress 0.0.0.0/24 -ExternalPort 443 -InternalIPAddress 192.168.10.80 -InternalPort 443[/code]
Після виконання цих команд весь HTTPS трафік, який приходить на порт TCP/443 гіпервізора, буде переправлений на сірий IP адресу віртуальної машини.
Якщо ви бажаєте перенаправити нестандартний порт, не забудьте відкрити його у Windows Firewall:
[code]New-NetFirewallRule -DisplayName "HyperV_Nat_443" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow -Enabled True[/code]
Повний список правил NAT на хості Hyper-V можна вивести так:
[code]Get-NetNat[/code]