BLOG

将来の夢はおもしろお兄さんです。

Linux で NIC の bonding + bridge

NIC 買いました

インテル PRO/1000 PT デュアルポート サーバ・アダプタ EXPI9402PT

これをとりあえず4枚。 中古で1枚辺り4000円くらいでした。

NIC 取り付けました

もともと Dual Port なサーバーにも取り付けたので、1台のサーバーからLANケーブルが4本生えてきて激しくL2スイッチのポートを占領してきます。 つい先日16ポートのL2スイッチを買ったばかりなのに、もうポートが埋まってしまいました。

1台のサーバーに複数の LAN ケーブルをさせるようになった僕たちは

bonding を試してみるしかない。

よしだ VPS

ホストマシンとして動かすために、bonding したインターフェースをブリッジのポートとして使いたい。

やってみた

Ubuntu 12.04 LTS 編

bonding をロード

modprobe bonding
echo "bonding" >> /etc/modules

インターフェースの設定

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
    bond-master bond0

auto eth1
iface eth1 inet manual
    bond-master bond0

auto eth2
iface eth2 inet manual
    bond-master bond0

auto eth3
iface eth3 inet manual
    bond-master bond0

auto bond0
iface bond0 inet manual
    bond-slaves none
    bond-miimon 100
    bond-mode 1

auto br0
iface br0 inet static
    bridge_ports bond0

    address 192.168.1.100
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-nameservers 192.168.1.10

    pre-up ifup bond0
    post-down ifdown bond0

ネットワーク再起動

$ sudo /etc/init.d/networking restart

Scientific Linux 6.3編

Redhat Enterprise Linux クローンなので、 Redhat Enterprise Linux やそのクローンなら変わらないと思う。 事実、 Redhat Enterprise Linux のドキュメント読んで設定した。

bonding をロード

$ cat /etc/modprobe.d/bonding.conf
alias bond0 bonding

インターフェースの設定

$ cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100"
BRIDGE=br0
$
$ cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=192.168.1.200
PREFIX=24
GATEWAY=192.168.1.1
$
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:15:17:XX:YY:ZZ
MASTER=bond0
SLAVE=yes

/etc/sysconfig/network-scripts/ifcfg-eth1 以降は、1行めと4行目が違うだけ。

ネットワーク再起動

$ /etc/rc.d/network restart

結果

ifconfig

$ ifconfig
bond0     Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:225061 errors:0 dropped:53618 overruns:0 frame:0
          TX packets:83983 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:61269544 (61.2 MB)  TX bytes:16177865 (16.1 MB)

br0       Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:78075 errors:0 dropped:0 overruns:0 frame:0
          TX packets:61643 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10268843 (10.2 MB)  TX bytes:10584226 (10.5 MB)

eth0      Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:162525 errors:0 dropped:228 overruns:0 frame:0
          TX packets:79854 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45562722 (45.5 MB)  TX bytes:15420797 (15.4 MB)
          Interrupt:16 Memory:fbde0000-fbe00000

eth1      Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          UP BROADCAST RUNNING PROMISC SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:55268 errors:0 dropped:46114 overruns:0 frame:0
          TX packets:4129 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15011606 (15.0 MB)  TX bytes:757068 (757.0 KB)
          Interrupt:17 Memory:fbee0000-fbf00000

eth2      Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3636 errors:0 dropped:3640 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:347749 (347.7 KB)  TX bytes:0 (0.0 B)
          Interrupt:18 Memory:fbfe0000-fc000000

eth3      Link encap:Ethernet  HWaddr 00:15:17:XX:YY:ZZ
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3632 errors:0 dropped:3636 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:347467 (347.4 KB)  TX bytes:0 (0.0 B)
          Interrupt:19 Memory:fbfa0000-fbfc0000

ping 編

  1. 適当なマシンから192.168.1.100 に向けて ping を打つ
  2. 192.168.1.100 のマシンに繋がるLANケーブルを1本思い切って引っこ抜く
  3. こいつ、LANケーブル抜いても ping 返ってくるぞ……!!

トラブルシューティング的な

Ubuntu 12.04 LTS 編

/etc/network/interfaces の順番大切!!

順番間違うと、ネットワーク再起動しても、bonding インターフェースに ethernet port が attach しなくて使えなかったりする。 pre-up とか post-up とかのフックを設定してみたけれど、自分の場合うまく設定出来ず諦めたので、順番大切!!

下手すると、bond0 がスレーブが立ち上がってくるのを待っていて、スレーブはマスターが立ち上がってくるのを待つような、デッドロック状態に陥る。

ネットワーク再起動時のデッドロック

設定を変えた後、前述のマスターとスレーブが互いに待ち合うデッドロックに陥る場合がある。

そういう時は、手動でインターフェースを立ち上がらせてやる。 その時に、ifup コマンドを使うと、設定を読みに行って結局デッドロックに陥るので、ifconfig ethX up みたいな感じで、ただ単純にインターフェースを立ち上がらせると良い。

最後に

トライアンドエラーとネット上の情報をかき集めてやってるので、用語とかが正しいのかよく分からない。 間違ってたら指摘して欲しい。 でも、なんとなく雰囲気は伝わると思う。