OSPF のルータは、Hello パケットに自分のインターフェースのサブネットマスクを入れて送ります。ブロードキャスト型のネットワーク(イーサネットの既定)では、受け取ったマスクが自分と違うと Hello を捨てるので、ネイバーになれません。この記事では、マスクが同じ場合と違う場合の動きを確かめ、ネットワークタイプを point-to-point にするとどうなるかも見ます。
- Hello パケットに入っているサブネットマスク
- マスクが違うときの
debug ip ospf helloの表示 - point-to-point ではマスクを照合しないこと
サブネットマスクが同じ場合
R2 と R3 を 192.168.23.0/24 でつなぎ、エリア0で OSPF を動かします。
OSPF を設定する
R2
R2(config)#router ospf 1 R2(config-router)#network 2.2.2.2 0.0.0.0 area 0 R2(config-router)#network 192.168.23.0 0.0.0.255 area 0
R3
R3(config)#router ospf 1 R3(config-router)#network 3.3.3.3 0.0.0.0 area 0 R3(config-router)#network 192.168.23.0 0.0.0.255 area 0
設定すると、ネイバーの状態が FULL になったことがログに出ます。
R2
%OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23 from LOADING to FULL,
Loading Done
R3
%OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.23 from LOADING to FULL,
Loading Done
Hello パケットの中身を見る
R2 が送った Hello パケットをキャプチャすると、OSPF Hello Packet の先頭に Network Mask が入っています。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
▸ Ethernet II, Src: 00:00:00_00:22:22 (00:00:00:00:22:22), Dst: IPv4mcast_05 (01:00:5e:00:00:05)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 23▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.5▾ Open Shortest Path First ▸ OSPF Header ▾ OSPF Hello Packet1 Network Mask: 255.255.255.02 Hello Interval [sec]: 10 ▸ Options: 0x12, (L) LLS Data block, (E) External Routing Router Priority: 1 Router Dead Interval [sec]: 40 Designated Router: 192.168.23.3 Backup Designated Router: 192.168.23.2 Active Neighbor: 3.3.3.3 ▸ OSPF LLS Data Block
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Network Mask: 255.255.255.0 | 送信したインターフェースのサブネットマスク |
| 2 | Hello Interval/Router Dead Interval | Hello の送信間隔と、ネイバーをダウンと判断するまでの時間。マスクと同じく、受信側で自分の値と照合されます |
サブネットマスクが違う場合
R2 のマスクを変える
R2 のインターフェースのマスクを 255.255.255.0 から 255.255.255.128 に変えます。no ip address でアドレスを外した時点で、インターフェースが OSPF から外れ、ネイバーがダウンします。
R2
R2(config)# interface fastEthernet 0/0.23
R2(config-subif)#no ip address 192.168.23.2 255.255.255.0
%OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23 from FULL to DOWN,
Neighbor Down: Interface down or detached
R2(config-subif)#ip address 192.168.23.2 255.255.255.128
ネイバーを確認する
アドレスを設定し直しても、ネイバーは表示されません。
R2# show ip ospf neighbor R2#
debug で原因を見る
debug ip ospf hello で Hello のやり取りを見ると、R3 から Hello は届いていますが、パラメータの不一致で捨てられています。
R2# debug ip ospf hello OSPF hello debugging is on OSPF-1 HELLO Fa0/0.23: Send hello to 224.0.0.5 area 0 from 192.168.23.2 OSPF-1 HELLO Fa0/0.23: Rcv hello from 3.3.3.3 area 0 192.168.23.3 OSPF-1 HELLO Fa0/0.23: Mismatched hello parameters from 192.168.23.3 OSPF-1 HELLO Fa0/0.23: Dead R 40 C 40, Hello R 10 C 10 Mask R 255.255.255.0 C 255.255.255.128
| 表示 | 意味 |
|---|---|
| Mismatched hello parameters | 受け取った Hello の値が、自分のインターフェースの設定と合わない |
| R / C | R は受け取った値(Received)、C は自分の設定値(Configured) |
| Dead R 40 C 40, Hello R 10 C 10 | Dead と Hello の間隔は一致している |
| Mask R 255.255.255.0 C 255.255.255.128 | マスクだけが一致していない。これがネイバーになれない原因 |
- エリア ID
- Hello 間隔と Dead 間隔
- サブネットマスク(ネットワークタイプが point-to-point と仮想リンクの場合を除く)
- スタブエリアかどうか(Options の E ビット)
- 認証の種類とキー
ネットワークタイプを point-to-point に変える
両側で point-to-point にする
マスクを違えたまま、R2 と R3 の両方でネットワークタイプをブロードキャストから point-to-point に変えます。
R2
R2(config)# interface FastEthernet0/0.23
R2(config-subif)# ip ospf network point-to-point
R3
R3(config)# interface fastEthernet 0/0.23
R3(config-subif)# ip ospf network point-to-point
ネイバーを確認する
マスクが違ったままでも、ネイバーが FULL になります。
R2 %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23 from LOADING to FULL, Loading Done R3 %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.23 from LOADING to FULL, Loading Done
R2# show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 0 FULL/ - 00:00:32 192.168.23.3 FastEthernet0/0.23
| 表示 | 意味 |
|---|---|
| FULL/ – | 隣接関係が完成している。point-to-point では DR・BDR を選ばないので、役割の欄は - になります |
| Pri 0 | point-to-point では DR 選出をしないため、優先度は 0 と表示されます |
point-to-point と仮想リンクでは、受け取った Hello のマスクを照合しません。相手は1台だけなので、マスクで同じセグメントかどうかを確かめる必要がないためです。
point-to-point にするとネイバーにはなれますが、マスクが食い違っている状態そのものは設定の誤りです。R2 は 192.168.23.0/25、R3 は 192.168.23.0/24 を自分のセグメントとして扱うので、ルーティングテーブルの経路も食い違います。実際の環境では、マスクをそろえて直します。また、ネットワークタイプは両側で同じにします。
まとめ
| ネットワークタイプ | マスクの照合 | マスクが違うと |
|---|---|---|
| broadcast(イーサネットの既定) | する | Hello を捨てるので、ネイバーにならない |
| point-to-point | しない | ネイバーになる(ただしマスクの食い違いは直すべき) |
ネイバーが表示されないときは、debug ip ospf hello で Mismatched hello parameters が出ていないかを確認すると、どの値が合っていないかがすぐにわかります。
コメント