如何同时将 WinNAT 用于 Hyper-V VM 和 Docker 容器

如何同时将 WinNAT 用于 Hyper-V VM 和 Docker 容器

我正在尝试设置一个家庭服务器来托管 VM 和 Docker 容器。

在 Hyper-V 部分运行的虚拟机没有问题:

  1. 创建一个新的内部交换机(NatSwitch)
  2. 设置其IP配置:New-NetIPAddress -IPAddress 10.0.75.1 -PrefixLength 24 -InterfaceIndex <ifIndex>
  3. 创建 NAT 配置:New-netNat -Name SharedNat -InternalIPInterfaceAddressPrefix 10.0.0.0/17
  4. 创建重定向:Add-NetNatStaticMapping -NatName $NatName -Protocol TCP -ExternalPort 80 -InternalPort 80 -InternalIPAddress 10.0.75.2 -ExternalIPAddress 0.0.0.0

我现在要声明的是,此时 NAT 按预期工作,其后面的 VM 可以联系外界,并且外界只能通过其中一个转发端口发起与 VM 的联系。

现在我正在尝试设置docker,以便我可以同时使用它,同时仍然使用它的NAT功能(我正在尝试避免“透明”docker网络,以避免用容器污染我的网络。)

请注意,我在 Microsoft 网站上找到了说明:https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network,我稍后会回复他们。

因为首先我需要安装docker。按照这些说明:https://learn.microsoft.com/fr-fr/virtualization/windowscontainers/quick-start/set-up-environment?tabs=dockerce#windows-server-1,一切已安装完毕,是时候回到之前的 NAT 设置说明了。

小回顾:

  • 1 个外部 Hyper-V 交换机(应该不会产生影响,但为了完整性而包含在内)
  • 1 个内部 Hyper-V 交换机配置在 10.0.75.1/24 上(运行一个虚拟机,其 IP 为 10.0.75.2)
  • 1 在 10.0.0.0/17 上配置 1 个 Nat

据我所知,我需要让 docker 使用 10.0.76.0/24 范围内的 IP 作为自己的 NAT 网络。这是通过"fixed-cidr":"10.0.76.0/24"添加C:\ProgramData\docker\config\daemon.json

但是当启动 docker 时,我在事件日志中收到以下错误消息:

致命错误:无法启动守护程序:初始化网络控制器时出错:创建默认网络时出错:hnsCallRawResponse 期间失败:hnsCall 在 Win32 中失败:您未连接,因为网络上存在重复的名称。如果加入域,请转到控制面板中的系统以更改计算机名称,然后重试。如果加入工作组,请选择另一个工作组名称。(0x34)

我错过了什么?

如果这可能会对解决方案产生影响,我计划让该服务器成为 docker swarm 的管理器,并加入一个 linux VM 以便能够托管 linux 容器。

相关内容