| 確認 |
OSPFでは,HelloパケットをほかのOSPFルーター(ネイバー)にマルチキャストで送ります。
でも,フレームリレーのようなネットワークでは,ブロードキャストやマルチキャストは使えません。
そこで,フレームリレーでOSPFを動作させる場合には,一工夫必要になります。
●OSPFのネットワーク・タイプとは?
OSPFでは,インタフェースで動作するレイヤー2プロトコルによって「ネットワーク・タイプ」というものが決まります。
タイプは以下の5種類で,フレームリレーの場合はNON_BROADCASTというタイプになります。
・BROADCAST…………… イーサネット,ファストイーサネット,ギガビットイーサネットなど
・NON_BROADCAST………フレームリレー,ATM,マルチポイント・サブインタフェースなど
・POINT_TO_POINT…………PPP,HDLC,ポイントツーポイント・サブインタフェースなど
・POINT_TO_MULTIPOINT…デフォルトではなし
・POINT_TO_MULTIPOINT NON_BROADCAST…デフォルトではなし
なぜこんなタイプが決まっているかと言うと,このタイプごとにOSPFは振る舞いを変えるからです。
振る舞いというのは,Hello/Deadの間隔と,DR(代表ルーター)/BDR(バックアップ代表ルーター)選出の必要性です。
具体的には,
・BROADCAST…………… Hello10秒/Dead 40秒,DR/BDR選出
・NON_BROADCAST……… Hello30秒/Dead120秒,DR/BDR選出
・POINT_TO_POINT……… Hello10秒/Dead 40秒,DR/BDR非選出
・POINT_TO_MULTIPOINT…Hello30秒/Dead120秒,DR/BDR非選出
・POINT_TO_MULTIPOINT NON_BROADCAST…POINT_TO_MULTIPOINTと同じ
という感じになっています。
こうしてOSPFは,レイヤー2ネットワークの環境に合わせた格好でOSPFを動作させようとするわけです。
これらの中のNON_BROADCASTというのは,NBMA(ノンブロードキャスト・マルチアクセス)のことです。
フレームリレーのように,ブロードキャストを使わずに1対多接続をするネットワーク形態のことですね。
OSPFは,OSPFが動作するインタフェースがフレームリレーと認識すると,「インタフェースがフレームリレーだからネットワークはNON_BROADCAST(NBMA)だ。だったらDR/BDRの選出は必要で,Helloは30秒間隔でいいや」というように思います。
●設定の確認
ここでは,RouterAの設定の
neighbor 192.168.1.3
neighbor 192.168.1.2
という二つのコマンド設定をしていない状態から見ていきます。
まず,RouterAでOSPFが動作しているインタフェースのタイプを確認してみましょう。
show ip ospf interfaceコマンドを使います。
RouterA#show ip ospf interface
Serial0 is up, line protocol is up
Internet Address 192.168.1.1/24,
Area 0
Process ID 1, Router ID 192.168.1.1, Network Type NON_BROADCAST, Cost: 64
Transmit Delay is 1 sec, State
DR, Priority
1
Designated Router (ID) 192.168.1.1,
Interface
address 192.168.1.1
No backup designated router
on this network
Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
Hello due in 00:00:12
Index 2/2, flood queue length
0
Next 0x0(0)/0x0(0)
Last flood scan length is 1,
maximum is
1
Last flood scan time is 0 msec,
maximum
is 0 msec
Neighbor Count is 0, Adjacent
neighbor
count is 0
Suppress hello for 0 neighbor(s)
Ethernet0 is up, line protocol is up
Internet Address 192.168.0.1/24,
Area 0
Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State
DR, Priority
1
Designated Router (ID) 192.168.1.1,
Interface
address 192.168.0.1
No backup designated router
on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:01
Index 1/1, flood queue length
0
Next 0x0(0)/0x0(0)
Last flood scan length is 0,
maximum is
0
Last flood scan time is 0 msec,
maximum
is 0 msec
Neighbor Count is 0, Adjacent
neighbor
count is 0
Suppress hello for 0 neighbor(s)
フレームリレーがつながっているSerial0はNON_BROADCASTになっています。
一方,イーサネットがつながっているEthernet0はBROADCASTになっています。
それぞれHelloとDeadの間隔が違うのも確認できました。
「イーサネットは帯域が太いからHelloも頻繁(10秒間隔)でいいや」というように,ネットワークに合わせて振る舞いを変えているわけです(たぶん(爆))。
では,RouterAのネイバー(ほかのOSPFルーター)を見てみましょう。
show ip ospf neighborコマンドを入力します。
RouterA#show ip ospf neighbor
RouterA#
何も表示されません。
RouterAが,ネイバーであるRouterBとRouterCを認識していないようです。
念のためルーティング・テーブルを見ると,やはり経路情報が来ていません。
RouterA#show ip route
Codes: C - connected, S - static, I - IGRP,
R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF,
IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF
NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external
type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS
level-2, ia - IS-IS inter area
* - candidate default, U - per-user static
route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
C 192.168.0.0/24 is directly connected, Ethernet0
C 192.168.1.0/24 is directly connected, Serial0
このように,フレームリレーで普通にOSPFを動作させようとすると,ルーターが同士ネイバーを認識してくれません。
これはなぜかというと,OSPFでは,NBMAネットワーク上にブロードキャストやマルチキャストを転送しないようになっているからです。
通常は,フレームリレーでブロードキャストやマルチキャストを転送させるには,
frame-relay map ip 192.168.1.1 200 broadcast
のように,DLCIとIPアドレスのマッピングの設定でbroadcastオプションを付けてやればいいのですが,OSPFではこれが通用しないのです。
OSPFのネイバーを確立するために使うHelloパケットは,マルチキャストです。
なので,フレームリレー・ネットワークにHelloが転送されなかったので,ネイバーが確立できなかったわけです。
●動作の確認
で,どうするか。
NBMAネットワーク上でOSPFを動かすには,OSPFの設定でネイバーを手動で指定してやる必要があります。
それがneighborコマンドです。
RouterAのネイバーはRouterB(192.168.1.2)とRouterC(192.168.1.3)なので,以下のように入力します。
RouterA(config-router)#neighbor 192.168.1.2
RouterA(config-router)#neighbor 192.168.1.3
10:19:57: %OSPF-5-ADJCHG: Process
1, Nbr
192.168.2.1 on Serial0 from LOADING
to FULL,
Loading Done
10:23:27: %OSPF-5-ADJCHG: Process
1, Nbr
192.168.3.1 on Serial0 from LOADING
to FULL,
Loading Done
コマンドを入れて十数秒待つと,メッセージが出てきます。
これは,RouterAが両ルーターとネイバーを確立し,さらにLSAをやりとりできる状態になった(アジャセンシーを確立した)ことを示すメッセージです。
ちなみにこのneighborコマンドは,片方のルーターに設定すればOKです。
neighbor設定をしていないルーターは,自分からはHelloを送りませんが,Helloが来れば返答します。
RouterAのネイバーを再確認してみましょう。
すると,今度はRouterBとRouterCが見えています。
RouterA#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
192.168.3.1 0 FULL/DROTHER 00:01:59
192.168.1.3 Serial0
192.168.2.1 0 FULL/DROTHER 00:01:54
192.168.1.2 Serial0
RouterAからHelloパケットがどのように出ているのか見てみましょう。
デバッグでIPパケットを見てみます。
RouterA#debug ip packet detail
IP packet debugging is on (detailed)
00:16:48: IP: s=192.168.1.1 (local), d=192.168.1.3
(Serial0), len 72, sending, proto=89
00:16:48: IP: s=192.168.1.1 (local), d=192.168.1.2
(Serial0), len 72, sending, proto=89
00:16:56: IP: s=192.168.0.1 (local),
d=224.0.0.5
(Ethernet0), len 64, sending
broad/multicast,
proto=89
00:17:06: IP: s=192.168.0.1 (local),
d=224.0.0.5
(Ethernet0), len 64, sending
broad/multicast,
proto=89
00:17:09: IP: s=192.168.1.2 (Serial0),
d=192.168.1.1,
len 68, rcvd 0, proto=89
00:17:13: IP: s=192.168.1.3 (Serial0),
d=192.168.1.1,
len 68, rcvd 0, proto=89
RouterAは,Helloパケットをマルチキャスト(224.0.0.5)ではなく,ユニキャスト(192.168.1.2と192.168.1.3)で出しているのがわかります(RouterBとRouterCから受け取ったHelloパケットもユニキャストになっています)。
OSPFのneighborコマンドは,Helloパケットをマルチキャストではなくユニキャストで出すためのコマンドだったわけです。
ちなみに,「proto=89」はIPヘッダーに記述されるプロトコル番号で,89番はOSPFを表しています。
ルーティング・テーブルも見てみると,今度はきちんと経路が来ています。
やったね!
RouterA#show ip route
Codes: C - connected, S - static,
I - IGRP,
R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external,
O - OSPF,
IA - OSPF inter area
N1 - OSPF NSSA external type
1, N2 - OSPF
NSSA external type 2
E1 - OSPF external type 1, E2
- OSPF external
type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1,
L2 - IS-IS
level-2, ia - IS-IS inter area
* - candidate default, U - per-user
static
route, o - ODR
P - periodic downloaded static
route
Gateway of last resort is not
set
C 192.168.0.0/24 is directly
connected, Ethernet0
C 192.168.1.0/24 is directly
connected, Serial0
O 192.168.2.0/24 [110/74] via
192.168.1.2,
00:02:10, Serial0
O 192.168.3.0/24 [110/74] via
192.168.1.3,
00:02:10, Serial0
念のため,RouterBとRouterCのネイバーも見てみましょう。
いずれもRouterAがDR(代表ルーター)になっています。
以下がRouterBのネイバーです。
RouterB#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
192.168.1.1 1 FULL/DR
00:01:33 192.168.1.1 Serial0
以下がRouteCのネイバーです。
RouterC#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
192.168.1.1 1 FULL/DR 00:01:42
192.168.1.1 Serial0
最後に,大切なことを一つ。
それは,NBMAネットワークがフルメッシュでない場合,ハブ・ルーターを代表ルーターにする必要があるということです。
代表ルーターを選出するということは,そのサブネット上にあるすべてのルーターが代表ルーターに直接アクセスできないといけません。
そのため,スター型のネットワークを構築している場合は,すべてのルーターと直接アクセスできるハブ・ルーターを明示的に代表ルーターにしてやります。
今回の例では,RouterBとRouterCに
ip ospf priority 0
というコマンドが入っています。
これは,RouterBとRouterCのOSPFプライオリティを0にして,代表ルーターにならないようにしています。
こうして,ハブ・ルーターであるRouterAが必ず代表ルーターになるようにしたわけです。
●おまけ(わざとスポーク・ルーターを代表ルーターにしてみる)
スポーク・ルーターであるRouterBを代表ルーターにするとどうなるでしょうか。
以上の状態から,コマンドを入れて実験してみましょう。
まずは,RouterAのプライオリティを0にします。
これで,RouterAは代表ルーターになりません(OSPFプラオリティに関しては,OSPFプライオリティの設定と代表ルーターの選出を見てください)。
RouterA#configure terminal
RouterA(config)#interface serial
0
RouterA(config-if)#ip ospf priority 0
RouterAのネイバーを確認してみます。
すると,Stateが「FULL」から「2WAY」に変わりました。
RouterBとRouterCの接続が,アジャセンシーではなくただのネイバーになったわけです。
RouterA#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
192.168.3.1 0 2WAY/DROTHER 00:01:30 192.168.1.3 Serial0
192.168.2.1 0 2WAY/DROTHER 00:01:55 192.168.1.2 Serial0
さらに,RouterAのネイバーを二つとも削除します。
すると,確立されていたネイバーがなくなったというメッセージが出ます。
RouterA#configure terminal
RouterA(config)#router ospf 1
RouterA(config-router)#no neighbor 192.168.1.2
RouterA(config-router)#no neighbor 192.168.1.3
10:43:30: %OSPF-5-ADJCHG: Process 1, Nbr
192.168.2.1 on Serial0 from 2WAY to DOWN,
Neighbor Down: Neighbor deconfigured
10:43:41: %OSPF-5-ADJCHG: Process 1, Nbr
192.168.3.1 on Serial0 from 2WAY to DOWN,
Neighbor Down: Neighbor deconfigured
show ip ospf neighborで確認すると,何も表示されません。
やはりネイバーがなくなったことがわかります。
RouterA#show ip ospf neighbor
RouterA#
次に,RouterBのOSPFプライオリティを上げてRouterBが代表ルーターになるようにします。
そして,RouterAとRouterCをネイバーに指定します。
RouterB#configure terminal
RouterB(config)#interface serial
0
RouterB(config-if)#ip ospf priority 10
RouterB(config-if)#exit
RouterB(config)#router ospf 1
RouterB(config-router)#neighbor 192.168.1.1
RouterB(config-router)#neighbor 192.168.1.3
10:48:16: %OSPF-5-ADJCHG: Process
1, Nbr
192.168.1.1 on Serial0 from LOADING
to FULL,
Loading Done
RouterBのネイバーを見てみましょう。
すると,RouterC(192.168.1.3)のStateが「ATTEMPT」になっています。
「ATTEMPT」は,自分はHelloを送っているけど相手からは届いていない状態です。
そのため相手のネイバーIDがわからないので,「N/A」となっています(Not
Applicableの略かな?意味は「適用不可」,「データなし」あたりだと思います)
DeadTimeの時間(90秒)この状態が続きます。
RouterB#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
N/A 0 ATTEMPT/DROTHER 00:01:19 192.168.1.3 Serial0
192.168.1.1 0 FULL/DROTHER 00:01:32
192.168.1.1 Serial0
DeadTimeの90秒が経過すると,RouterCのネイバーがダウンしたメッセージが表示されます。
10:50:13: %OSPF-5-ADJCHG: Process 1, Nbr
0.0.0.0 on Serial0 from ATTEMPT to DOWN,
Neighbor Down: Dead timer expired
RouterBのネイバーを確認してみましょう。
DeadTimeが満了して「-」になりました。
でもRouterB自体はRouterCをネイバーだと思ってHelloを送りつづけているので,Stateは「ATTEMPT」のままです。
RouterB#show ip ospf neighbor
Neighbor ID Pri State Dead
Time Address Interface
N/A 0 ATTEMPT/DROTHER - 192.168.1.3 Serial0
192.168.1.1 0 FULL/DROTHER 00:01:44 192.168.1.1
Serial0
RouterBのルーティング・テーブルを見てみると,RouterCあての経路が消えちゃいました。
RouterCは代表ルーターであるRouterBとネイバーが確立できないので,RouterCから経路情報(LSA)が流れてこないのです。
RouterB#show ip route
Codes: C - connected, S - static,
I - IGRP,
R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external,
O - OSPF,
IA - OSPF inter area
N1 - OSPF NSSA external type
1, N2 - OSPF
NSSA external type 2
E1 - OSPF external type 1, E2
- OSPF external
type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1,
L2 - IS-IS
level-2, ia - IS-IS inter area
* - candidate default, U - per-user
static
route, o - ODR
P - periodic downloaded static
route
Gateway of last resort is not
set
O 192.168.0.0/24 [110/74] via
192.168.1.1,
00:02:44, Serial0
C 192.168.1.0/24 is directly
connected, Serial0
C 192.168.2.0/24 is directly
connected, Ethernet0
RouterCのネイバーが落ちた理由は,RouterBはスポークのルーターなので,(レイヤー2レベルで)RouterCと直接通信できないからです。
これで,NBMAネットワークでOSPFを動かすときには,ハブ・ルーターを代表ルーターにしなければいけないことが確認できました。
|
|