以前、システムが所属している以外の (= 非ルートな) Network Namespace 上では Linux Bridge の STP が動作しない件について書いた。
月日は流れて、去年の話ではあるけど Linux カーネルに以下のパッチが投稿されて取り込まれたようだ。
つまり、新しいカーネル 1 であれば STP が動作するようになった。 今回は、それを試してみる。
使った環境は次のとおり。 Ubuntu 24.04 LTS の開発版ブランチを利用している。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu Noble Numbat (development branch)" $ uname -srm Linux 6.6.0-14-generic aarch64 $ ip -V ip utility, iproute2-6.1.0, libbpf 1.3.0 $ brctl -V bridge-utils, 1.7
もくじ
下準備
あらかじめ、必要なパッケージをインストールしておく。
$ sudo apt-get -y install iproute2 tcpdump
ネットワークを作る
ここからは、ループしたネットワークを作っていく。
まずは新しく Network Namespace を作成する。
$ sudo ip netns add bridge
Network Namespace に Linux Bridge を作成する。
$ sudo ip netns exec bridge ip link add dev br0 type bridge
続いて veth (Virtual Ethernet Device) のネットワークインターフェースを作成する。
$ sudo ip link add br-veth0 type veth peer name br-veth1
作成したインターフェイスを Network Namespace に所属される。
$ sudo ip link set br-veth0 netns bridge $ sudo ip link set br-veth1 netns bridge
インターフェイスを使えるように UP に設定する。
$ sudo ip netns exec bridge ip link set br-veth0 up $ sudo ip netns exec bridge ip link set br-veth1 up
インターフェイスを両方 Linux Bridge につなぐ。 これでループができた。
$ sudo ip netns exec bridge ip link set br-veth0 master br0 $ sudo ip netns exec bridge ip link set br-veth1 master br0
ストームを起こす
まだ肝心の Linux Bridge が DOWN したままなのでストームは起こっていない。
$ sudo ip netns exec bridge ip -s link show br0 2: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:01 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0
ここで Linux Bridge を UP に設定してみよう。
$ sudo ip netns exec bridge ip link set br0 up
すると、インターフェイスの統計情報でパケットがどんどん増えていく。
$ sudo ip netns exec bridge ip -s link show br0 2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:01 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 682266792 9739306 0 0 0 9739306 TX: bytes packets errors dropped carrier collsns 627472 7296 0 0 0 0
このとき tcpdump(8) するとストームの様子を観察できる。
$ sudo ip netns exec bridge tcpdump -tnl -i br0
STP を有効にする
それでは Linux Bridge の STP を有効にしてみよう。
$ sudo ip netns exec bridge ip link set br0 type bridge stp_state 1
すると、先ほど確認した統計情報の増加がピタッと止まる。
$ sudo ip netns exec bridge ip -s link show br0 2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:01 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped missed mcast 12533565936 192857688 0 0 0 192857688 TX: bytes packets errors dropped carrier collsns 8275968 96232 0 0 0 0
どうやら、STP が正常に動作しているようだ。
いじょう。
- v5.6 あたりからいけそうな感じ (デフォルトの Ubuntu であれば 22.10 以降が該当する)↩