web-dev-qa-db-ja.com

Linuxブリッジ(brctl)がパケットをドロップしています

私はこの問題を数日間調査しており、まだ答えを見つけていません。あなたの助けは本当に感謝されます!

物理サーバーでいくつかのVM(仮想マシン)を実行しています。サーバーはLinuxブリッジ(br100)を使用して、これらのVMを接続します。

# brctl show
bridge name     bridge id               STP enabled     interfaces
br100           8000.984be15fe7e3       no              eth1.1729
                                                        vnet0
                                                        vnet1

vnet0とvnet1はVMの仮想NICです。

br100(物理サーバー)はIP 172.16.0.11に割り当てられています。 VMは172.16.0.3に割り当てられ、vnet0に接続されたものは172.16.0.5です。

ここまでは順調ですね。 172.16.0.3は172.16.0.5に問題なくpingできます。

ここで、サブネット10.8.0.0/16へのルーター(重要な場合はopenvpnサーバー)として172.16.0.3を設定しようとしています。

これが私の問題です:10.8.0.0/16(この場合は10.8.0.6)のマシンは172.16.0.3にpingできますが、172.16.0.5にpingできません。

(私は思う)私はすべての明らかな原因を除外しました:ip_forwardがオンになった、iptablesがフラッシュされた、など。

10.8.0.6から172.16.0.5にpingを実行すると、物理サーバー上のvnet1(VM 172.16.0.3)にパケットが配信されました。

# tcpdump -leni vnet1 icmp
tcpdump: WARNING: vnet1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet1, link-type EN10MB (Ethernet), capture size 65535 bytes
07:45:03.858356 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98: 
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1046, length 64
07:45:04.858239 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98:
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1047, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel

ただし、vnet0(172.16.0.5)には転送されません。

# tcpdump -leni vnet0 icmp
tcpdump: WARNING: vnet0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

この投稿 のアドバイスにも従い、/ proc/sys/net/bridge/bridge-nf- *に0を設定しましたが、役に立たなかったようです。

Iptablesフィルターをフラッシュすることに加えて、iptablesでTRACEもオンにしました。これにより、これらのパケットがiptablesにヒットすることはありませんでした。

Linuxブリッジがポート間でパケットを転送しない他の理由は何ですか?

4
Kenneth

答えを見つけた! Linuxイーサネットブリッジはebtablesを調べて、転送するパケットとドロップするパケットを決定します。 ebtableをフラッシュすると問題が解決しました。

5
Kenneth