17.1. Zebra による OSPF の設定

もし以降の情報に不正確な部分があったり、他にも提案があったら、 どうかに知らせてください。 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 に関するトポロジー情報を保持します。

CPU 負荷が高い

OSPF は Dijkstra の Shortest Path First algorithm を基にしており、これは他のルーティングアルゴリズムに比べ高価です。 しかし実際には、最短経路は各 area の内部でのみ計算されますので、 それほどは悪くありません。 また中小サイズのネットワークではこれは問題にならないでしょう。 気づくこともないかもしれません。

接続状態

OSPF はネットワークとインターフェースの特殊な特性 (バンド幅、断線状態、価格など) も考慮します。

オープンなプロトコルと GPL のソフトウェア

OSPF はオープンなプロトコルで、Zebra は GPL ソフトウェアです。 これは独占的なソフトウェアやプロトコルに対して、 明らかな優位点です。

17.1.1. 必要条件

17.1.2. Zebra の設定

このようなネットワークを例に取りましょう:
----------------------------------------------------
| 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     |
               ------------------------------------       -------------------------------
			
この図に驚かないでください。 zebra はほとんどを自動的に処理してくれますので、 これらの経路すべてを設定するのも簡単です。 これらの経路を毎日維持するのは苦痛を伴う作業です。 把握しておくべき最も重要な点は、ネットワークのトポロジーです。 また area 0 は最も重要な area なので、細心の注意を払ってください。 まず zebra.conf を要求にあわせて編集し、zebra を設定します。
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
			
Debian では、/etc/zebra/daemons も編集して、 ブート時に起動するように設定する必要もありました。
zebra=yes
ospfd=yes
			
次に、まだ IPv4 を使っているなら ospfd.conf を、 IPv6 なら ospf6d.conf を編集します。私の ospfd.conf は次のような感じです:
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
			
ここでは我々のネットワークトポロジーを ospf に教えています。

17.1.3. Zebra を実行する

では 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
			
SMUX_CLOSE メッセージは SNMP 関連のものなので、いまは無視しましょう。 192.168.0.1 が Designated ルータ で、 192.168.0.2 が バックアップ Designated ルータ となっていることがわかります。

zebra や ospfd インターフェースとは、次のようなコマンドで対話できます。
$ telnet localhost zebra
$ telnet localhost ospfd
			
経路がどのように伝播しているか見てみましょう。 zebra にログインして次を入力します:
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
			
あるいは直接 iproute を使って:
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:~# 
			
このように zebra の経路をみることができます。 以前には存在していなかったものです。 zebra と ospfd を起動して数秒後には経路が現れているのを見るのは、 とても気分のいいものです。他のホストへの接続状態は ping で確認できます。 zebra は自動的にルーティングを行いますから、 単に他のルータをネットワークに加え、zebra を設定すれば。どうです!

ヒント: OSPF パケットをキャプチャして解析するには次が使えます:
tcpdump -i eth1 ip[9] == 89
			
OSPF の ip プロトコル番号は 89 で、 プロトコルフィールドは ip ヘッダの第 9 オクテットです。

OSPF には、特に大きなネットワーク向けに、 調整できるパラメータがたくさんあります。この howto をさらに拡充できれば、 OSPF のファインチューニングの方法論を示せると思います。