NBMAネットワーク(ノンブロードキャスト)
・フレームリレー上でOSPFを動作させる
・OSPFのネットワーク・タイプを変更せずに(デフォルトのNON_BROADCASTのまま)経路情報を交換させる
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterA
!
interface Ethernet0
ip address 192.168.0.1 255.255.255.0
no keepalive
!
interface Serial0
ip address 192.168.1.1 255.255.255.0
encapsulation frame-relay
frame-relay map ip 192.168.1.2 100 broadcast
frame-relay map ip 192.168.1.3 300 broadcast
frame-relay interface-dlci 100
frame-relay interface-dlci 300
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
neighbor 192.168.1.3 ←OSPFのネイバーを指定する
neighbor 192.168.1.2 ←OSPFのネイバーを指定する

!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterB
!
interface Ethernet0
ip address 192.168.2.1 255.255.255.0
no keepalive
!
interface Serial0
ip address 192.168.1.2 255.255.255.0
encapsulation frame-relay
ip ospf priority 0 ←OSPFプライオリティを0にして代表ルーターにならないようにする
no fair-queue
frame-relay map ip 192.168.1.1 200 broadcast
frame-relay map ip 192.168.1.3 200 broadcast
frame-relay interface-dlci 200
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterCのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterC
!
interface Ethernet0
ip address 192.168.3.1 255.255.255.0
no keepalive
!
interface Serial0
ip address 192.168.1.3 255.255.255.0
encapsulation frame-relay
ip ospf priority 0 ←OSPFプライオリティを0にして代表ルーターにならないようにする
frame-relay map ip 192.168.1.1 400 broadcast
frame-relay map ip 192.168.1.2 400 broadcast
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
FRswitchのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname FRswitch
!
frame-relay switching
!
interface Serial0
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 100 interface Serial1 200
frame-relay route 300 interface Serial2 400
!
interface Serial1
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 200 interface Serial0 100
!
interface Serial2
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 400 interface Serial0 300
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
確認
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_MULTIPOINTHello30秒/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を動かすときには,ハブ・ルーターを代表ルーターにしなければいけないことが確認できました。

OSPFラボ
OSPFの基本設定
パッシブ・インタフェースの設定
プライオリティの設定と代表ルーターの選出
NBMAネットワーク(ノンブロードキャスト)
NBMAネットワーク(ブロードキャスト)
NBMAネットワーク(ポイントツーマルチポイント)
OSPFコストの設定
エリア設定(標準,スタブ,トータリースタブ)
エリア設定(NSSA,トータリースタブNSSA)
OSPFバーチャルリンク
OSPFの経路集約
ネイバー認証
(ツール)OSPFトポロジ表示フラッシュ