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