桥接通过 L2 但不通过 L3 流量的问题

桥接通过 L2 但不通过 L3 流量的问题

嘿大家,希望这里有人可以帮助我。

我在 Ubuntu 系统上设置了一个桥接器,用于连接到我在 KVM 中运行的虚拟机。该桥接器能够发送 ARP 请求和回复,因此我可以进行双向通信,但无法通过任何 IP 通信。

网络如下:vnet0 -> bridge -> eth1 -> 带有主机的 VLAN,我正尝试 ping

尝试穿越 eth1 时,Ping 全部失败。我已经在 vnet0、网桥和 eth1 接口上执行了 TCPDUMP。我发现问题是从 vnet0 发送时没有 IP 数据包离开 eth1,而它们似乎可以正常通过网桥接口。另外值得注意的是,我为此连接使用了 USB 3.0 千兆适配器。

迄今为止的故障排除:

  1. 通过 sysctl.conf 禁用 IPv6,认为这可能会造成问题
  2. 将 USB 适配器移至其他 USB 端口
  3. 多次删除和创建桥接
  4. 重启

困惑。知道为什么只有 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 流量。

相关内容