前回に引き続き、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円 @ Amazon | 仕様表 |
GS110TP | 8ポートPOE + 2ポートSFP | 合計15.4W | 18,500円 @ Amazon | 仕様表 |
対応スイッチがない場合は、XOR方式でチーミングが可能です。その場合は送信のみ負荷分散となります。
設定手順
事前準備
- コンソールケーブルもしくは無線LAN経由でルーターにアクセスできるようにしておく。
チーミングのメンバーに参加するCPUポート(NIC)を使用しているインターフェースを削除。
bond0の作成
bondingモジュールのインストール
opkg install kmod-bonding
bondingモジュールをカーネル空間にロードし、無事読み込まれているか確認する。
modprobe bonding lsmod | grep bonding
ボンディングデバイス、bond0を作成。
echo '+bond0' > /sys/class/net/bonding_masters ifconfig bond0 down
sysfs経由でチーミングモードを設定し、送信ハッシュポリシーを”Layer3+4モード”に指定。XOR方式を利用する場合はモード番号に”2″を指定する。
echo 4 > /sys/class/net/bond0/bonding/mode echo 'layer3+4' > /sys/class/net/bond0/bonding/xmit_hash_policy
物理NICをbond0に追加
echo '+eth0' > /sys/class/net/bond0/bonding/slaves echo '+eth1' > /sys/class/net/bond0/bonding/slaves
作成したボンディングデバイスを有効化。
ifconfig bond0 up
LACPを利用している場合は、スイッチ上でリンクが作動しているか確認する。
自動起動スクリプト
上記の設定内容は再起動するたびに消えてしまうので、自動起動スクリプトを作成する。
- 以下のスクリプトを/etc/init.d/に作成。
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 }
起動時にスクリプトが自動起動するようにする。
/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
cコメントを残す