私はこの問題を数日間調査しており、まだ答えを見つけていません。あなたの助けは本当に感謝されます!
物理サーバーでいくつかの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ブリッジがポート間でパケットを転送しない他の理由は何ですか?
答えを見つけた! Linuxイーサネットブリッジはebtablesを調べて、転送するパケットとドロップするパケットを決定します。 ebtableをフラッシュすると問題が解決しました。