![桥接通过 L2 但不通过 L3 流量的问题](https://linux22.com/image/1000585/%E6%A1%A5%E6%8E%A5%E9%80%9A%E8%BF%87%20L2%20%E4%BD%86%E4%B8%8D%E9%80%9A%E8%BF%87%20L3%20%E6%B5%81%E9%87%8F%E7%9A%84%E9%97%AE%E9%A2%98.png)
嘿大家,希望这里有人可以帮助我。
我在 Ubuntu 系统上设置了一个桥接器,用于连接到我在 KVM 中运行的虚拟机。该桥接器能够发送 ARP 请求和回复,因此我可以进行双向通信,但无法通过任何 IP 通信。
网络如下:vnet0 -> bridge -> eth1 -> 带有主机的 VLAN,我正尝试 ping
尝试穿越 eth1 时,Ping 全部失败。我已经在 vnet0、网桥和 eth1 接口上执行了 TCPDUMP。我发现问题是从 vnet0 发送时没有 IP 数据包离开 eth1,而它们似乎可以正常通过网桥接口。另外值得注意的是,我为此连接使用了 USB 3.0 千兆适配器。
迄今为止的故障排除:
- 通过 sysctl.conf 禁用 IPv6,认为这可能会造成问题
- 将 USB 适配器移至其他 USB 端口
- 多次删除和创建桥接
- 重启
困惑。知道为什么只有 L2 可以通过吗?我的 VM 通过 arp 通过 eth1 学习系统的 MAC 地址,但无法发送 IP 数据包。
谢谢
答案1
又在桌子上折腾了一个小时左右后,我终于搞清楚了。我的 /etc/network/interfaces 配置基于我在另一台运行 14.04 的机器上的工作。损坏的接口文件仅显示相关位:
自动 eth1
iface eth1 inet 手动
启动 ifconfig eth1 启动自动 E-MGMT-Bridge
iface E-MGMT-Bridge inet 手动
bridge_stp off
bridge_fd 0
bridge_ports eth1
在 16.04 中,这会以某种方式破坏第 3 层,同时仍允许第 2 层流量(如 ARP、CDP 和 STP 帧)通过。非常奇怪。要使其在 16.04 中工作,您需要删除 eth1 节并仅定义桥接器而不是它所引用的物理接口,如下所示:
自动 E-MGMT-Bridge
iface E-MGMT-Bridge inet 手动
bridge_stp off
bridge_fd 0
bridge_ports eth1
我必须重新启动,然后才能通过网桥从我的虚拟机 ping 到连接到交换机的真实网络。不确定是否有其他人遇到过这种情况,或者我只是幸运的。
答案2
如果您只看到 ARP,但没有看到“真实”流量,那么 iptables 可能是您的问题所在。检查 iptables 的 FORWARDING 策略是否设置为 ACCEPT。如果您想改用策略 DROP,请检查是否已添加转发规则以允许您的 KVM 流量。