Назад | Перейти на главную страницу

Add-NetNatStaticMapping не перенаправляет порт на локальную виртуальную машину

Я запускаю 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

Источник: https://techcommunity.microsoft.com/t5/Virtualization/Windows-NAT-WinNAT-Capabilities-and-limitations/ba-p/382303