我正在运行 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
答案1
你可能会遇到这种情况:
直接从主机访问内部端点
无法使用 NAT 静态端口映射中引用的外部 IP/端口直接从 NAT 主机访问分配给虚拟机或容器的内部端点。从 NAT 主机,这些内部端点必须通过其内部 IP 和端口直接寻址。例如,假设容器端点的 IP 为 172.16.1.100,并且正在运行一个在端口 80 上侦听的 Web 服务器。此外,假设已通过 docker 创建端口映射,以将 TCP 端口 8080 上接收的来自主机 IP 地址 (10.10.50.20) 的流量转发到容器端点。在这种情况下,容器主机上的用户无法使用外部映射的端口直接访问 Web 服务器。例如,在容器主机上操作的用户无法间接访问容器 Web 服务器http://10.10.50.20:8080。相反,用户必须直接访问http://172.16.1.100:80。
此限制的一个警告是,可以使用外部 IP/端口从在同一 NAT 主机上运行的单独 VM/容器端点访问内部端点:这称为 hair-pinning。例如,在容器 A 上运行的用户可以使用容器 B 的内部 IP 和端口访问在容器 B 中运行的 Web 服务器 http://10.10.50.20:8080