我希望能够从 VM1 到 VM2,两个 VM 都连接到 Linux 网桥 (br0)。下面是我的拓扑
VM1(m1)<====SSH====>[br0]<======SSH=====>VM2(m2)
1 创建桥 br0
$ sudo ip link add dev br0 type bridge
$ sudo ip addr add 10.200.1.1/24 dev br0
$ sudo ip link set br0 up
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
2 启动VM时指定的桥名称
veeru@ghost:~$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.fe540005c7df no vnet0
vnet1
docker0 8000.024205ca1927 no
virbr0 8000.5254003bf832 yes virbr0-nic
我可以看到来宾虚拟机中的网络已启动并且能够从主机到来宾的 ssh 没有任何问题。
但是当我尝试从 VM1(m1) 到 VM2(m2) 进行 ssh 时,无法访问 VM2。我已经使用 VM2(m2) 中的 tcpdump 检查了 ssh 数据包未从 VM1(m1) 到达。但我可以从 VM1 ping 到 VM2。
好像我遗漏了一些关于 linux 桥接概念的要点
附:
我还尝试将我的 wifi 接口(wlp0s20f3)添加到 linux 桥,但是
sudo ip link set wlp0s20f3 down
sudo ip link set br0 down
sudo brctl addif br0 wlp0s20f3
can't add wlp0s20f3 to bridge br0: Operation not supported
我没有接触过访客和主机中的 iptables
答案1
net.bridge.bridge-nf-call-arptables net.bridge.bridge-nf-call-ip6tables net.bridge.bridge-nf-call-iptables
这些控制着穿过网桥的数据包是否被发送到 iptables 进行处理。在使用网桥将虚拟机连接到网络的情况下,一般这样的处理是不是 这是所希望的,因为它会导致访客流量被阻止,因为主机 iptables 规则仅考虑主机本身,而不考虑访客。
因此,请禁用bridge-nf 参数,如下所示。这应该有效。
sudo sysctl -w net.bridge.bridge-nf-call-arptables=0
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0
sudo sysctl -w net.bridge.bridge-nf-call-iptables=0
可以找到更多信息@libvirt 博客和Linux 基金会博客