Linux 网络桥不转发手动创建的数据包

Linux 网络桥不转发手动创建的数据包

我正在尝试使用 BPF 程序实现数据包转发。这个想法是将合适的数据包从veth1(入口)直接转发到veth2(出口)。我面临的问题是重定向的数据包似乎被桥丢弃了v-net-1。我一直在使用 Wireshark 分析流量,数据包按预期离开veth2和进入,但从未到达。veth2-brveth3-br

现在有一些事情我不太明白为什么会发生。第一个是,当我关闭 BPF 程序并让用户空间程序构建数据包时,数据包的目标 IP 地址是网桥 ( 192.168.11.10) 中的一个,但是我理解 IP 地址的方式是它们是端到端的,即数据包 ( 192.168.11.1) 中应该有客户端的 IP 地址,并且在路由数据包时只有 MAC 地址会改变。第二个是由我的 BPF 程序创建的数据包(具有完全相同的 MAC 和 IP 条目)不会发送到veth3-br,而由用户空间程序创建的数据包会发送到那里。 UDP 端口是我的尝试之间唯一不同的地方,但据我了解,这不可能是下降的原因,因为网桥不考虑 l4 协议。

设置如下所示:

   _______________________________________              ______________________
  |            Relay namespace            |            |   Client namespace   |
  |    ______________   ______________    |            |     ____________     |
  |   | 192.168.10.2 | | 192.168.11.2 |   |            |    |192.168.11.1|    |
  |___|____veth1_____|_|____veth2_____|___|            |____|____veth3___|____|
                              \                                   /
                               \                                 /
                                \                               /
                                 \                             /
                                __\ _________________________ /
                               /veth2-br|            |veth3-br\
                               |                              |
                               \__________v-net-1_____________/
                                             /
                                   ip: 192.168.11.10
                                   net: 192.168.11.0/24

中继命名空间的链接信息是:

9: veth1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether a2:85:a2:09:2a:77 brd ff:ff:ff:ff:ff:ff link-netnsid 0
14: veth2@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether ce:b8:3f:d5:f3:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0

全局命名空间的链接信息是:

10: v-net-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether d6:06:cb:05:65:62 brd ff:ff:ff:ff:ff:ff
11: veth3-br@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master v-net-1 state UP mode DEFAULT group default qlen 1000
    link/ether a6:bc:ae:a2:75:8f brd ff:ff:ff:ff:ff:ff link-netns client_ns
13: veth2-br@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master v-net-1 state UP mode DEFAULT group default qlen 1000
    link/ether 0a:85:99:6c:80:1f brd ff:ff:ff:ff:ff:ff link-netns relay_ns

客户端命名空间的链接信息是:

12: veth3@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether f2:51:1c:4c:2b:0b brd ff:ff:ff:ff:ff:ff link-netnsid 0

桥转发数据库如下所示:

33:33:00:00:00:01 self permanent
01:00:5e:00:00:6a self permanent
33:33:00:00:00:6a self permanent
01:00:5e:00:00:01 self permanent
33:33:ff:05:65:62 self permanent
01:00:5e:00:00:fb self permanent
33:33:00:00:00:fb self permanent
d6:06:cb:05:65:62 vlan 1 master v-net-1 permanent
d6:06:cb:05:65:62 master v-net-1 permanent

相关内容