bonding インターフェースで設定した項目は、各インターフェースにも同様に反映されるか?

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【3/22開催】テックブログを書こう!アウトプットのススメ
1年で100本ブログを出した新米エンジニアがPV数が伸びなくてもTech Blogを書き続ける理由とは?
https://tech-lab.connpass.com/event/312805/

【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは。サイオステクノロジーの貝野です。

ボンディングインターフェースを使用したネットワーク構成において、ボンディングインターフェースとそれに紐づく各インターフェースに同じ項目が設定されている場合、どちらの値が採用されるのでしょうか。

例えば、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インターフェースのプロトコル
BOOTPROTOIP アドレスの指定に使用するプロトコル (IP アドレスの指定方法)
ONBOOTシステムの起動時 (ネットワークの再起動時も含む) にインターフェースを起動するか
USERCTL一般ユーザによるインターフェースの操作や設定変更を許可するか
NM_CONTROLLEDnmcli による管理を許可するか
MASTERリンクされたボンディングインターフェースの名前
SLAVEボンディングインターフェースによって制御されるか
BONDING_MASTERデバイスがボンディングのマスターデバイスであるか
BONDING_OPTSボンディングのオプション

確認

上記の設定内容のうち、ONBOOTUSERCTLNM_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 0x10
        loop  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 0x10
        loop  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項目のみの解説でしたが、動作への影響は項目によってそれぞれ違います。
ボンディング構成で各インターフェースに同じ項目を設定する際は、事前に十分検証をしてから運用しましょう。

参考情報

アバター画像
About 貝野 友香 67 Articles
OSSよろず相談室でサポートをやっています。時々ライブ配信や勉強会に出ていることもあります。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる