Linux におけるリンクアグリゲーション(ポートボンディング)

CompTIABeginner
オンラインで実践に進む

はじめに

この実験 (Lab) では、Linux 環境で Link Aggregation(ポートボンディングとも呼ばれます)を実装する方法を学びます。この強力な技術により、複数の物理ネットワークインターフェイスを単一の論理インターフェイスに結合でき、ネットワークスループットの向上と耐障害性の提供が可能になります。ボンディング接続の設定と管理に必要な Linux ネットワーキングコマンドの実践的な経験を積むことができます。

段階的なプロセスに従い、まず ip a コマンドを使用してシステムで利用可能なネットワークインターフェイスを特定します。安全で実践的なデモンストレーションのために、マルチインターフェイス環境をシミュレートするために、2 つの仮想「ダミー」インターフェイス dummy1dummy2 を作成します。次に、新しい仮想ボンディングインターフェイス bond0 を作成し、これらの 2 つのダミーインターフェイスをそれに従属させます。その後、新しく作成された bond0 インターフェイスに静的 IP アドレスを割り当て、通信を可能にします。最後に、設定全体を確認し、アクティブなボンドのステータスをチェックして、正しく機能していることを確認します。

ip a コマンドで利用可能なネットワークインターフェイスを特定する

このステップでは、まず LabEx VM で利用可能なネットワークインターフェイスを特定することから始めます。複数のネットワークインターフェイスを単一のボンディングリンクに結合する前に、まずそれらの名前を知る必要があります。Linux でこのタスクを行うための現代的で推奨されるコマンドは ip a (ip addr show の短縮形) です。

このコマンドは、システム上のすべてのネットワークインターフェイスを、IP アドレス、MAC アドレス、およびオペレーショナルステータスとともに表示します。

まず、ターミナルを開きます。すでに開かれており、~/project ディレクトリにいるはずです。次に、ip a コマンドを実行してすべてのネットワークインターフェイスをリストします。

ip a

いくつかのインターフェイスがリストされた出力が表示されます。いくつかの重要な詳細に注意する必要があります。

  • lo: これはループバックインターフェイスで、システムが自身と通信するための仮想インターフェイスです。ボンディングではこれは無視します。
  • eth0: これはプライマリイーサネットインターフェイスです。ラボ環境への接続を安定させるために、これを使用しません。
  • docker0: これは Docker によって作成された仮想ブリッジです。現在 DOWN 状態であり、この実験には適していません。
  • dummy1, dummy2: これらは、この実験のために追加の 2 つのネットワークカードをシミュレートするために追加した 2 つのダミー仮想インターフェイスです。これらが一緒にボンディングするインターフェイスになります。
  • state UP: これはインターフェイスがアクティブであることを示します。

出力は以下のようになります。次のステップで必要になるため、ダミーインターフェイスの名前 dummy1dummy2 に注意してください。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:00:20:a3 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.188/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159680sec preferred_lft 1892159680sec
    inet6 fe80::216:3eff:fe00:20a3/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:2c:eb:c9:91 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5caf:4ff:fe97:69bd/64 scope link
       valid_lft forever preferred_lft forever
5: dummy2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5caf:4ff:fe97:69be/64 scope link
       valid_lft forever preferred_lft forever

上記の出力から、ボンディング設定に適したインターフェイスとして dummy1dummy2 の 2 つを特定しました。次のステップでは、これらのインターフェイス名を使用して新しいボンディングインターフェイスを作成します。

Bond インターフェイス 'bond0' を作成し有効化する

このステップでは、ネットワークカードのマスターとして機能する論理的な「ボンド」インターフェイスを作成します。これには、ボンディングに必要な Linux カーネルモジュールのロードと、インターフェイス自体の作成およびアクティブ化という 2 つの主要なアクションが必要です。

まず、bonding カーネルモジュールがロードされていることを確認する必要があります。このモジュールには、カーネルがボンディングインターフェイスを管理できるようにするコードが含まれています。modprobe コマンドを使用してロードできます。

sudo modprobe bonding

モジュールが正常にロードされたことを確認するには、ロードされているすべてのカーネルモジュールをリストする lsmod コマンドと、「bonding」をフィルタリングするための grep を使用できます。

lsmod | grep bonding

bonding モジュールが現在使用中であることを示す出力が表示されるはずです。

bonding               196608  0

カーネルの準備ができたので、新しい論理インターフェイスを作成できます。これを bond0 と名付けます。ip link コマンドを使用して、bond タイプで新しい仮想リンクを追加します。

sudo ip link add bond0 type bond

このコマンドはインターフェイスを作成しますが、デフォルトでは「down」状態です。物理ネットワークカードを有効にするのと同様に、アクティブにするために「up」状態にする必要があります。

sudo ip link set dev bond0 up

これで、新しい bond0 インターフェイスが存在し、アクティブであることを確認できます。再度 ip a コマンドを使用しますが、今回はインターフェイス名を指定します。

ip a show bond0

出力には、bond0 インターフェイスが表示され、その状態は DOWN で、まだ IP アドレスは割り当てられていません。これは後続のステップで設定します。

6: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

これで、マスター bond0 インターフェイスの作成と有効化が正常に完了しました。次のステップは、ダミーインターフェイスをスレーブとして追加することです。

インターフェイスを 'bond0' のスレーブとして追加する

このステップでは、以前特定した仮想インターフェイス (dummy1 および dummy2) を bond0 マスターインターフェイスにスレーブ化します。インターフェイスを「スレーブ化」するとは、ボンディングインターフェイスの制御下に置くことを意味します。スレーブ化されると、物理インターフェイスは独自の IP アドレスを必要としなくなります。すべてのトラフィックは bond0 を通じて管理されます。

ダミーインターフェイスを使用するこのアプローチは完全に安全であり、ネットワーク接続を失うリスクなしにボンディングプロセスを学習できます。

まず、dummy1 インターフェイスをボンドに追加します。スレーブとして追加する前に、ダウンさせる必要があります。

sudo ip link set dev dummy1 down
sudo ip link set dev dummy1 master bond0

次に、dummy2 インターフェイスについても同様に行います。

sudo ip link set dev dummy2 down
sudo ip link set dev dummy2 master bond0

次に、ボンドインターフェイスをアップし、IP アドレスを割り当てます。既存の eth0 設定との競合を避けるために、異なるサブネットを使用します。

sudo ip addr add 192.168.100.10/24 dev bond0
sudo ip link set dev bond0 up

これで dummy1dummy2 の両方が bond0 にスレーブ化されたことを確認しましょう。

ip a

出力の dummy1dummy2、および bond0 のエントリを確認します。dummy1dummy2 の両方に、説明に master bond0 と表示され、正常にスレーブ化されたことが確認できます。また、bond0 インターフェイスが UP 状態になり、割り当てた IP アドレスを持っていることに注意してください。

4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
    link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::2847:4ff:fe07:1aea/64 scope link
       valid_lft forever preferred_lft forever

インターフェイスがスレーブとして機能するようになったので、次のステップは bond0 インターフェイス自体のネットワーク設定を構成することです。

Bond インターフェイスの接続性をテストする

このステップでは、ボンドインターフェイスが正しく機能していることを確認するためにテストします。2 つのダミーインターフェイスを持つ機能的なボンドを作成し、IP アドレスを割り当てたので、基本的な機能性をテストできます。

まず、ボンドインターフェイスがアップしており、正しい IP アドレスを持っていることを確認しましょう。

ip a show bond0

割り当てた IP アドレス (192.168.100.10/24) を持つ bond0 インターフェイスが表示され、インターフェイスの状態は UP と表示されるはずです。

6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 scope global bond0
       valid_lft forever preferred_lft forever

次に、インターフェイスが応答していることを確認するために、ボンドインターフェイス自身の IP アドレスに ping を実行してテストしましょう。

ping -c 3 192.168.100.10

成功した ping レスポンスが表示され、ボンドインターフェイスが機能していることを確認できるはずです。

また、スレーブインターフェイスがボンドに正しくアタッチされていることも確認しましょう。

ip a | grep "master bond0"

このコマンドは、bond0 にスレーブ化されているインターフェイスを表示します。dummy1dummy2 の両方がリストされているはずです。

4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000

さらに確認するために、ボンドインターフェイスがルーティングテーブルに表示されているか確認しましょう。

ip route | grep bond0

bond0 インターフェイスを経由する 192.168.100.0/24 ネットワークのルーティングエントリが表示されるはずです。

学習ノート: このセットアップは、ボンディングのコアコンセプトを完全に実証しています。複数の物理インターフェイスを持つ本番環境では、選択したボンディングモードに基づいて、実際のネットワークトラフィックのロードバランシングと冗長性が確認できます。

cat /proc/net/bonding/bond0 で Bond ステータスを確認する

この最終ステップでは、ボンドのステータスファイルを直接検査することで、最も詳細な検証を行います。Linux カーネルは、/proc ファイルシステム内の特別なファイルを通じて、各ボンディングインターフェイスに関するリアルタイム情報を提供します。bond0 という名前のインターフェイスの場合、このファイルは /proc/net/bonding/bond0 にあります。

cat コマンドを使用してこのファイルを表示すると、ボンドのモード、スレーブインターフェイスのステータス、トラフィックカウンターなど、ボンドの設定に関する包括的な概要が得られます。

ターミナルで、次のコマンドを実行します。

cat /proc/net/bonding/bond0

これにより詳細なレポートが表示されます。出力は以下に似たものになり、2 つのスレーブインターフェイスが表示されます。

Ethernet Channel Bonding Driver: vX.X.X (Month Day, Year)

Bonding Mode: load balancing (round-robin)
Primary Slave: None
Currently Active Slave: dummy1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: dummy1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2a:47:04:07:1a:ea
Slave queue ID: 0

Slave Interface: dummy2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2e:5f:12:08:3a:eb
Slave queue ID: 0

この出力の重要な情報を分解しましょう。

  • Bonding Mode: トラフィックを分散するために使用されるポリシーを示します。指定しなかったため、デフォルトで load balancing (round-robin) になり、利用可能なスレーブ間で順序通りにパケットを送信します。
  • MII Status: ボンディングされたリンクの全体的なステータスを示します。up はアクティブであることを意味します。
  • Slave Interface: dummy1dummy2 の両方のセクションが表示されます。どちらも MII Statusup と表示されており、アクティブでボンドの一部であることを確認できます。SpeedDuplex は、ダミーインターフェイスの場合 Unknown またはデフォルト値として表示される場合があります。

おめでとうございます!Linux 上でボンディングされたネットワークインターフェイスを正常に設定し、2 つのダミーインターフェイスを単一の論理インターフェイスに結合しました。

まとめ

この実験では、Linux 環境におけるリンクアグリゲーション(ポートボンディング)の実装に関する基本的な概念を学びました。手順は、ip a コマンドを使用して、事前に設定された 2 つの仮想インターフェイス dummy1 および dummy2 を含む、利用可能なネットワークインターフェイスを特定することから始まりました。特定の後、bond0 という名前の新しい仮想ボンドインターフェイスを作成し、それを有効化し、次に両方のダミーインターフェイスをスレーブとして追加して、完全なボンディングプロセスを実証しました。

このアプローチにより、接続損失のリスクなしに、リモート環境でボンディングの概念を学ぶための、完全に安全で効果的な方法が提供されました。

主な学習ポイントは以下の通りです。

  • マルチインターフェイス環境をシミュレートするための 2 つのダミーインターフェイスの作成。
  • bonding カーネルモジュールのロード。
  • ネットワークボンディングにおけるマスター・スレーブ関係の理解。
  • 複数のインターフェイスを単一のボンドマスターにスレーブ化すること。
  • ボンドインターフェイスへの安全な IP アドレスの割り当て。
  • 最終的なボンド構成とステータスの検証。

実験は、cat /proc/net/bonding/bond0 を使用してボンドの詳細ステータスを調べることで締めくくられました。これにより、ボンドの構成、モード、およびすべてのスレーブインターフェイスのステータスに関する包括的な情報が得られます。この検証ステップは、ボンディング設定が意図したとおりに機能していることを確認するために、実際のシナリオで不可欠です。