【OSPF】サブネットマスクが異なるとネイバー関係になれない

OSPF のルータは、Hello パケットに自分のインターフェースのサブネットマスクを入れて送ります。ブロードキャスト型のネットワーク(イーサネットの既定)では、受け取ったマスクが自分と違うと Hello を捨てるので、ネイバーになれません。この記事では、マスクが同じ場合と違う場合の動きを確かめ、ネットワークタイプを point-to-point にするとどうなるかも見ます。

この記事でわかること
  1. Hello パケットに入っているサブネットマスク
  2. マスクが違うときの debug ip ospf hello の表示
  3. point-to-point ではマスクを照合しないこと

サブネットマスクが同じ場合

R2 と R3 を 192.168.23.0/24 でつなぎ、エリア0で OSPF を動かします。

Area 0 R2R3 Lo0 2.2.2.2/32Lo0 3.3.3.3/32 .2.3 192.168.23.0/24
図1 検証構成

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 が入っています。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark)画面イメージ
▸ 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
図2 R2 が送った Hello パケット(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Network Mask: 255.255.255.0送信したインターフェースのサブネットマスク
2Hello Interval/Router Dead IntervalHello の送信間隔と、ネイバーをダウンと判断するまでの時間。マスクと同じく、受信側で自分の値と照合されます

サブネットマスクが違う場合

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 / CR は受け取った値(Received)、C は自分の設定値(Configured)
Dead R 40 C 40, Hello R 10 C 10Dead と Hello の間隔は一致している
Mask R 255.255.255.0 C 255.255.255.128マスクだけが一致していない。これがネイバーになれない原因
R2R3 192.168.23.2/25192.168.23.3/24 Hello(R2 が送る)Network Mask: 255.255.255.128Hello(R3 が送る)Network Mask: 255.255.255.0 マスクが自分(/25)と違うので捨てる
図3 マスクの不一致で Hello が捨てられる(R3 側でも同じように R2 の Hello が捨てられる)
Hello で一致が必要な主な項目
  • エリア 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 0point-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 が出ていないかを確認すると、どの値が合っていないかがすぐにわかります。

コメント