1 创建桥 br0

1 创建桥 br0

我希望能够从 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 基金会博客

相关内容