我在同一子网上有两个虚拟机,在我的主机中创建,如 ( br0
:) 122.56.0.1/24
:
- 虚拟机1 IP:
122.56.0.3
- 虚拟机2 IP:
122.56.0.2
在 VM2 内部,我创建了另一个 VM(即 VM3),该 VM 连接到在 VM2 (:) 内部创建的另一个子网br1
,192.168.0.2/24
IP 地址为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