こんにちは。サイオステクノロジーの貝野です。
ボンディングインターフェースを使用したネットワーク構成において、ボンディングインターフェースとそれに紐づく各インターフェースに同じ項目が設定されている場合、どちらの値が採用されるのでしょうか。
例えば、ONBOOT=yes をボンディング側に設定していれば、各インターフェース側で ONBOOT=no と設定していても一緒に起動します。反対に、ONBOOT=no をボンディング側に設定している場合は、各インターフェース側で ONBOOT=yes を設定していても、起動しません。
この場合、各インターフェース側の設定内容に関わらず、ボンディング側の設定が各インターフェース側に反映されると言えます。
そこで、その他いくつかの項目について、ボンディング側と各インターフェース側に同じ項目が設定されている際の動作について確認してみました。
構成
CentOS7 で、以下のようなネットワーク構成で環境を作成しました。
※今回は、IPv4 による一般的なボンディング構成により動作確認しました。一意の値が入る項目や、その他の関連しない項目は予め削除しています。
/etc/sysconfig/network-script/ifcfg-ens192
DEVICE="ens192" TYPE="Ethernet" BOOTPROTO="dhcp" ONBOOT="yes" USERCTL="no" NM_CONTROLLED="yes" MASTER="bond0" SLAVE="yes"
/etc/sysconfig/network-script/ifcfg-ens224
DEVICE="ens224" TYPE="Ethernet" BOOTPROTO="dhcp" ONBOOT="yes" USERCTL="no" NM_CONTROLLED="yes" MASTER="bond0" SLAVE="yes"
/etc/sysconfig/network-script/ifcfg-bond0
DEVICE="bond0" TYPE="bond" BOOTPROTO="dhcp" ONBOOT="yes" USERCTL="no" NM_CONTROLLED="yes" BONDING_MASTER="yes" BONDING_OPTS="mode=1 primary=eth0 miimon=500"
項目名説明
DEVICE | 物理デバイス名 |
TYPE | インターフェースのプロトコル |
BOOTPROTO | IP アドレスの指定に使用するプロトコル (IP アドレスの指定方法) |
ONBOOT | システムの起動時 (ネットワークの再起動時も含む) にインターフェースを起動するか |
USERCTL | 一般ユーザによるインターフェースの操作や設定変更を許可するか |
NM_CONTROLLED | nmcli による管理を許可するか |
MASTER | リンクされたボンディングインターフェースの名前 |
SLAVE | ボンディングインターフェースによって制御されるか |
BONDING_MASTER | デバイスがボンディングのマスターデバイスであるか |
BONDING_OPTS | ボンディングのオプション |
確認
上記の設定内容のうち、ONBOOT、USERCTL、NM_CONTROLLEDについて、各インターフェースで設定を変更した際の動作を確認しました。
■ ONBOOT
冒頭で「ONBOOT はボンディング側の設定が各インターフェース側に反映される」旨の説明をしましたが、実際にどのような結果になるのか、ifconfig コマンドにて各インターフェースの起動状況を確認しました。
- 【ケース1】ens192、ens224 で ONBOOT=yes、bond0 で ONBOOT=no に設定した場合
ifconfig の結果は以下の通りになります。
# ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:b6:26:ed txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
上記の設定から、ens192 または ens224 のいずれかを ONBOOT=no に設定した場合も、結果は同じでした。
- 【ケース2】bond0 で ONBOOT=yes、ens192、ens224 で ONBOOT=no に設定した場合
ifconfig の結果は以下の通りになります。
# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 10.1.1.101 netmask 255.255.0.0 broadcast 10.1.255.255 inet6 fe80::250:56ff:feb6:935c prefixlen 64 scopeid 0x20 ether 00:50:56:b6:93:5c txqueuelen 1000 (Ethernet) RX packets 133975671 bytes 11951049022 (11.1 GiB) RX errors 0 dropped 4 overruns 0 frame 0 TX packets 178808 bytes 23584844 (22.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens192: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:50:56:b6:93:5c txqueuelen 1000 (Ethernet) RX packets 441 bytes 47579 (46.4 KiB) RX errors 0 dropped 2 overruns 0 frame 0 TX packets 52 bytes 7338 (7.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens224: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:50:56:b6:93:5c txqueuelen 1000 (Ethernet) RX packets 347 bytes 32484 (31.7 KiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 (省略)
上記の設定から、ens192 または ens224 のいずれかを ONBOOT=yes に設定した場合も、結果は同じでした。
■ USERCTL
USERCTL は一般ユーザによるインターフェースの操作を制御します。USERCTL の設定後、ifdown コマンドにて一般ユーザが各インターフェースを停止しようとした際、どのような結果になるのか確認しました。
- 【ケース1】ens192、ens224 で USERCTL=yes、bond0 で USERCTL=no に設定した場合
$ ifdown ens192 (何も表示されず、インタフェースが停止された) $ ifdown ens224 (何も表示されず、インタフェースが停止された) $ ifdown bond0 ユーザーはこのデバイスを制御できません
ifconfig の結果は以下の通りになります。
$ ifconfig bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST> mtu 1500 inet 10.1.1.101 netmask 255.255.0.0 broadcast 10.1.255.255 inet6 fe80::250:56ff:feb6:935c prefixlen 64 scopeid 0x20 ether 56:5e:0d:2d:24:a2 txqueuelen 1000 (Ethernet) RX packets 189993 bytes 17908373 (17.0 MiB) RX errors 0 dropped 3 overruns 0 frame 0 TX packets 834 bytes 115066 (112.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10loop txqueuelen 1000 (Local Loopback) RX packets 46 bytes 7664 (7.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 46 bytes 7664 (7.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:b6:26:ed txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
上記の設定から、ens192 または ens224 のいずれかを USERCTL=no に設定した場合、当該インターフェースのみ ifdown 実行時に「ユーザーはこのデバイスを制御できません」と表示されました。
- 【ケース2】bond0 で USERCTL=yes、ens192、ens224 で USERCTL=no に設定した場合
【ケース1】と同様に、USERCTL=no を設定したインターフェースのみ ifdown 実行時に「ユーザーはこのデバイスを制御できません」と表示されました。
また、上記の設定から、ens192 または ens224 のいずれかを USERCTL=yes に設定した場合、当該インターフェースのみ ifdown が実行できました。
■ NM_CONTROLLED
NM_CONTROLLED を設定すると、NetworkManager (nmcli コマンド) による操作が可能になります。NM_CONTROLLED の設定後、各インターフェースが nmcli コマンドによって管理できる状態であるか確認しました。
- 【ケース1】ens192、ens224 で NM_CONTROLLED=yes、bond0 で NM_CONTROLLED=no に設定した場合
# nmcli … ens192: 切断済み "VMware VMXNET3" 1 接続が利用可能 ethernet (vmxnet3), 00:50:56:B6:93:5C, hw, mtu 1500 ens224: 切断済み "VMware VMXNET3" 1 接続が利用可能 ethernet (vmxnet3), 00:50:56:B6:93:5C, hw, mtu 1500 bond0: 管理無し "bond0" bond, 00:50:56:B6:93:5C, sw, mtu 1500 (省略)
nmcli コマンドによる管理が有効になっている ens192、ens224 は、現在のステータス (上記の例では切断済み) が表示されます。nmcli コマンドによる管理が無効である bond0 は、「管理無し」と表示されます。
また、上記の設定から、ens192 または ens224 のいずれかを NM_CONTROLLED=no に設定した場合、当該インターフェースのステータスは「管理無し」となります。
- 【ケース2】bond0 で NM_CONTROLLED=yes、ens192、ens224 で NM_CONTROLLED=no に設定した場合
【ケース1】と同様に、NM_CONTROLLED=no を設定したインターフェースのみステータスは「管理無し」となります。
また、上記の設定から、ens192 または ens224 のいずれかを NM_CONTROLLED=yes に設定した場合、当該インターフェースのみ現在のステータス (接続済み、切断済みなど) が表示されます。
最後に
ボンディング構成において、各インターフェースに設定した項目がどのように動作に影響するかを確認しました。
今回は 3項目のみの解説でしたが、動作への影響は項目によってそれぞれ違います。
ボンディング構成で各インターフェースに同じ項目を設定する際は、事前に十分検証をしてから運用しましょう。