среда, 15 ноября 2017 г.

Проброс портов в Windows PowerShell

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

Первый способ, о котором я писал, это через portproxy


netsh interface portproxy add v4tov4 listenport=8080 connectaddress=192.168.137.100 connectport=80 protocol=tcp

Но, у этого способа есть ограниченное применение, во-первых - в документации написано, что не поддерживается протокол udp, во-вторых ip источника!


Portproxy устроен таким образом, что он работает как локальное приложение и если прокинуть на виртуалку таким образом порт, то все входящие обращения будут идти с одного и того-же ip.


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


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


Допустим, ваш внешний адрес 88.99.88.99, а в локальной сети машина с адресом 192.168.0.5
Когда машина из локальной сети выходит во внешнюю сеть, то адрес источника подменяется на внешний адрес, чтобы в глобальной сети вам прислали ответ на ваш роутер, а не на левый внутренний адрес, когда приходит ответ на ваш внешний адрес, то идет перенаправление и подмена назначения с внешнего на внутренний, чтобы доставить до конкретного адреса в локальной сети.


DNAT - замена адреса назначения
SNAT - замена адреса отправителя


Входящая замена назначения подменяется обычно динамически, в зависимости от установленных соединений изнутри.


Но если соединение устанавливается не с локального компьютера, а с внешнего, когда у вас в локальной сети есть веб-сервер и кто-то хочет извне открыть сайт, то как определить кому из нескольких компьютеров направить это обращение? Для этого и существует статическая адресация, которая в powershell так и называется.



Для начала, у вас должен быть создан NAT, в этой строке говорится что все исходящие запросы от адресов из подсети 192.168.200.0/24 будут подменяться на внешний адрес.
 
New-NetNat -Name nat1 -InternalIPInterfaceAddressPrefix 192.168.200.0/24



Далее создаем статический NAT, ну или обратный NAT или же проброс портов, обратите на имя nat1, оно соответствует раннее созданному NAT, тут говорится, что при входящем запросе на 80й порт - назначение меняется на внутренний 192.168.200.100 и порт 80, протокол TCP



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

После таких манипуляций - идет адекватный NAT, подменяется только адрес назначения, но внешний остается прежним.


Спасибо за внимание, если кому-то помог, то пишите отзывы в комментарии, это меня мотивирует и дальше писать и копаться со всякими штуками.