Debian squeezeでBonding (ARP監視編)
手順書を作成するとブログにも上げやすくなる。
むしろ手順書を作成しないとブログにも上げないようにした方がいいのかも。
手順も洗練されてないし、見落としがあるかもしれないし。当たり前かも。
メモ的にエントリ起こすこともあるけどそういう記事を見返したことがあるのかは疑問。(おぼえてない)
手順
手順は以下の通りです。*1
- パッケージ ifenslave-2.6 をインストール
- 設定ファイルを編集する
- /etc/modprobe.d/bonding.conf
- /etc/network/interfaces
- bridgeと組み合わせた例
- bridgeと組み合わせない例
- 補足
- 再起動する
- 確認する
パッケージ ifenslave-2.6 をインストール
Bondingの設定をするには ifenslave-2.6 というパッケージが必要なのでインストールする。
RedHat系だと iputils とかいうパッケージらしいよ。
$ sudo apt-get install ifenslave-2.6
設定ファイルを編集する
/etc/network/interfaces
- 自分の場合、物理環境といっても仮想化環境*2のホスト側とそうでないのがいるので、それぞれbridgeと組み合わせた例とそうでない例を両方載せました。
- 適当に必要な所(「iface bond0 〜」の所だけとか)だけ参考にしてください。
- 192.168.1.0/24なLAN内で以下のような感じです。
- ルータ(以下GW): 192.168.1.1
- 割り当てるIP: 192.168.1.10
bridgeと組み合わせた例
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #auto eth0 #iface eth0 inet static # address 192.168.1.10 # netmask 255.255.255.0 # network 192.168.1.0 # broadcast 192.168.1.255 # gateway 192.168.1.1 # eth0,eth1(0.0.0.0) -> bond0(0.0.0.0) -> br0(192.168.1.10) # Wake-On-LAN auto eth0 iface eth0 inet manual ethernet-wol g auto eth1 iface eth1 inet manual ethernet-wol g # eth0,eth1 -> bond0 auto bond0 iface bond0 inet manual bond_slaves eth0 eth1 bond_mode active-backup bond_miimon 0 bond_primary eth0 bond_arp_interval 3000 bond_arp_ip_target 192.168.1.1 # bond0 -> br0 auto br0 iface br0 inet static bridge_ports bond0 bridge_stp off bridge_fd 0 bridge_maxwait 0 address 192.168.1.10 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 # workaround for the problem that br0 would use lowest MAC address among the enslaved interfaces. # http://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-ports/ post-up ip link set br0 address xx:xx:xx:xx:xx:xx
bridgeと組み合わせない例
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #auto eth0 #iface eth0 inet static # address 192.168.1.10 # netmask 255.255.255.0 # network 192.168.1.0 # broadcast 192.168.1.255 # gateway 192.168.1.1 # eth0,eth1(0.0.0.0) -> bond0(192.168.1.10) # Wake-On-LAN auto eth0 iface eth0 inet manual ethernet-wol g auto eth1 iface eth1 inet manual ethernet-wol g # eth0,eth1 -> bond0 auto bond0 iface bond0 inet static address 192.168.1.10 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 # bonding bond_slaves eth0 eth1 bond_mode active-backup bond_miimon 0 bond_primary eth0 bond_arp_interval 3000 bond_arp_ip_target 192.168.1.1
補足
- ethernet-wol g
- squeeze移行で使える。ethtoolパッケージとか入れてないと使えないかも?
- squeeze以前では「post-up /sbin/ethtool -s $IFACE wol g」「post-down /sbin/ethtool -s $IFACE wol g」を指定する
- cf. WakeOnLan - Debian Wiki
- bond_slaves eth0 eth1
- スレーブの指定
- bond_miimon 0
- 今回はARP監視なので0にします。
- bond_primary eth0
- プライマリの指定
- bond_arp_interval
- bond_mode active-backup
- Bondingのモードについては参考リンクとか見てください(丸投げ)。active-backupが一番使いやすいって「サーバ/インフラを支える技術」に書いてあった。もっと性能を追求したい方はこちら?
- bond_arp_ip_target
再起動する
作業対象が仮想化のゲスト側だったらホスト側を再起動した方がいい。
いや「sudo ifdown -a; sudo ifup -a」でいいのかもしれないけど、一応。
ssh越しに上記のコマンドを打つ場合はセミコロンで繋げて打たないと締め出されます。気を付けましょう。*4
確認する
自分なりのやり方なので他にいい方法があれば教えてください。
- 「cat /proc/net/bonding/bond0」
- モードだけ確認するなら「cat /sys/class/net/bond0/bonding/mode」
- 片方ずつLANケーブルを抜いて切り替わるかテストする
- 作業中のホストからexample.comにpingを打つ
- LAN内の他のホストから作業中のホストにpingを打つ
- 両方の端末をscreenで並べて視認しやすくする
- 以下の手順中、常に1と2のpingが継続することを確認する
- port0のLANケーブルを抜く
- port1をprimaryとして使用中だった場合、ここでは切り替わりが発生しない可能性がある
- port0のLANケーブルを戻す
- port1のLANケーブルを抜く
「kernel: [ 2264.790719] bonding: unable to update mode of bond0 because interface is up.」→balance-rrモードでリンクアップしてしまう問題
/etc/network/interfacesで「pre-up ifup bond0」してる設定がちらほら見られるけど、それだと「kernel: [ 2264.790719] bonding: unable to update mode of bond0 because interface is up.」みたいなエラーが出てデフォルトのbalance-rr(ラウンドロビン)モードで立ち上がってしまう。
なのでpre-upとdownの指定はいらない。*5
上記のようなこともあるので、再起動したあとちゃんと「/proc/net/bonding/bond0」の内容を確認すること。
参考リンク
一部リンクじゃないですが。
- Bonding - Debian Wiki
- http://baalzephon.dyndns.org/tech/index.php?Debian%2FBonding
- http://www.infra.jp/debian/usb_bonding.html
- bonding で複数のNICをまとめて使う - いますぐ実践! Linuxシステム管理 / Vol.160
- /usr/share/doc/ifenslave-2.6/examples/
- いろいろ言い方ありますが。。。ちょっと整理。:びぼうろぐ:So-netブログ
- Bonding,Teaming,Link Aggregation,Port Trunking,EtherChannelはどれも同じような技術を指すらしい?IP MasqueradeといいLinuxの方言(?)はどれも洒落てますね。できれば統一してほしいですが、微妙に違ったり(独自の機能があったり)するんでしょうか。
雑感
参考リンクにも挙げたけど、apt-get install ifenslave-2.6で入る「/usr/share/doc/ifenslave-2.6/examples/」以下も見てみると結構面白い。
Wi-Fiとbondingする例などが書かれてある。
というかこれ俺が前からやりたかったことだ。(上流ルータが死んだらWiMAXに切り替える)
久しぶりにまともな記事になった気がするので、
- 手順書を作成する
- ブログに上げる
のサイクルを今後も回していきたい。
でも二度とやりたくないような気持ちも
自分が引用したのはOSインストール時の全体的な手順書なので、
ブログの記事が個別の手順書として見やすいかも。
もっとちゃんとITSに登録して紐付けたり、どっちも継続的に管理できるように...とかやると投げ出すフラグな気がする。