如何防止Hyper-V虚拟交换机的IP地址被更改?

7
我有一台安装了Windows 10 2004的笔记本电脑。我配置了Hyper-V并创建了两个虚拟机:一个虚拟机运行Windows 10,用于运行需要用于工作联系人的多个恶意软件IM软件;另一个虚拟机运行Ubuntu Server 20.04用于开发。
我使用类型为内部网络的虚拟交换机配置了Hyper-V,并且Hyper-V自动指定了虚拟交换机的静态IP。我想使用机器名称连接到Ubuntu。因此,我将Ubuntu虚拟机指定为静态IP,并在主机Windows 10的hosts文件中添加了一个条目。然后,我可以使用VS Code的远程SSH功能在Windows 10主机上开发Node.js应用程序。一切正常,直到我重启笔记本电脑为止。
在我重启笔记本电脑之后,Hyper-V虚拟交换机的IP地址被更改了。我无法再连接到VM Ubuntu,因为VM Ubuntu基于旧的虚拟交换机IP配置了静态IP和默认网关。
我通过UI检查了虚拟交换机的IPv4属性,它被配置为“使用以下IP”,因此我认为IP不应该更改。但是我错了。每次我重启笔记本电脑后,虚拟交换机的“静态IP”都会更改。这种更改会破坏与VM Ubuntu的连接。
那么,有没有办法防止虚拟交换机的IP地址被更改?或者在Hyper-V虚拟交换机中添加名称解析机制的方法(然后我可以在VM中配置使用动态IP地址)?

你是如何为虚拟交换机设置静态IP地址的?明确一点,当你为虚拟交换机分配静态IP地址时,你是在主机分区上分配这个静态地址,而不是在虚拟机本身上。 - Miket25
路径:控制面板->网络和Internet->网络连接。有一个名为“vEthernet(默认开关)”的适配器。我右键单击此适配器并打开属性UI。在“网络”选项卡中,我选择了“...IPV4”,然后打开了其属性,接着经典的IP地址设置UI就会显示出来。在UI中显示的是适配器“使用以下IP地址”。 - Willi
为什么我需要虚拟交换机的信息?原因是当我配置静态IP地址的VM ubuntu时,我需要网关信息。请记住,我已经安装了另一个VM,其中运行着Windows 10副本。Windows 10 VM被配置为使用dhcp。也就是说,所有IP配置都是由Hyper-V创建的。我观察到虚拟交换机的IP被用作Windows 10 VM中的默认网关。因此,我同样配置了Ubuntu VM,使用相同的网关。 - Willi
然而,我现在知道虚拟交换机的IP地址在每次重新启动后都会更改。这就要求我每次都必须修改Ubuntu的IP和网关,或者只使用DHCP。两种情况都会破坏在VS Code中保存的远程连接。 - Willi
内部虚拟交换机是如何制作的?还是在安装Hyper-V时默认就有了虚拟交换机? - Miket25
显示剩余2条评论
4个回答

10
我刚刚通过 Hyper-V 的“虚拟交换机管理器”添加了一个额外的内部开关,并将其命名为“静态开关”。然后通过控制面板->网络和 Internet->网络和共享中心->更改适配器设置来更改它的设置。右键单击新的适配器,选择属性->Internet 协议版本 4 (TCP/IPv4),并设置一个静态 IP,该 IP 目前未在您的网络上使用,例如 IP 地址: 192.168.199.1 子网掩码: 255.255.255.0。不需要其他设置。点击确定并关闭所有父窗口。

通过 VM 设置,添加新的 nic 到 Hyper-V 机器,添加硬件->网络适配器-添加。选择“静态开关”,然后点击确定。

编辑客户端虚拟机网络设置,在我的情况下是 Ubuntu 20.10,因此它的有线设置为 eth1(新的“有线连接”)。我禁用了 IPv6,并使用手动配置(静态 IP)编辑了 IPv4 设置,将 IP 地址设置为 192.168.199.2,子网掩码设置为 255.255.255.0,网关设置为 192.168.199.1(“静态开关”)。不需要其他设置。点击应用并检查网络 eth1 是否已连接。

您应该能够从客户端 VM ping 192.168.199.1,并从主机机器 ping 192.168.199.2。

此配置将在重新启动后持续存在,您可以使用任何名称在主机机器上编辑 hosts 文件,例如 192.168.199.2 my.vm.machine

注意:您需要以管理员身份编辑 hosts 文件。


1
  1. 不要使用Hyper-V创建的默认交换机。正如Miket25所说:“默认交换机由HNS创建,可能存在某些设置会导致它在重启时具有DHCP地址”。
  2. 每年使用NAT创建一个内部虚拟交换机。这里是指南。然后将VM连接到此交换机。分配给此交换机的静态IP地址不会因重新启动而更改。

我尝试了这个方法,却没有生效而且还破坏了现有的开关,直到我删除新开关才解决了问题。请注意,目前每个主机只能使用一个NAT网络。 - Joseph Lennox

0

非常简单,添加第二个IP地址 示例

Linux:

sudo ip address add 172.22.88.73/20 dev eth0

Windows:

route ADD 172.22.88.73 MASK 255.255.255.255 172.30.224.1 METRIC 3


0

在Hyperv中设置Ubuntu的静态IP地址

注意:VM(s)连接到Hyperv中的“外部交换机”

  1. 检查VM使用的DNS IP地址

gtan@master:~$ systemd-resolve --status
...

Link 2 (eth0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.141.81
          DNS Domain: mshome.net
  • 检查网关和子网掩码

  • gtan@master:/etc/netplan$ netstat -r
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    default         _gateway        0.0.0.0         UG        0 0          0 eth0
    10.44.0.0       0.0.0.0         255.255.255.0   U         0 0          0 cni0
    10.44.1.0       10.44.1.0       255.255.255.0   UG        0 0          0 flannel.1
    10.44.2.0       10.44.2.0       255.255.255.0   UG        0 0          0 flannel.1
    172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-894a4759cb12
    172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
    192.168.141.80  0.0.0.0         255.255.255.240 U         0 0          0 eth0
    _gateway        0.0.0.0         255.255.255.255 UH        0 0          0 eth0
    

    eth0 网关 = 192.168.141.81 子网掩码 255.255.255.240 (192.168.141.80 用于广播)

    1. 检查 eth0 的 IP 地址和子网掩码

    gtan@master: ifconfig
    ...
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.141.85  netmask 255.255.255.240  broadcast 192.168.141.95
            inet6 fe80::215:5dff:fe3a:1100  prefixlen 64  scopeid 0x20<link>
            ether 00:15:5d:3a:11:00  txqueuelen 1000  (Ethernet)
            RX packets 82792  bytes 103449317 (103.4 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 40353  bytes 10745111 (10.7 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    ...
    
    1. 编辑 "/etc/netplan/01-netcfg.yaml" 文件为以下内容(请先备份原始的 01-netcfg.yaml 文件:sudo cp ./01-netcfg.yaml ./01-netcfg.yaml.bak):
    network:
      version: 2
      renderer: networkd
      ethernets:
        eth0:
          dhcp4: no
          addresses:
            - 192.168.141.85/28
          gateway4: 192.168.141.81
          nameservers:
              addresses: [8.8.8.8]
    
    1. 关闭虚拟机

    1. 在 Hyperv 中选择虚拟机:

    • 进入网络适配器 --> 高级功能 --> 将 MAC 地址设置为 "静态"
    1. 一切准备就绪!!!

    2. 下班后,使用“保存”而不是“暂停”虚拟机


    VM必须连接到“外部”交换机,而不是“默认”的交换机。对于这个错误我很抱歉。 - Godfrey Tan

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接