もし以降の情報に不正確な部分があったり、他にも提案があったら、 どうか私に知らせてください。 Zebra は 石黒邦宏、Toshiaki Takada, Yasuhiro Ohara によって書かれた 偉大な動的ルーティングソフトウェアです。 Zebra を使うと、OSPF の設定は速やかでシンプルになりますが、 しかしその裏には、特殊な用途に向けた多くのパラメータがあるのです。 OSPF は Open Shortest Path First (最短経路を先に開く) を表しています。 その基本的な機能としては:
ネットワークは area によってグループ化され、 それぞれは area 0 と名付けられた バックボーン area によって接続されます。 すべてのトラフィックは area 0 を通り、 area 0 のすべてのルータは、その他の area すべてに対する経路情報を持っています。
経路情報は、例えば RIP に比べて、非常に速く伝播します。
ブロードキャストではなくマルチキャストを使うので、 経路情報には興味がないであろう他のホストをこの情報で溢れさせることはなく、 ネットワークのオーバーヘッドが減少します。 また 内部ルータ (ひとつの area に属するインターフェースしか持っていないルータ) は他の area の経路情報を持つことがありません。 複数の別々の area に属するインターフェースを持っているルータは area 境界ルータ と呼ばれ、 接続している area に関するトポロジー情報を保持します。
OSPF は Dijkstra の Shortest Path First algorithm を基にしており、これは他のルーティングアルゴリズムに比べ高価です。 しかし実際には、最短経路は各 area の内部でのみ計算されますので、 それほどは悪くありません。 また中小サイズのネットワークではこれは問題にならないでしょう。 気づくこともないかもしれません。
OSPF はネットワークとインターフェースの特殊な特性 (バンド幅、断線状態、価格など) も考慮します。
OSPF はオープンなプロトコルで、Zebra は GPL ソフトウェアです。 これは独占的なソフトウェアやプロトコルに対して、 明らかな優位点です。
CONFIG_NETLINK_DEV と CONFIG_IP_MULTICAST を組み込む必要があります (他に必要とされるものは、著者はちゃんと理解していません)。
お好みのパッケージマネージャか、 zebra.org から入手しましょう。
このようなネットワークを例に取りましょう:
---------------------------------------------------- | 192.168.0.0/24 | | | | Area 0 100BaseTX Switched | | Backbone Ethernet | ---------------------------------------------------- | | | | | | | | |eth1 |eth1 |eth0 | |100BaseTX |100BaseTX |100BaseTX |100BaseTX |.1 |.2 |.253 | --------- ------------ ----------- ---------------- |R Omega| |R Atlantis| |R Legolas| |R Frodo | --------- ------------ ----------- ---------------- |eth0 |eth0 | | | | | | | | |2MbDSL/ATM |100BaseTX |10BaseT |10BaseT |10BaseT ------------ ------------------------------------ ------------------------------- | Internet | | 172.17.0.0/16 Area 1 | | 192.168.1.0/24 wlan Area 2| ------------ | Student network (dorm) | | barcelonawireless | ------------------------------------ ------------------------------- |
hostname omega password xxx enable password xxx ! ! Interface's description. ! !interface lo ! description test of desc. ! interface eth1 multicast ! ! Static default route ! ip route 0.0.0.0/0 212.170.21.129 ! log file /var/log/zebra/zebra.log |
zebra=yes ospfd=yes |
hostname omega password xxx enable password xxx ! router ospf network 192.168.0.0/24 area 0 network 172.17.0.0/16 area 1 ! ! log stdout log file /var/log/zebra/ospfd.log |
では Zebra を実行します。 手動で "zebra -d" とタイプするか、"/etc/init.d/zebra start" のようなスクリプトを使います。 起動したら ospfd のログを注意深く監視しましょう。 次のような内容が現れるはずです。
2002/12/13 22:46:24 OSPF: interface 192.168.0.1 join AllSPFRouters Multicast group. 2002/12/13 22:46:34 OSPF: SMUX_CLOSE with reason: 5 2002/12/13 22:46:44 OSPF: SMUX_CLOSE with reason: 5 2002/12/13 22:46:54 OSPF: SMUX_CLOSE with reason: 5 2002/12/13 22:47:04 OSPF: SMUX_CLOSE with reason: 5 2002/12/13 22:47:04 OSPF: DR-Election[1st]: Backup 192.168.0.1 2002/12/13 22:47:04 OSPF: DR-Election[1st]: DR 192.168.0.1 2002/12/13 22:47:04 OSPF: DR-Election[2nd]: Backup 0.0.0.0 2002/12/13 22:47:04 OSPF: DR-Election[2nd]: DR 192.168.0.1 2002/12/13 22:47:04 OSPF: interface 192.168.0.1 join AllDRouters Multicast group. 2002/12/13 22:47:06 OSPF: DR-Election[1st]: Backup 192.168.0.2 2002/12/13 22:47:06 OSPF: DR-Election[1st]: DR 192.168.0.1 2002/12/13 22:47:06 OSPF: Packet[DD]: Negotiation done (Slave). 2002/12/13 22:47:06 OSPF: nsm_change_status(): scheduling new router-LSA origination 2002/12/13 22:47:11 OSPF: ospf_intra_add_router: Start |
zebra や ospfd インターフェースとは、次のようなコマンドで対話できます。
$ telnet localhost zebra $ telnet localhost ospfd |
root@atlantis:~# telnet localhost zebra Trying 127.0.0.1... Connected to atlantis. Escape character is '^]'. Hello, this is zebra (version 0.92a). Copyright 1996-2001 Kunihiro Ishiguro. User Access Verification Password: atlantis> show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, B - BGP, > - selected route, * - FIB route K>* 0.0.0.0/0 via 192.168.0.1, eth1 C>* 127.0.0.0/8 is directly connected, lo O 172.17.0.0/16 [110/10] is directly connected, eth0, 06:21:53 C>* 172.17.0.0/16 is directly connected, eth0 O 192.168.0.0/24 [110/10] is directly connected, eth1, 06:21:53 C>* 192.168.0.0/24 is directly connected, eth1 atlantis> show ip ospf border-routers ============ OSPF router routing table ============= R 192.168.0.253 [10] area: (0.0.0.0), ABR via 192.168.0.253, eth1 [10] area: (0.0.0.1), ABR via 172.17.0.2, eth0 |
root@omega:~# ip route 212.170.21.128/26 dev eth0 proto kernel scope link src 212.170.21.172 192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.1 172.17.0.0/16 via 192.168.0.2 dev eth1 proto zebra metric 20 default via 212.170.21.129 dev eth0 proto zebra root@omega:~# |
ヒント: OSPF パケットをキャプチャして解析するには次が使えます:
tcpdump -i eth1 ip[9] == 89 |
OSPF には、特に大きなネットワーク向けに、 調整できるパラメータがたくさんあります。この howto をさらに拡充できれば、 OSPF のファインチューニングの方法論を示せると思います。