总结:当客户机上使用 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.127
IP 是我可以静态分配的。这就是问题的开始。
当 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!
我希望这个答案能帮助那些陷入类似情况的人,并节省他们无数的搜索时间。请注意,我不必关闭主机或客户机上的防火墙!