ipコマンドでインターフェイスをまとめてリンクダウン
はじめに
ipコマンドはインターフェイスをリンクアップさせたり、リンクダウンさせたりできます。
ip link set eth0 up
ip link set ens162 down
1つのホストにインターフェイスが複数ある時とか、network namespaceによってインターフェイス名がちょっとずつ違うときにインターフェイス名を一個ずつ指定してコマンドを打つの面倒じゃないですか?
あとは仮想的にノード障害を起こしたいときに管理用NICを除いてリンクダウンさせたいとか思ったことないですか?
インターフェイスのグループ番号
ip linkコマンドはグループ名、またはグループ番号でインターフェイスを複数指定することが可能です。
例えば以下のようにインターフェイスが5個(lo 1個とveth 4個)あるときを考えます。
# ip netns exec nihombashi ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: g12@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 06:ab:73:17:29:3c brd ff:ff:ff:ff:ff:ff link-netns mitsukoshimae
3: g10@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ca:d9:7e:89:e8:b4 brd ff:ff:ff:ff:ff:ff link-netns kyobashi
4: t9@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 5a:4b:a3:17:26:87 brd ff:ff:ff:ff:ff:ff link-netns otemachi
5: t11@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 86:f5:6b:ce:f8:12 brd ff:ff:ff:ff:ff:ff link-netns kayabacho
すべてのインターフェイスをダウンさせるには次のコマンドを打ちます。めんどくさいですよね。
# ip netns exec nihombashi ip link set lo down
# ip netns exec nihombashi ip link set g12 down
# ip netns exec nihombashi ip link set g10 down
# ip netns exec nihombashi ip link set t9 down
# ip netns exec nihombashi ip link set t11 down
先ほどのip link showの結果をよく見ると「group default」という文字列が入っています。
デバイス名の代わりに「group ○○」とすることでインターフェイスをまとめて指定できます。
特にグループ名を付けていないインターフェイスは「default」という名前のグループ(グループ番号は0)に所属しています。
以下のコマンド1行だけで5つのインターフェイスをまとめてリンクダウンさせることができます。
# ip netns exec nihombashi ip link set group default down
グループ名「default」の代わりにグループ番号「0」を指定しても同じです。
# ip netns exec nihombashi ip link set group 0 down
グループ名とグループ番号のマッピングは/etc/iproute2/groupファイルにあります。
# device group names
0 default
グループ番号付与
例えば、g12というインターフェイスが管理用(自分がこのインターフェイス経由でSSHしている)だとすると、以下のように、それ以外のインターフェイスをグループ100に入れてあげて、
# ip netns exec nihombashi ip link set dev g10 group 100
# ip netns exec nihombashi ip link set dev t9 group 100
# ip netns exec nihombashi ip link set dev t11 group 100
以下のようにgroup 100を指定してリンクダウンさせると管理用NIC以外をまとめて落とすことができます。
# ip netns exec nihombashi ip link set group 100 down
結果はこんな感じ。
# ip netns exec nihombashi ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: g12@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 06:ab:73:17:29:3c brd ff:ff:ff:ff:ff:ff link-netns mitsukoshimae
3: g10@if2: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group 100 qlen 1000
link/ether ca:d9:7e:89:e8:b4 brd ff:ff:ff:ff:ff:ff link-netns kyobashi
4: t9@if5: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group 100 qlen 1000
link/ether 5a:4b:a3:17:26:87 brd ff:ff:ff:ff:ff:ff link-netns otemachi
5: t11@if4: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group 100 qlen 1000
link/ether 86:f5:6b:ce:f8:12 brd ff:ff:ff:ff:ff:ff link-netns kayabacho
ちょっと話が脱線しますが、リンク状態だけを見たいならipコマンドの引数に-brをつけることで出力が簡潔(brief)になります。
# ip netns exec nihombashi ip -br link show
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
g12@if3 UP 06:ab:73:17:29:3c <BROADCAST,MULTICAST,UP,LOWER_UP>
g10@if2 DOWN ca:d9:7e:89:e8:b4 <BROADCAST,MULTICAST>
t9@if5 DOWN 5a:4b:a3:17:26:87 <BROADCAST,MULTICAST,UP,LOWER_UP>
t11@if4 DOWN 86:f5:6b:ce:f8:12 <BROADCAST,MULTICAST,UP,LOWER_UP>
グループ100に対応するグループ名を決めてあげて、/etc/iproute2/groupファイルにグループ名と番号のマッピングを書いてあげてもいいのですが、今回のように使うだけなら番号だけで十分かと思います。
消し方
「ip link set dev ~ group ~」コマンドで付けた番号は再起動するとdefault(0)に戻ります。
再起動せずに戻すには「ip link set dev ~ group 0」でOKです。
Discussion