在Windows 10 NAT虚拟交换机上设置端口转发

时间:2015-12-12 09:26:31

标签: powershell windows-10 hyper-v

我发现了这篇优秀的博客文章,其中显示了设置NAT虚拟交换机的步骤,我遵循了这一步骤。 https://4sysops.com/archives/native-nat-in-windows-10-hyper-v-using-a-nat-virtual-switch/

首先,cmdlet New-NetNat甚至不将外部IP作为参数。如果有多个外部IP,NetNat如何知道使用哪个外部IP(这是我的情况)?

假设我的主机有一个外部IP“192.168.1.112”,NAT后面的来宾机器有一个内部IP“10.0.75.2”。我正在尝试设置端口转发。要尝试的明显语法是:

Add-NetNatStaticMapping -NatName "NAT" -ExternalIpAddress "192.168.1.112" -ExternalPort 4000 -InternalIPAddress "10.0.75.2" -InternalPort 3389 -Protocol TCP

我收到以下错误:

  

Add-NetNatStaticMapping:外部IP地址192.168.1.112和   静态映射的端口号4000与现有映射不匹配   ExternalAddress的IP地址或端口范围。使用   添加NetNatExternalAddress以添加ExternalAddress。

我不明白它的意思,但我按照建议输入:

Add-NetNatExternalAddress -NatName "NAT" -IPAddress "192.168.1.112" -PortStart 4000 -PortEnd 4000

我收到以下错误:

  

Add-NetNatExternalAddress:找不到元素。

在这个阶段,我已经达到了我的能力范围。除了PowerShell无用的重言式(“Add-NetNatExternalAddress:向NAT实例添加外部地址。”)之外,我找不到有关此NAT功能的任何相关文档。

为NetNat添加外部地址有什么作用?如果我不指定端口会发生什么?它会对主机的连接能力产生什么影响吗?以允许我设置静态映射的方式添加外部地址的正确语法是什么?

4 个答案:

答案 0 :(得分:1)

上面的链接是我的博客Cloudpuzzles。使用NVGRE和NAT网关时的情况,而不是新的NAT虚拟交换机。我目前还没有写过关于它的文章,但托马斯在这里做了一点:http://www.thomasmaurer.ch/2015/11/hyper-v-virtual-switch-using-nat-configuration/

基本上,在添加地址等之前,您必须添加一个新的NetNat(这是您在Add-NetNatExternalAddress中引用的NatName)。

至少对于NVGRE来说,PortStart和PortEnd被用作端口租户可以使用的边界。

答案 1 :(得分:0)

我遇到了同样的问题,虽然我不确定为什么Add-NetNatExternalAddress命令失败但我可以通过以下步骤让NetNatStaticMapping工作:

运行以下命令:

Get-NetNatExternalAddress

从您获得的外部地址列表中,选择任何外部IP和外部端口,并将其用作Add-NetNatStaticMapping命令的参数。

答案 2 :(得分:0)

尝试类似: Add-NetNatStaticMapping -NatName“ NAT”-协议TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 10.0.75.2 -InternalPort 3389 -ExternalPort 4000 这肯定可以工作...并且我建议您重新考虑IP范围...因为IP 192.168.1.11应该在专用网络中,反之亦然。

答案 3 :(得分:0)

首先你需要创建一个带有 NAT 的虚拟交换机:

New-VMSwitch -Name "HTTPS-NAT" -SwitchType NAT -NATSubnetAddress 192.168.100.0/24

然后需要将必要的VM连接到指定的vswitch,并为所有通过这个Hyper-V虚拟交换机连接的虚拟机启用地址转换规则:

New-NetNat -Name HTTPS-NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.100.77" -InternalPort 443 -NatName HTTPS-NAT

执行这些 PowerShell 命令后,所有到达 Hyper-V 主机端口 443 的 HTTPS 流量都将转发到虚拟机的私有 IP 地址。