OPX(OpenSwitch)の入ったs6010-onでMTU 9000の永続化をしたい
MMA Advent Calendar 2024 4日目の記事です
はじめに
s6010-onは全ポートQSFP+です.
40Gbitを扱うならMTU 9000のジャンボフレームで扱いたいところです.
しかし,一時的にならできますが,設定の永続化にはかなりハマりました.
コマンドラインの場合
インターフェースの設定はip
コマンドやifconfig
コマンドがそのまま使えます.
そのため,MTU 9000の設定も以下のコマンドでできます.
$ sudo ip link set e101-001-0 mtu 9000
$ sudo ip link set e101-032-0 mtu 9000
$ sudo ip link set e101-032-0.10 mtu 9000
$ sudo ip link set br10 mtu 9000
しかし,これではスイッチが再起動したときにすべて消えてしまいます.
そのため,設定の永続化が必要です.
試行錯誤
/etc/network/interfaces に書き込み
OPXはDebianベースで,インターフェースの設定は/etc/network/interfaces
に書いておけば設定の永続化ができます.
そのため最初は,このファイルにmtu 9000
と書けば行けると思っていました.
(前略)
auto e101-001-0
iface e101-001-0 inet manual
mtu 9000
auto e101-032-0.10
iface e101-032-0.10 inet manual
vlan-raw-device e101-032-0
mtu 9000
auto br10
iface br10 inet static
address 192.168.0.253/24
bridge_ports e101-001-0 e101-032-0.10
mtu 9000
ここに書いた後,以下のコマンドで設定は即時に反映できます.
$ sudo systemctl restart networking
$ ip link show
(前略)
7: e101-001-0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq master br10 state UP mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:6a brd ff:ff:ff:ff:ff:ff
alias NAS## 0 1
(中略)
38: e101-032-0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:d1 brd ff:ff:ff:ff:ff:ff
alias NAS## 0 125
40: e101-032-0.10@e101-032-0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc noqueue master br10 state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:d1 brd ff:ff:ff:ff:ff:ff
41: br10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:6a brd ff:ff:ff:ff:ff:ff
しかし,networkingのリスタートではなく,スイッチ自体を再起動してみたら問題が起こりました.
インターフェースのMTUは9000で設定されていますが,他のホストと通信ができなくなってしまったのです.
$ ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
< シーン >
interfacesにコマンドを書いてみる
コマンドで設定したときは通信できたので,/etc/network/interfaces
にコマンドを書いてみることにします.
up
やpost-up
オプションを使えば,インターフェースが立ち上がった直後にコマンドを実行することができます.
(前略)
auto e101-001-0
iface e101-001-0 inet manual
mtu 9000
up ip link set $IFACE mtu 9000
auto e101-032-0.10
iface e101-032-0.10 inet manual
vlan-raw-device e101-032-0
mtu 9000
up ip link set $IFACE mtu 9000
auto br10
iface br10 inet static
address 192.168.0.253/24
bridge_ports e101-001-0 e101-032-0.10
mtu 9000
up ip link set $IFACE mtu 9000
しかし,これでも結果は同じです.MTU 9000はちゃんと設定されますが,他のホストにpingが届きません.
これはup
をpost-up
に置き換えても一緒でした.
結論: systemdにコマンドを実行させる
/etc/network/interfaces
が使えないことがわかったので,別の方法でコマンドを実行できるようにします.
OPXはDebianベースなので,スイッチ起動時にはsystemdが働きます.
そのため,MTU 9000を設定するサービスをsystemdに登録させて,systemdに設定させます.
[Unit]
Description=Set interfaces mtu 9000
After=network-online.target
Requires=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/mtu9000/set-mtu-9000.sh
[Install]
WantedBy=multi-user.target
#!/bin/sh
interfaces="e101-001-0 e101-032-0 e101-032-0.10 br10"
for iface in $interfaces; do
while ! ip link show "$iface" > /dev/null 2>&1; do
echo "Waiting for interface $iface to appear..."
sleep 1
done
echo "Interface $iface is available."
done
for iface in $interfaces; do
ip link set "$iface" mtu 9000
echo "MTU set to 9000 for $iface."
done
echo "All interfaces have been configured with MTU 9000."
$ sudo chmod +x /opt/mtu9000/set-mtu-9000.sh
$ sudo systemctl enable set-mtu-9000.service
network-online.target
のあとに動かすことで,インターフェースが立ち上がった後にMTU 9000を設定するように試みていますが,
実際にはインターフェースが立ち上がる前からnetwork-online.target
が動いてしまいます.
(しかも失敗して終わってそのあと何回もスタートしまくります.)
そのため,シェルスクリプト側でインターフェースが立ち上がったかの確認が必要です.
これで再起動時に,インターフェースがMTU 9000に設定され,他のホストと通信することができました.
$ ip link show
(前略)
7: e101-001-0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq master br80 state UP mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:6a brd ff:ff:ff:ff:ff:ff
alias NAS## 0 1
(中略)
38: e101-032-0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:d1 brd ff:ff:ff:ff:ff:ff
alias NAS## 0 125
40: e101-032-0.10@e101-032-0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc noqueue master br10 state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:d1 brd ff:ff:ff:ff:ff:ff
41: br10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether f4:8e:38:2b:17:6a brd ff:ff:ff:ff:ff:ff
$ ping -c 5 -M do -s 8972 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 8972(9000) bytes of data.
8980 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.577 ms
8980 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.704 ms
8980 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.577 ms
8980 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=0.564 ms
8980 bytes from 192.168.0.4: icmp_seq=5 ttl=64 time=0.566 ms
--- 192.168.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4103ms
rtt min/avg/max/mdev = 0.564/0.597/0.704/0.059 ms
Discussion