VM 无法 ping 通另一个嵌套 VM,为什么?

VM 无法 ping 通另一个嵌套 VM,为什么?

我在同一子网上有两个虚拟机,在我的主机中创建,如 ( br0:) 122.56.0.1/24

  • 虚拟机1 IP:122.56.0.3
  • 虚拟机2 IP:122.56.0.2

在 VM2 内部,我创建了另一个 VM(即 VM3),该 VM 连接到在 VM2 (:) 内部创建的另一个子网br1192.168.0.2/24IP 地址为192.168.0.3。基本上,现在VM2有两个网卡:

  • eth0,IP 地址为122.56.0.2
  • br1,IP 地址为192.168.0.2

我使用以下方法启用 VM2之间eth0和内部的 IP 转发:br1

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o br1 -j MASQUERADE
iptables -A FORWARD -i br1 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT

另外,我将 VM1 内的 NIC 设置为:

ip addr add 122.56.0.3/24 dev eth0
ip link set eth0 up
ip route add default via 122.56.0.2

VM2 内部:

ip addr add 122.56.0.2/24 dev eth0
ip link set eth0 up
ip route add default via 122.56.0.1
ip link add br1 type bridge
ip addr add 192.168.0.2/24 dev br1
ip link set br1 up

最后在 VM3 中(在 VM2 中创建的嵌套虚拟机):

ip addr add 192.168.0.3/24 dev eth0
ip link set eth0 up
ip route add default via 192.168.0.2

现在,在 VM1 内,我可以 ping 通 VM2 122.56.0.2,但无法通通192.168.0.2,也根本无法 ping 通 VM3。在 VM2 内,我可以在 上 ping VM1 122.56.0.3,在 上 ping VM3 192.168.0.3,在 VM3 内,我可以在 上 ping VM2 122.56.0.2,并192.168.0.2在 上 ping VM1 122.56.0.3

如您所见,我的问题是 VM1 无法访问 VM3,但 VM3 可以访问 VM1。我不确定这里出了什么问题。当 VM1 和 VM2 是 docker 容器时(VM3 仍然是容器内的虚拟机),我测试了完全相同的设置,并且在完全相同的网络设置下一切工作正常。我检查了所有虚拟机内的 IP 转发,当显示时似乎已启用:

cat /proc/sys/net/ipv4/ip_forward
1

因此,基于 VM3 不在同一子网上时能够到达 VM1 的事实,它告诉我 IP 转发确实工作得很好,但我不确定为什么 VM1 无法到达 VM3。顺便说一句,这里没有防火墙。我很感谢你在这方面的帮助。

答案1

尝试禁用 UFW,也许是 ICMP 问题,我不推荐这种使用,因为这是一种不好的做法并且不安全,如果 ufw 禁用后 ping 有效,请尝试启用 icmp

不要让 ufw 禁用,只有在这个命令生效后才能看到

$ ufw disable

检查此链接https://www.layerstack.com/resources/tutorials/How-to-enable-and-disable-Ping-from-IPTables-on-Linux-Cloud-Servers

相关内容