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, подменяется только адрес назначения, но внешний остается прежним.
Спасибо за внимание, если кому-то помог, то пишите отзывы в комментарии, это меня мотивирует и дальше писать и копаться со всякими штуками.
Первый способ, о котором я писал, это через 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, подменяется только адрес назначения, но внешний остается прежним.
Спасибо за внимание, если кому-то помог, то пишите отзывы в комментарии, это меня мотивирует и дальше писать и копаться со всякими штуками.