Linuxネットワークブリッジは手動で生成されたパケットを転送しません。

Linuxネットワークブリッジは手動で生成されたパケットを転送しません。

BPFプログラムを使用してパケット転送を実装しようとしています。アイデアは、適切なパケットをveth1(ingress)から(egress)に直接転送することですveth2。私が直面している問題は、リダイレクトされたパケットがブリッジによってドロップされているようですv-net-1。 Wiresharkを使用してトラフィックを分析しましたが、パケットはveth2予想通りに出入りしますが、到着しません。veth2-brveth3-br

今、理由をよく理解できないことが起こっています。 1つ目は、BPFプログラムをオフにしてユーザー空間プログラムでパケットを構築することで、パケットの宛先IPアドレスは192.168.11.10ブリッジ()の1つですが、IPアドレスを理解する方法は終わりです。つまり、パケット(192.168.11.1)にはクライアントのIPアドレスが必要であり、パケットのルーティング中にMACアドレスのみが変更されます。 2つ目は、私の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

関連情報