![即使有路由表条目,也无法 ping 另一台计算机上的虚拟机](https://linux22.com/image/1601614/%E5%8D%B3%E4%BD%BF%E6%9C%89%E8%B7%AF%E7%94%B1%E8%A1%A8%E6%9D%A1%E7%9B%AE%EF%BC%8C%E4%B9%9F%E6%97%A0%E6%B3%95%20ping%20%E5%8F%A6%E4%B8%80%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA.png)
我有两台计算机。计算机 A 正在运行虚拟机,该虚拟机位于 NAT 后面。计算机 B 只想 PING 该虚拟机。我知道 NAT 后面的虚拟机旨在从外部无法访问,这就是 NAT 存在的原因。我的实验只是为了了解这一切是如何工作的。
计算机A的IP:192.168.1.105
计算机A上的虚拟机IP:172.16.66.132
计算机B的IP:192.168.1.107
据我了解,计算机 B 无法 PING 通虚拟机,因为它不知道如何到达那里,并且它试图通过路由器(192.168.1.1)到达那里,但失败了,因为路由器随后连接到互联网(我已验证过tracert
)。
我认为可以通过在计算机 B 上的路由表中添加自定义条目来改变这种情况。所以,我这样做了:
route add 172.16.66.0 MASK 255.255.255.0 192.168.1.105
上述规则将告知计算机 B,可通过 192.168.1.105(计算机 A 的 IP)访问网络 172.16.66.0。
结果?没有变化。我甚至看到,在 PING VM 时,我的自定义条目已从表中删除。
为什么我的解决方案不起作用?
答案1
该route add
命令无效,并且该路由可能被删除,因为它已经过测试并且被证明是无效的。
原因是您遇到了双 NAT 的情况:您使用的虚拟机软件有自己的虚拟路由器,为虚拟机执行 DHCP 和 NAT。主机没有到该虚拟路由器的路由,因此无法转发任何内容。
对于这种情况,我建议将虚拟网络定义为桥接网络而不是 NAT。