OVS网桥跨物理接口互通问题:eth1侧设备无法访问虚拟接口所属网桥
故障排查与解决方案
根因说明
访问限制核心是VLAN标签转发不匹配:wlan0.1、wlan0.2为802.1Q VLAN子接口,对应br1、br2的流量默认携带对应VLAN标签,而breth对接eth1的端口默认仅转发无标签流量,导致br1、br2的流量无法通过eth1到达PC。
可落地解决方案
方案1:透传VLAN(适合需要保留VLAN隔离的场景)
- 先确认wlan0.1、wlan0.2绑定的VLAN ID,执行命令查看:
ip -d link show wlan0.1,输出中vlan id X即为对应VLAN号,记录br1、br2对应的两个VLAN ID(示例假设为10、20) - 将breth上的eth1端口配置为Trunk模式,允许对应VLAN通过:
# 仅允许指定VLAN ovs-vsctl set port eth1 trunks=10,20 # 如需允许所有VLAN可执行:ovs-vsctl set port eth1 trunks=0-4095 - 对接入PC的网卡配置对应VLAN的子接口,即可直接访问对应网桥资源。
方案2:三层转发终结VLAN(适合PC无需感知VLAN的场景)
- 在breth上创建对应VLAN的内部接口,配置与对应网桥同网段的IP:
# 配置br1对应VLAN10的内部接口 ovs-vsctl add-port breth vlan10 tag=10 -- set interface vlan10 type=internal ip addr add 192.168.10.254/24 dev vlan10 # 替换为实际br1网段的可用IP ip link set vlan10 up # 按同样逻辑配置br2对应VLAN的内部接口 - 开启宿主机IP转发功能:
sysctl -w net.ipv4.ip_forward=1 # 永久生效执行:echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p - 配置PC的静态路由,将br1、br2的网段下一跳指向breth的IP,或在网段内的网关设备上配置对应路由即可。
通用排查项
- 检查OVS网桥间的Patch Port是否已放通对应VLAN:执行
ovs-vsctl list port <patch端口名>,确认trunks字段包含对应VLAN ID - 检查宿主机iptables规则是否放通对应网段转发:执行
iptables -L FORWARD -nv,若存在默认DROP规则需添加对应网段的放通规则 - 检查OVS流表是否存在丢弃对应VLAN流量的规则:执行
ovs-ofctl dump-flows <网桥名>确认转发规则正常
内容的提问来源于stack exchange,提问作者suaib islam
相关产品推荐
相关产品推荐

