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

Вопрос или проблема

Я использую Windows 10 сборки 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. Кроме того, предположим, что
сопоставление порта было создано через Docker для переадресации трафика с
IP-адреса хоста (10.10.50.20), получаемого на TCP-порту 8080, к
конечной точке контейнера. В этом случае пользователь на хосте контейнера не может
получить доступ к веб-серверу напрямую, используя внешние сопоставленные порты. т.е.
Пользователь, работающий на хосте контейнера, не может получить доступ к веб-серверу контейнера косвенно на http://10.10.50.20:8080. Вместо этого пользователь должен
получить доступ к веб-серверу контейнера напрямую по адресу http://172.16.1.100:80.

Единственное исключение к этому ограничению заключается в том, что к внутренней конечной точке можно
получить доступ с использованием внешнего IP/порта из другого конечной точки ВМ/контейнера,
работающего на том же хосте NAT: это называется “hair-pinning”.
Например, пользователь, работающий на контейнере A, может получить доступ к веб-серверу, работающему
в контейнере B, используя внутренний IP и порт по адресу
http://10.10.50.20:8080

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

Ответ или решение

С учетом описанной вами ситуации с использованием Hyper-V на Windows 10, я подробно объясню, почему ваш port forwarding с помощью команды Add-NetNatStaticMapping не работает, и предложу возможные решения проблемы.

Проблема: Доступ к внутреннему IP через внешний IP

Вы уже установили, что ваш Linux VM имеет внутренний IP-адрес 10.0.5.5 и отвечает на запросы по этому адресу на порту 8500. Однако, когда вы пытаетесь получить доступ к этому же серверу через 127.0.0.1:8500 или внешний IP, просто не возникает никаких ответов. Причина этого кроется в ограничениях настройки NAT в Windows, с которыми вы столкнулись.

Ограничения NAT в Windows

Как указано в документации, Windows NAT не позволяет хосту (в вашем случае, машине с Windows 10) подключаться к внутренним конечным точкам непосредственно через внешний IP-адрес NAT. Это означает, что вам необходимо использовать внутренний IP-адрес и порт для доступа к вашему Linux серверу.

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

Возможные решения

  1. Использование внутреннего IP-адреса: Для доступа к вашему серверу используйте внутренний IP-адрес. В вашем случае это будет:

    http://10.0.5.5:8500
  2. Проверка настроек межсетевого экрана: Убедитесь, что на вашей Linux машине нет блокировки входящих соединений на порт 8500. Возможно, потребуется проверить настройки межсетевых экранов (например, iptables) на вашем сервере.

  3. Hair-pinning (если необходимо): Обратите внимание, что возможность hair-pinning может зависеть от конкретной реализации и конфигурации NAT на вашей платформе. Если у вас есть другой VM, вы можете попробовать доступ с него. С другой стороны, hair-pinning не будет работать с вашим хостом.

  4. Настройка прокси-сервера (если необходимо): Если вам действительно нужно получать доступ к вашему веб-серверу с хоста используя внешний IP-адрес, вы можете рассмотреть использование одного из следующих решений:

    • Настройка обратного прокси на Windows (например, с использованием IIS или Nginx).
    • Использование VPN или SSH-туннелей.

Заключение

Подводя итог, проблема с отсутствием доступа через 127.0.0.1:8500 или ваш внешний IP-адрес в NAT среде на Hyper-V заключается в специфике работы NAT в Windows. Возможно, единственным правильным решением в вашей ситуации будет доступ по внутреннему IP-адресу вашего Linux сервера. Если вам сложно реализовать это, я рекомендую ознакомиться с дополнительными материалами по настройке NAT в Windows и возможности использования других инструментов для достижения вашей цели.

Оцените материал
Добавить комментарий

Капча загружается...