2006.10.28 ng_fec(4)とEtherChannel with Cisco Catalyst 2940 今日はリンクアグリゲーション(Link Aggregation/リンク集約)に挑戦 してみます。というのもヤクオフで Cisco Catalyst 2940-8TT-S を購 入したことから始まります。買った以上は挑戦しないとアカンでしょ。 ということで:-)。 今回は下記のようなネットワークでの検証を行いました。 | +--------+--------+ | Catalyst 2940 | +---+---------+---+ | fa0/8 | fa0/7 | | | rl0 | ed1 +---+---------+---+ | FreeBSD 6.2-PRE | +-----------------+ 色々と罠があるのでまー注意ってことで。 1. FreeBSD で EtherChannel できます(注意)。 ng_fec(4) ドライバ使うと EtherChannel できます。いくつか制限 があるのですんげー注意。マニュアルに書いとけよってあたり(ry。 a. 2 または 4 ポート必要。 1 ポートないしは 3 ポートまたは 5 以上のポートで EtherChannel できません(ng_fec(4) の仕様)。マニュアルに書いてないけど:-)。 3, 5 ポートで…ってのは意味わからないけど, 1 ポートの実験が できないのが残念なところ。4 ポート用意するのはまぁ現実的で ないねぇ。。ってことで 2 ポートで使おう! b. link status が取れる NIC が必要。 リンクの生き死にを link status で取る必要があるので, if_ed(4) のように古い NIC で, link status が取れない場合は, 使用でき たとしても使われません(故障扱い)。ifconfig で status: active とか status: no carrier が出る NIC が必要です。 c. 簡単に設定できない。 今 /etc/rc.conf で設定すると使える技を検証中です。とりあえず ngctl(8) 使ってしこしこ設定します:-)。 d. PAgP も LACP も無い。 どっちのプロトコルも喋らないし受け取らないので, 動的なリンク アグリゲーションはできないです。これは対抗のスイッチの設定に も絡んでくる話なので注意。 e. 今回ロードバランス等の検証を行わず。 ping 通ってやったーって程度の検証。検証に使った ed1 (if_ed) が癌過ぎてそこまで検証できなかったです。b 項の話の繰り返しに なりますが, link status 見て障害判断してます。中途半端に生き てる(link up してるけど通信できないなど)と泣けるかも。 f. そうそう。MAC モードで。 ng_fec(4) のマニュアル見ると最後に set_mode_inet してるけど おそらく L3 switch (Catalyst 35x0 等)の設定と思われ。確認し てないけど, そのあたり気にしておかないと…ということで。 g. 手順的には以下の通り。 # kldload ng_fec # ngctl mkpeer fec dummy fec # ngctl msg fec0: 'add_iface "rl0"' # ngctl msg fec0: 'add_iface "ed1"' h. OS のバージョン すっかり忘れたけど, いちおう 5.0 以降で用意されてますが, MFC されて 4 系でも使えます。おそらくは 4 系末期以降で 使える話だとは思いますが確認していません。 2. Catalyst 2940 設定します。 手順的には以下の通り。 Switch> enable Switch# conf t Switch(config)# interface fa0/7 Switch(config-if)# channel-group 1 mode on Switch(config-if)# exit Switch(config)# interface fa0/8 Switch(config-if)# channel-group 1 mode on Switch(config-if)# exit Switch(config)# exit Switch# a. Cisco の設定例を見ると switchport mode trunk してるけど 状況踏まえて使おうね。ってことで。今回は Catalyst 2940 で完結してるからこれで終わりだけど, Catalyst 2 台にで複 雑なネットワーク/VLAN組んでるならそれなりに設定しないと あかんでしょう。と思われ。 b. channel-group のモードは on で(プロトコル無し)。 先にも書いたけど, FreeBSD 側では PAgP も LACP も喋らない し受け取らないので, on で設定しておく。いくつかの例では 説明なしに desirable 設定してるけど, 理解した上で使おう ねってことで(なんとなく私が勘違い野郎してるような気がし ないでもないけど)。そのあたりは参考文献を見てくれると嬉 しい。まーあれだ。とどつまり, auto-desirable, desirable-desirable, on-on の 3 つの組み合わせでしかダ メってことで。 c. 趣味の問題だけど…。 Spanning Tree 使わないので私は no spanning-tree vlan 1-4094 してるけど, 今回の設定で影響は無いです。まぁいくつかの例 でも書いてないしね。大丈夫だとは思ったけど…:-)。 d. とりあえず下記のような結果になる。 Switch# show etherchannel Channel-group listing: ---------------------- Group: 1 ---------- Group state = L2 Ports: 2 Maxports = 8 Port-channels: 1 Max Port-channels = 1 Protocol: - e. マニュアルにも書いてあるけど, リンクアグリゲーションする 場合の通信条件を一致させておかないといけない。とりあえず わかってるところで auto negotiation, 100Base-TX/Full, 10Base-T/Half や 所属 VLAN/トランキング など。 あとは ifconfig fec0 up とか dhclient fec0 して通信すると ok と。 ifconfig fec0 up する時に add_iface で登録した NIC の link status をチェック(UP して)するので, NIC の方は特に設定しなくても問題あ りません。 逆に NIC の設定がしてあった後の fec0 の挙動は確認していません:-)。 あと定期的(hz ってソースに書いてあるから 1 秒に 1 回かな)に link status チェックしています。 将来的な話になりますが(現時点での 7-current でも機能しない), 下 記のように /etc/rc.conf を設定して使えるようにしたいですね。現在 手もとで検証中です。 # NOT YET interfaces="fec0" fecconfig_fec0="fxp0 fxp1" ifconfig_fec0="DHCP" # NOT YET 参考文献: [1] http://www.cisco.com/support/ja/index/Products/Catalyst_2940_Series_Swit_4334.html [2] http://www.cisco.com/japanese/warp/public/3/jp/service/tac/473/131-j.shtml [3] http://www.n-study.com/kyo/archives/2006/02/post_23.html [4] ng_fec(4) Written by 重村法克