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