Я запускаю Windows 10 build 1809 и у меня установлен Hyper-V. У меня есть машина Linux, работающая за NAT с подключением к Интернету, работающая на IP 10.0.5.5. Я в основном следовал инструкциям по ссылке ниже
https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network
При создании сопоставления портов я вызвал
Add-NetNatStaticMapping -ExternalIPAddress 0.0.0.0/24 -ExternalPort 8500 -Protocol TCP -InternalIPAddress 10.0.5.5 -InternalPort 8500 -NatName YetAnotherNAT
Если я попытаюсь ударить http://10.0.5.5:8500 он работает (страница загружается). Если я попытаюсь ударить http://127.0.0.1:8500 не работает (ничего не загружается). Даже если я попытаюсь использовать любой из своих внешних IP-адресов, это не сработает.
По сути, переадресация всего порта ничего не делает.
Любые идеи?
Get-VmSwitch возвращает следующее
PS C:\> Get-VMSwitch
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
nat Internal
Wifi External Intel(R) Dual Band Wireless-AC 7265
DockerNAT Internal
Default Switch Internal Teamed-Interface
MyNATSwitch Internal
YetAnotherSwitch Internal
Get-NetNat возвращает следующее
PS C:\> get-netnat
Name : YetAnotherNAT
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 10.0.5.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
Вы, вероятно, попали в это:
Доступ к внутренним конечным точкам напрямую с хоста
Внутренние конечные точки, назначенные виртуальным машинам или контейнерам, не могут быть доступны с помощью внешних IP-адресов / портов, указанных в сопоставлении статических портов NAT, непосредственно с узла NAT. От хоста NAT к этим внутренним конечным точкам следует обращаться напрямую по их внутреннему IP-адресу и портам. Например, предположим, что конечная точка контейнера имеет IP-адрес 172.16.1.100 и на ней работает веб-сервер, который прослушивает порт 80. Более того, предположим, что сопоставление портов было создано через докер для перенаправления трафика с полученного IP-адреса хоста (10.10.50.20). через TCP-порт 8080 к конечной точке контейнера. В этом случае пользователь на узле контейнера не может напрямую получить доступ к веб-серверу, используя внешние сопоставленные порты. например Пользователь, работающий на хосте контейнера, не может получить доступ к веб-серверу контейнера косвенно на http://10.10.50.20:8080 . Вместо этого пользователь должен получить прямой доступ к веб-серверу контейнера на http://172.16.1.100:80 .
Единственное предостережение относительно этого ограничения заключается в том, что к внутренней конечной точке можно получить доступ с помощью внешнего IP / порта из отдельной конечной точки виртуальной машины / контейнера, работающей на том же хосте NAT: это называется закреплением волос. Например. Пользователь, работающий в контейнере A, может получить доступ к веб-серверу, работающему в контейнере B, используя внутренний IP-адрес и порт http://10.10.50.20:8080