OSPFのネイバーを張るコマンドの説明です。主にCCNA/CCNPのチャレンジャー対象です。
CCIE勉強中の方には分かりやすすぎですかね?
隣接ルーターでネイバーを張るコマンドについて説明します。
OSPFのネイバーを張るコマンドは2種類ある
OSPFはLink-Stateタイプのルーティングプロトコルです。隣接ルーターとネイバーを張る事によって、ルート(厳密にはノードのリンク情報)のやり取りをします。
つまり、経路の交換をする為には、隣接ルーターとネイバーを張る事が大前提です。(ここではDR/BDRとかFullとか2wayとかは一旦置いときます)
ネイバーを張る方法としては、以下の2つのコマンドがあります。
- インターフェースレベルでのip ospfコマンド
- router ospfレベルでのnetworkコマンド
恐らく、このブログを見てくださっている方ならnetworkコマンドは知っていると思いますが、もしかしたらCCNA勉強中の方はip ospfコマンドは知らないかもしれません。
このコマンドの違いは何でしょうか?
コマンドでやりたい事、結果は同じ
結論から言うと、どちらのコマンドを投入しても、結果は同じです。(Secondaryアドレスの広報など非常にマイナーな違いはありますが、CCNA/CCNPではそれ程意識しないで良いでしょう)
正確には、結果は同じに出来るという表現が正しいかもしれません。
そもそも、上記の2つのコマンドは、以下の目的で使用します。
- 特定のインターフェースからネイバーを張るパケットの送出を開始する
- 特定のインターフェースのプレフィックスを広報する(OSPFの場合は、厳密には、自ノードにそのインターフェースがリンクとして存在する事を広報する)
どちらを利用してもこの目的を達成する事には変わりません。送出するパケットの内容は変わりません。
目的が同じ、送出するパケットの内容も変わらない、では何故2つ違うコマンドがあるのでしょうか?
実際に例を挙げて考えてみましょう
今回は以前紹介した以下のトポロジを利用します。
- 上のR21/R2間でネイバーを張ってみます。
- 話をシンプルにするために、Areaは0だけにしてみます
R2でnetworkコマンドを使ってみる
R2の設定ではrouter ospfレベルでのnetworkコマンドを使ってみます。
まずは、router ospfです。
R2#conf t Enter configuration commands, one per line. End with CNTL/Z. R2(config)#router ospf 1 R2(config-router)#
networkコマンドは、networkの後に、設定するインターフェースの持っているIPアドレスを指定します。
例えば、R21側のインターフェース(f0/0)に設定されているIPアドレスは「10.20.1.2」なので、以下のコマンドを実行します。
R2(config-router)#network 10.20.1.2 0.0.0.0 area 0
ちなみに、上記の「0.0.0.0」はワイルドカードです。この辺は当記事では深く扱いません(Google先生に聞いてください)が、これを調整する事で広報するインターフェースの範囲を指定する事が出来ます。
例えば「network 10.0.0.0 0.255.255.255 area 0」とかしたら
- 10.0.0.0-10.255.255.255のIPアドレスが設定されているインターフェース
が全てネイバーを張る(そして、OSPFの広報するリンクの対象)となります。
networkコマンドでどのインターフェースが設定の対象となっているか(ネイバーを張ろうと努力しているか)は以下のコマンドで確認できます。
R2#sh ip ospf interface brief Interface PID Area IP Address/Mask Cost State Nbrs F/C Fa0/0 1 0 10.20.1.2/24 1 DR 0/0
上記例だと、想定通りFa0/0(10.20.1.2を持っている)が対象となっていますね。
では、次にR21の設定をしてみましょう。
R21でip ospfコマンドを使ってみる。
R21の設定ではインターフェースレベルでip ospfコマンドを使用してみます。
R21のR2向きインターフェースはF0/0です。
R21#sh ip int bri Interface IP-Address OK? Method Status Protocol FastEthernet0/0 10.20.1.21 YES NVRAM up up FastEthernet0/1 unassigned YES NVRAM administratively down down Loopback2 10.20.2.21 YES NVRAM up up Loopback3 10.20.3.21 YES NVRAM up up Loopback4 10.20.4.21 YES NVRAM up up
なので、F0/0に対して設定を行います。
R21#conf t Enter configuration commands, one per line. End with CNTL/Z. R21(config)#int f0/0 R21(config-if)#ip ospf 1 area 0 R21(config-if)# *Oct 14 13:50:24.119: %OSPF-5-ADJCHG: Process 1, Nbr 172.16.20.2 on FastEthernet0/0 from LOADING to FULL, Loading Done R21(config-if)#
お!コマンドを実行した直後に、ネイバーが張れたメッセージが表示されました!
R2側の設定は既に終わらせていたので、ネイバーが張れたのですね!
念のため、確認コマンドでもネイバーが張れているかチェックしてみましょう(sh ip ospf neighbor)
R21#sh ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 172.16.20.2 1 FULL/DR 00:00:35 10.20.1.2 FastEthernet0/0
問題なさそうです。
以上でネイバーを張るまでの操作が終了しました。
networkコマンド、ip ospfコマンド、両方の組み合わせでも問題なくネイバー張れることが実証されました。
では、R2側のルーティングテーブルを見てみましょう。
ネイバーが張れているのに、R21のLoのルートが見えない
R2のルーティングテーブルは以下の通りです
R2#sh ip route Codes: L - local, C - connected, S - static, 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 i - IS-IS, su - IS-IS summary, 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, H - NHRP, l - LISP + - replicated route, % - next hop override Gateway of last resort is 172.16.20.100 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 172.16.20.100 10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks C 10.0.123.0/24 is directly connected, Tunnel0 L 10.0.123.2/32 is directly connected, Tunnel0 C 10.20.1.0/24 is directly connected, FastEthernet0/0 L 10.20.1.2/32 is directly connected, FastEthernet0/0 172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks C 172.16.20.0/24 is directly connected, FastEthernet0/1 L 172.16.20.2/32 is directly connected, FastEthernet0/1 R2#
あれ?R21のLoのルートがありませんね。
上記だとわかりずらいので、OSPF経由で取得したルートだけを見てみましょう。
R2#sh ip route ospf Codes: L - local, C - connected, S - static, 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 i - IS-IS, su - IS-IS summary, 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, H - NHRP, l - LISP + - replicated route, % - next hop override Gateway of last resort is 172.16.20.100 to network 0.0.0.0 R2#
なにもありませんね・・・・ 何故でしょうか?
何故なら、R21のLoはnetworkコマンドでもip ospfコマンドでも設定していないですよね。
繰り返しになりますが、上記コマンドの目的は
- 特定のインターフェースからネイバーを張るパケットの送出を開始する
- 特定のインターフェースのプレフィックスを広報する(OSPFの場合は、厳密には、自ノードにそのインターフェースがリンクとして存在する事を広報する)
この2つがあります。
Loを使用してネイバーを張る必要がなくても、そのルートを広報したかったら、F0/0と同じようにnetworkコマンド化ip ospfコマンドで設定が必要です。
なので、Loに対して設定してみましょう。(3つあるのでちょっと面倒くさい)
R21#conf t Enter configuration commands, one per line. End with CNTL/Z. R21(config)#int lo2 R21(config-if)#ip ospf 1 area 0 R21(config-if)#int lo3 R21(config-if)#ip ospf 1 area 0 R21(config-if)#int lo4 R21(config-if)#ip ospf 1 area 0 R21(config-if)#end *Oct 14 14:13:34.235: %SYS-5-CONFIG_I: Configured from console by console R21#sh ip ospf interface brief Interface PID Area IP Address/Mask Cost State Nbrs F/C Lo2 1 0 10.20.2.21/24 1 LOOP 0/0 Lo3 1 0 10.20.3.21/24 1 LOOP 0/0 Lo4 1 0 10.20.4.21/24 1 LOOP 0/0 Fa0/0 1 0 10.20.1.21/24 1 BDR 1/1 R21#
はい、無事設定が終わりました。R2のルーティングテーブルを再度見てみましょう。
R2#sh ip route ospf Codes: L - local, C - connected, S - static, 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 i - IS-IS, su - IS-IS summary, 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, H - NHRP, l - LISP + - replicated route, % - next hop override Gateway of last resort is 172.16.20.100 to network 0.0.0.0 10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks O 10.20.2.21/32 [110/2] via 10.20.1.21, 00:01:06, FastEthernet0/0 O 10.20.3.21/32 [110/2] via 10.20.1.21, 00:00:56, FastEthernet0/0 O 10.20.4.21/32 [110/2] via 10.20.1.21, 00:00:46, FastEthernet0/0 R2#
お!R2のLoのルートが登録されています。試しに、Lo2(10.20.2.21)に対してPINGしてみましょう。
R2#ping 10.20.2.21 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.20.2.21, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 80/113/144 ms
問題なく疎通できましたね。
テストを踏まえて、2つのコマンドの違いを考えてみる
上記の結果、2つのコマンドの使い分けが分かってきたと思います。
インターフェースレベルでのip ospf コマンドを利用するとき
設定するインターフェースが明確な時は、このコマンドを使用した方が安全です。
このコマンドの場合は、インターフェースのIPアドレスを変えても、設定自体は有効なままです。
一方、大量のインターフェースに対して設定するのはちょっと面倒くさいですね。
router ospfでnetworkコマンドを利用するとき
networkコマンドだとワイルドカードが使えるので、1つのコマンドで同時に複数のインターフェースに対して設定を有効にすることが出来ます。
例えば「network 0.0.0.0 255.255.255.255 area 0」とかすると、全インターフェースをarea0で設定できます。これは便利です。
一方、OSPFの対象にしたくないインターフェースを誤って有効にしてしまう恐れもあります。
先の例だと、R21に「network 10.20.0.0 0.0.255.255 area 0」とすると、F0/0,Lo2,Lo3,Lo4のインターフェース全てでOSPFが有効になります。で、その後「10.20.5.21 255.255.255.0」とかのインターフェースをLo5として新規作成したらどうなるでしょう。自動的にOSPFが有効になってしまいますよね。この自動的にOSPFが有効になる状況は、場合によっては好ましくない状況かもしれません。
まとめ
インターフェースレベルのip ospfコマンド、router ospfでのnetworkコマンドにはそれぞれ一長一短がある事が分って頂けたかと思います。
その時その時の要件に合わせて使い分けれるようにしましょう。CCNA/CCNPのシミュレーションに対しても、違いが分かればシミュレーション対策が出来ると思います。
コメント