Design a site like this with WordPress.com
Get started

OpenWrt/LEDEでリンクアグリゲーション/チーミング設定

前回に引き続き、OpenWrtをインストールしたLinksys製ルーター、WRT3200ACMにLACP(802.3ad)を利用したリンクアグリゲーションをセットアップしました。OpenWrtではifenslaveが提供されないためsysfsを経由して設定を行います。

前提条件

ルーター側

OpenWrt導入済みで、CPUポートを2つ以上搭載したルーターが対象です。ルーターに物理ポートが複数あっても、それぞれのポートが異なるVLANに割り振られているだけで、CPUポートは一つの場合があります。初期状態の実機でifconfigコマンドをした際に、eth0.1やeth0.2と表示される場合はそのパターンが多いです。

インフラ(スイッチ)側

LACPを利用するには接続するスイッチがLACPに対応していて、かつスイッチ上でポートがLACPに割り当てられてる必要があります。個人(ホームラボ)向けスイッチとにしてはNetGearのスマートスイッチシリーズが比較的安価でおすすめです。

型番 ポート数 POE 価格
GS108T 8ポート 非対応 10,324円 @ [nl url=’https://amzn.to/2GrCqWS’%5DAmazon%5B/nl%5D [nl url=’https://www.netgear.jp/products/details/GS108T.html#tab-%E4%BB%95%E6%A7%98′%5D仕様表%5B/nl%5D
GS110TP 8ポートPOE + 2ポートSFP 合計15.4W 18,500円 @ [nl url=’https://amzn.to/2uAUPiK’%5DAmazon%5B/nl%5D [nl url=’https://www.netgear.jp/products/details/GS110TP.html#tab-%E4%BB%95%E6%A7%98′%5D仕様表%5B/nl%5D

対応スイッチがない場合は、XOR方式でチーミングが可能です。その場合は送信のみ負荷分散となります。

設定手順

事前準備

  1. コンソールケーブルもしくは無線LAN経由でルーターにアクセスできるようにしておく。
  2. チーミングのメンバーに参加するCPUポート(NIC)を使用しているインターフェースを削除。

bond0の作成

  1. bondingモジュールのインストール
    1
    opkg install kmod-bonding
  2. bondingモジュールをカーネル空間にロードし、無事読み込まれているか確認する。
    1
    2
    modprobe bonding
    lsmod | grep bonding
  3. ボンディングデバイス、bond0を作成。
    1
    2
    echo '+bond0' > /sys/class/net/bonding_masters
    ifconfig bond0 down
  4. sysfs経由でチーミングモードを設定し、送信ハッシュポリシーを”Layer3+4モード”に指定。XOR方式を利用する場合はモード番号に”2″を指定する。
    1
    2
    echo 4 > /sys/class/net/bond0/bonding/mode
    echo 'layer3+4' > /sys/class/net/bond0/bonding/xmit_hash_policy
  5. 物理NICをbond0に追加
    1
    2
    echo '+eth0' > /sys/class/net/bond0/bonding/slaves
    echo '+eth1' > /sys/class/net/bond0/bonding/slaves
  6. 作成したボンディングデバイスを有効化。
    1
    ifconfig bond0 up
  7. 必要に応じてLEDEからインターフェースを作成する。
  8. LACPを利用している場合は、スイッチ上でリンクが作動しているか確認する。

自動起動スクリプト

上記の設定内容は再起動するたびに消えてしまうので、自動起動スクリプトを作成する。

  1. 以下のスクリプトを/etc/init.d/に作成。
    /etc/init.d/bonding
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    start() {
    echo '+bond0' > /sys/class/net/bonding_masters
    ifconfig bond0 down
    echo 4 > /sys/class/net/bond0/bonding/mode
    echo 'layer3+4' > /sys/class/net/bond0/bonding/xmit_hash_policy
    echo '+eth0' > /sys/class/net/bond0/bonding/slaves
    echo '+eth1' > /sys/class/net/bond0/bonding/slaves
    ifconfig bond0 up
    }
     
     
    stop() {
    ifconfig bond0 down
    echo '-bond0' > /sys/class/net/bonding_masters
    }
  2. 起動時にスクリプトが自動起動するようにする。
    1
    /etc/init.d/bonding enable

再起動後にbond0が自動で作成され有効化されれば、設定は正しく行われています。

参考URL

https://www.kernel.org/doc/Documentation/networking/bonding.txt
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-using_channel_bonding

Advertisement

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Create a website or blog at WordPress.com

%d bloggers like this: