次のブリッジ設定を使用している場合は、UDP(Linux 5.11.6)に問題があります。
(ns${i}
名前空間を表し、left${i}/right${i}
vethペアになるようにする)
ns1{right1(x.x.x.1)---}---ns2{---left1::bridge(x.x.x.2)::right2---}--ns3{---left2(x.x.x.3)}
つまり、veth インターフェイスのペアで接続された 3 つのネームスペースがあり、中間ネームスペース left1 と right2 はブリッジの下で制御されます。
名前空間3内でxxx1とxxx2に送信するためにudp送信者を設定し、ブリッジのns2内で受信機を設定すると、すべてが正常に機能し、パケットが受信されます(xxx2から)。しかし、xxx1で別のリスナーを起動すると、突然両方のリスナーはもはやメッセージを受信しなくなります。何が起こっているのか知っている人はいますか?役立つ追加情報がある場合はお知らせください。
答え1
誰もがこれを偶然発見した場合:
問題は、vethペアはすべて基本的に同じMACアドレスを使用するため、ブリッジを介してパケットをルーティングするときに広範な混乱を引き起こすことです。今実行中の設定は、次のスクリプトによって生成されました(注:競合を防ぐための任意のmacアドレス)。
#!/usr/bin/perl
use strict;
use warnings;
use v5.32;
my @nodes;
my @ifaces;
my $num_nodes = 7;
sub rand_mac {
my $mac = "200";
$mac .= sprintf( "%x", rand 16 ) for 1 .. 9;
$mac =~ s/(..)/$1:/g;
return $mac =~ s/:$//r;
}
foreach ( 1 .. $num_nodes ) {
my $n = "ns$_";
qx/ip netns add $n/;
push @nodes, $n;
}
foreach my $i (1 .. ($num_nodes + 1) ) {
my ( $lnode, $rnode ) = ( $nodes[ $i - 1 ], $nodes[$i] );
my ( $left, $right ) = ( "right", "left" ); # INDEED
my ( $l_mac, $r_mac ) = ( rand_mac(), rand_mac() );
say "init $left ($lnode: $l_mac) -- $right ($rnode: $r_mac)";
qx/ip link add $left type veth peer name $right/;
qx/ip link set $left netns $lnode/;
qx/ip link set $right netns $rnode/;
qx/ip netns exec $lnode ip link set $left address $l_mac/;
qx/ip netns exec $rnode ip link set $right address $r_mac/;
}