web-dev-qa-db-ja.com

Linuxブリッジネットワークの断続的なパケット損失(KVMコンテキスト)

実世界とゲストの間の標準的なブリッジ設定がありますKVM VMゲスト。

ブリッジングは正常に見えます:

[root@t ~]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.40f2e9c6033d   no      eno2
                                    vnet0
virbr0  8000.000000000000   no      

ホストのデフォルトゲートウェイはbr0です。

ホストからVM)にpingを実行し、VMからホストにpingを実行できます。

VMまたはホスト自体のいずれかから外部にpingを実行すると、断続的なパケット損失が発生します。

[root@locoxen2 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=4.59 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=4.59 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=4.67 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=4.75 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=55 time=4.69 ms
64 bytes from 8.8.8.8: icmp_seq=15 ttl=55 time=1224 ms
64 bytes from 8.8.8.8: icmp_seq=16 ttl=55 time=224 ms
64 bytes from 8.8.8.8: icmp_seq=17 ttl=55 time=4.49 ms
64 bytes from 8.8.8.8: icmp_seq=18 ttl=55 time=4.48 ms
64 bytes from 8.8.8.8: icmp_seq=19 ttl=55 time=4.54 ms
64 bytes from 8.8.8.8: icmp_seq=20 ttl=55 time=4.52 ms
64 bytes from 8.8.8.8: icmp_seq=21 ttl=55 time=4.55 ms
64 bytes from 8.8.8.8: icmp_seq=22 ttl=55 time=4.70 ms
64 bytes from 8.8.8.8: icmp_seq=23 ttl=55 time=4.57 ms
64 bytes from 8.8.8.8: icmp_seq=24 ttl=55 time=4.88 ms
64 bytes from 8.8.8.8: icmp_seq=25 ttl=55 time=4.65 ms
64 bytes from 8.8.8.8: icmp_seq=26 ttl=55 time=4.53 ms
64 bytes from 8.8.8.8: icmp_seq=36 ttl=55 time=1430 ms
64 bytes from 8.8.8.8: icmp_seq=37 ttl=55 time=430 ms
64 bytes from 8.8.8.8: icmp_seq=38 ttl=55 time=4.57 ms
64 bytes from 8.8.8.8: icmp_seq=39 ttl=55 time=4.53 ms

これは、トラフィックがVM&Hostを同時に離れる場合に特に発生します。

VMをシャットダウンした場合(つまり、ブリッジのこちら側からのトラフィックがないことを確認した場合)、上記のようにホストからpingを実行してもパケット損失は発生しません。

ホストとVM)の両方から同時にpingを実行しながら、ホストの物理ポート(eno2)でtcpdumpを実行すると、次のように表示されます(40:f2がホスト、52:54がVM):

17:53:26.382679 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 23, length 64
17:53:27.200397 52:54:00:16:f5:f4 > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.221 > 8.8.8.8: ICMP echo request, id 11460, seq 2, length 64
17:53:27.382244 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 24, length 64
17:53:28.200304 52:54:00:16:f5:f4 > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.221 > 8.8.8.8: ICMP echo request, id 11460, seq 3, length 64

つまり、パケットは送信されますが、応答は受信されません。

同じですが、VMからのトラフィックがないか、VMがシャットダウンされます:

17:53:05.346226 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 2, length 64
17:53:05.350936 e8:f7:24:49:49:ee > 40:f2:e9:c6:03:3d, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.0.191: ICMP echo reply, id 27485, seq 2, length 64
17:53:06.348159 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 3, length 64
17:53:06.352855 e8:f7:24:49:49:ee > 40:f2:e9:c6:03:3d, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.0.191: ICMP echo reply, id 27485, seq 3, length 64

iptablesとebtablesはルールを表示せず、すべてACCEPTに設定されています。ポートのすべてのオフロード機能をオフにしました。ボンディングは使用されていません。 MACアドレスは一意です-私が認識できる重複はありません。

CentOS6と7ホストの両方のインストールでこれが表示されることに注意してください。

私は何を見落としていますか?

1
nroam

結局、私の設定には何の問題もありませんでした。

問題は、アップストリームネットワークスイッチが関連するスイッチポートで静的VLAN)を使用するように設定されていないことでした。その後、複数のMACアドレスが表示され、ポートに割り当てるVLANについて混乱が生じました。 。

なんて迷惑なんだ!

1
nroam

私は同じ問題に遭遇しましたが、根本的な問題は異なっていました。問題を診断しようとしているときにこの質問に遭遇し、特にコマンドラインからKVM/qemuを実行しているときに、この情報から利益を得る可能性のある他の人のために、別の考えられる原因で答えを残すと考えました。

仮想ネットワークインターフェイスのMACアドレスを明示的に設定しない場合、qemuはそれにデフォルトのアドレスを割り当てます。複数の仮想マシンを実行していて、それらのネットワークインターフェイスにMACアドレスを設定していない場合、qemuはほぼ確実に両方に同じMACアドレスを与えます。 (ほとんどのGUI KVMラッパーはランダムなMACアドレスを割り当てます。)

明らかに、これはVM間のレイヤー2ルーティングに大混乱をもたらし、VMは誰がアドレスを所有しているかをめぐって争います。

各ホストに異なるMACアドレスを与えることで、問題は解決しました。

0
cdhowie