【问题标题】:How to prevent the ip address of hyper-v virtual switch from being changed?如何防止hyper-v虚拟交换机的ip地址被更改?
【发布时间】:2020-12-06 11:32:24
【问题描述】:

我有一台安装了 Windows 10 2004 的笔记本电脑。我配置了 Hyper-V 并创建了两个 VM: 在一个 VM 上运行 Windows 10 以包含我必须用于工作联系人的多个恶意软件 IM 软件。在另一个 VM 上运行 ubuntu server 20.04 进行开发。

我为 Hyper-V 配置了内部网络类型的虚拟交换机,并且 Hyper-V 自动指定了具有静态 IP 的虚拟交换机。我想用机器名连接到 ubuntu。所以我用静态IP指定了ubuntu VM,并在主机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 地址进行配置)?

【问题讨论】:

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

标签: static switch-statement ip virtual hyper-v


【解决方案1】:

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

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

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

您应该能够从客户端虚拟机 ping 192.168.199.1 并从主机 ping 192.168.199.2。

此配置将在重新启动后保持不变,您可以在主机上编辑主机文件,使用您想要的任何名称,例如 192.168.199.2 my.vm.machine

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

【讨论】:

    【解决方案2】:
    1. 不要使用 Hyper-V 创建的默认开关。正如 Miket25 所说:“默认开关是由 HNS 进行的,可能有一些设置导致它在重新启动时具有 DHCP 地址”。
    2. 每年使用 NAT 创建一个内部虚拟交换机。 Here 是向导。然后将虚拟机连接到此交换机。分配给此交换机的静态 IP 地址不会因重启而改变。

    【讨论】:

    • 我尝试了这个,但它不起作用并破坏了现有的交换机,直到我的新交换机被删除,“注意:目前,每台主机只能使用一个 NAT 网络。”
    【解决方案3】:

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

    注意:虚拟机连接在 Hyperv 中的“外部交换机”上

    1. 检查虚拟机使用的 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
    
    1. 检查网关和子网掩码

    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 中,选择 VM:

    • 转到网络适配器 --> 高级功能 --> 将 MAC 地址设置为“静态”
    1. 一切顺利!!!

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

    【讨论】:

    • 虚拟机必须连接到“外部”开关,而不是“默认”。很抱歉这个错误。
    猜你喜欢
    • 1970-01-01
    • 2014-11-18
    • 2021-08-14
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多