当 IP 从 DHCP 分配的动态 IP 更改为静态 IP 时,主机无法与客户虚拟机通信

当 IP 从 DHCP 分配的动态 IP 更改为静态 IP 时,主机无法与客户虚拟机通信

总结:当客户机上使用 DHCP IP 时,主机可以 ping 通 NAT 连接的客户虚拟机,但使用静态 IP 时则不能。帮忙。


因此,我一直在尝试设置一个基于 NAT 的 LAN,主机可以与该 LAN 进行通信,其中每个 VM 都有一个静态 IP。根据 VMware 文档,vmnet 虚拟交换机连接了一个主机适配器,该适配器在主机的ifconfig输出中显示为“vmnet#”(其中 # 是适配器编号)。使用此虚拟接口,主机可以 ping 并与连接到同一 vmnet# 虚拟交换机的客户 VM 进行通信。

现在,我首先创建了一个名为 vmnet10 的新虚拟交换机。我将其配置为具有子网 IP 10.0.99.0/24(NetMask: 255.255.255.0)、具有 IP 的 NAT 设备10.0.99.2和 DHCP 服务器(根据 VMware 文档,该服务器位于 10.0.99.254)。我没有更改自动 DHCP 设置,因此范围10.0.99.128 - 10.0.99.253是动态 DHCP IP,而10.0.99.3 - 10.0.99.127IP 是我可以静态分配的。这就是问题的开始。

当 VM 来宾从 DHCP 服务器获取其 IP(10.0.99.128)时,主机适配器将连接到该 IP,并且 10.0.99.1 可以 ping 10.0.99.128,反之亦然。但是,如果我通过 nmtui 手动更改 IP,(生成以下/etc/sysconfig/network-scripts/ifcfg-ens33文件)尽管虚拟机仍然可以访问互联网,并且可以 ping 通其他虚拟机,但主机无法访问它,反之亦然。发生了什么?这是因为我没有向 DHCP 服务器请求静态 IP?! 我该如何解决?


上述系统的配置转储可以在以下位置找到:此位置

答案1

编辑:下面的方法可能是必要的,也可能不是必要的——然而,这个特定的步骤是一个必须需要在客户机接口上创建静态路由,因为现有的路由表可能不正确。我的路由表最初是这样的:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.99.2       0.0.0.0         UG    100    0        0 ens33
10.0.99.2       0.0.0.0         255.255.255.255 UH    100    0        0 ens33
10.0.99.11      0.0.0.0         255.255.255.255 UH    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

为此,/etc/sysconfig/network-scripts/route-ens33(路线-界面) 文件应使用以下语法创建:

default 10.0.99.2 dev ens33
10.0.99.0/24 dev ens33

其中10.0.99.2是网关(VMware NAT 设备)的 IP 地址,10.0.99.0/24是静态 IP 所在的子网,即 LAN 子网。完成此步骤后,必须使用 重新启动接口nmcli c d ens33; nmcli c u ens33。内核路由表现在应如下所示:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.99.2       0.0.0.0         UG    100    0        0 ens33
10.0.99.0       0.0.0.0         255.255.255.0   U     100    0        0 ens33
...

因此,即使客户机不使用 DHCP,我们也需要为客户机虚拟机分配静态 IP。因此,dhcpd.conf虚拟交换机的 需要为每个静态 IP 提供条目。由于我使用的是vmnet10,我编辑了/etc/vmware/vmnet10/dhcpd/dhcpd.conf文件并添加了:

...
####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" #######

####### VMNET Static IP Allocation Table by Somu                 #######
host vmInfra.somuVMnet.local {
    hardware ethernet 00:0C:29:79:8C:1F;
    fixed-address 10.0.99.99;
}

host vmPrime.somuVMnet.local {
    hardware ethernet 00:0C:29:3B:B9:1C;
    fixed-address 10.0.99.11;
}

host vmDeux.somuVMnet.local {
    hardware ethernet 00:0C:29:2A:E2:D3; 
    fixed-address 10.0.99.12;
}

请注意,每个 MAC 地址对应于为每个虚拟机分配的虚拟网卡。应添加这些配置虚拟机已关闭,并且 VMware 工作站本身也已关闭。

最后,一旦保存了配置,由于 dhcp 服务在主机上运行,​​因此必须重新启动它们。由于我找不到每个虚拟机的单独服务,所以我只是vmware.service在主机本身上重新启动了。请注意,我使用的systemd是 Fedora 27。即使命令不同,此方法也同样适用于 System V 操作系统。

systemctl restart vmware; systemctl status -l vmware

确保服务处于活动状态,然后打开您的客户机。现在,如果您已将虚拟机配置为具有静态 IP,则它必须与您设置的 IP 匹配,dhcpd.conf以避免冲突。如果使用基于 DHCP 的自动配置,则完全没有问题,因为 DHCP 服务器现在将根据虚拟 NIC 的 MAC 地址分配您请求的特定 IP!

我希望这个答案能帮助那些陷入类似情况的人,并节省他们无数的搜索时间。请注意,我不必关闭主机或客户机上的防火墙!

相关内容