OSPFでdistribute-listを使用する際にベストLSAをフィルタリングする【Cisco】
こんにちは。
今回は、OSPFネットワークにおいて、distribute-listを使用し、ベストLSA(ベストパスとなるLSA)をフィルタリングした時の仕様について検証したので、アウトプットします。なお、下記の公式ドキュメントを参考にしました。
OSPF distribute-list の実装変更について - Cisco Community
検証構成1
R2およびR3が172.20.1.0/24のルートをOSPFドメインに再配布しています。この時、R2ではメトリックを200とし、タグ200を付与、R3ではメトリックを300とし、タグ300を付与しています。これにより、R1は172.20.1.0/24に関するLSAを受け取った際に、R2からのLSAをベストLSAとしルーティングテーブルに載せます。
投入コンフィグ
R2とR3に投入したコンフィグは下記の通りです。
R2 router ospf 1 redistribute connected metric 200 subnets tag 200 network 192.168.1.0 0.0.0.255 area 0 distribute-list 10 out ! access-list 10 deny 10.2.2.2 access-list 10 permit any R3 router ospf 1 redistribute connected metric 300 subnets tag 300 network 192.168.1.0 0.0.0.255 area 0 distribute-list 10 out ! access-list 10 deny 10.3.3.3 access-list 10 permit any
R1のルーティングテーブルとLSDB
R2とR3にて経路制御を行ったため、R1にて想定通りのルーティングテーブルとLSDBとなっているかを確認します。
R1#sh ip ro | b las Gateway of last resort is not set 10.0.0.0/32 is subnetted, 1 subnets C 10.1.1.1 is directly connected, Loopback0 172.20.0.0/24 is subnetted, 1 subnets O E2 172.20.1.0 [110/200] via 192.168.1.2, 00:15:55, FastEthernet0/0 192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks C 192.168.1.0/24 is directly connected, FastEthernet0/0 L 192.168.1.1/32 is directly connected, FastEthernet0/0 R1# R1#sh ip os d OSPF Router with ID (10.1.1.1) (Process ID 1) Router Link States (Area 0) Link ID ADV Router Age Seq# Checksum Link count 10.1.1.1 10.1.1.1 1142 0x80000002 0x00E040 2 10.2.2.2 10.2.2.2 1138 0x80000002 0x00B184 1 10.3.3.3 10.3.3.3 1143 0x80000002 0x0089A5 1 Net Link States (Area 0) Link ID ADV Router Age Seq# Checksum 192.168.1.3 10.3.3.3 1138 0x80000002 0x005B29 Type-5 AS External Link States Link ID ADV Router Age Seq# Checksum Tag 172.20.1.0 10.2.2.2 1180 0x80000001 0x00CF81 200 172.20.1.0 10.3.3.3 1183 0x80000001 0x00B3D1 300
172.20.1.0/24のベストルートとして、R2をネクストホップとしたルートが選択されていることがルーティングテーブルからわかります。
Link ID 172.20.1.0について、二つのLSA(Type-5)を受信していることが確認できましたが、もう少し詳しく確認してみます。
R1#sh ip os d external 172.20.1.0 OSPF Router with ID (10.1.1.1) (Process ID 1) Type-5 AS External Link States Routing Bit Set on this LSA in topology Base with MTID 0 LS age: 1323 Options: (No TOS-capability, DC) LS Type: AS External Link Link State ID: 172.20.1.0 (External Network Number ) Advertising Router: 10.2.2.2 LS Seq Number: 80000001 Checksum: 0xCF81 Length: 36 Network Mask: /24 Metric Type: 2 (Larger than any link state path) MTID: 0 Metric: 200 Forward Address: 0.0.0.0 External Route Tag: 200 LS age: 1326 Options: (No TOS-capability, DC) LS Type: AS External Link Link State ID: 172.20.1.0 (External Network Number ) Advertising Router: 10.3.3.3 LS Seq Number: 80000001 Checksum: 0xB3D1 Length: 36 Network Mask: /24 Metric Type: 2 (Larger than any link state path) MTID: 0 Metric: 300 Forward Address: 0.0.0.0 External Route Tag: 300
想定通り、R2からのLSAはメトリック200、タグ200となっており、R3からのLSAはメトリック300、タグ300となっていることが確認できました。
検証構成2
ここからが本題です。検証構成1の条件に加えて、R1においてタグ200が付与された経路を除外するdistribute-listをin方向に適用した際の挙動を検証してみます。
投入するコンフィグ
R1に、下記のコンフィグを投入します。
router ospf 1 distribute-list route-map TEST in ! route-map TEST deny 10 match tag 200 ! route-map TEST permit 20
状態確認の前に考えてみる
状態確認の前に、どのような挙動となるかを考えてみます。172.20.1.0/24の経路情報は、R2とR3の両方からLSAを受信しています。また、distribute-listをin方向で適用するので作用するポイントはLSDB構築後からルーティングテーブル形成までの間です。そのため、LSDBは投入前後で変わらないが、ルーティングテーブルに載るベストルートは、R3をネクストホップとしたルートと推測できます。
状態確認
R1のルーティングテーブルとLSDBを確認してみます。
R1#sh ip ro | b las Gateway of last resort is not set 10.0.0.0/32 is subnetted, 1 subnets C 10.1.1.1 is directly connected, Loopback0 192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks C 192.168.1.0/24 is directly connected, FastEthernet0/0 L 192.168.1.1/32 is directly connected, FastEthernet0/0 R1# R1#sh ip os d OSPF Router with ID (10.1.1.1) (Process ID 1) Router Link States (Area 0) Link ID ADV Router Age Seq# Checksum Link count 10.1.1.1 10.1.1.1 386 0x80000003 0x00DE41 2 10.2.2.2 10.2.2.2 403 0x80000003 0x00AF85 1 10.3.3.3 10.3.3.3 424 0x80000003 0x0087A6 1 Net Link States (Area 0) Link ID ADV Router Age Seq# Checksum 192.168.1.3 10.3.3.3 424 0x80000003 0x00592A Type-5 AS External Link States Link ID ADV Router Age Seq# Checksum Tag 172.20.1.0 10.2.2.2 403 0x80000002 0x00CD82 200 172.20.1.0 10.3.3.3 425 0x80000002 0x00B1D2 300
ルーティングテーブルに、172.20.1.0/24が載っていない!
これが今回最も重要な部分になります。冒頭で載せた公式ドキュメント内には、次のように記述されています。
実装後:ベストパスとなる LSA を除外すると、次に有効なパスは計算されません
つまり、distribute-listによってベストパスとなるLSAを除外するように設定すると、その次に有効となる経路情報が保持されていても、SPFツリー形成およびルーティングテーブル形成には使用しないという仕様が存在します。このような仕様となった理由ですが、ドキュメント内に記述があるように、distribute-listの使用有無によるパス計算の違いによりループが発生するため、とのことです。
したがって、172.20.1.0/24がルーティングテーブルに載っていないのは、実装されたOSPFの仕様によるものとなります。
※なお、Ciscoのみで確認できた仕様のため、他ベンダ機器のOSPFの実装の場合だと異なる可能性があります。
まとめ
今回は、OSPF環境において、distribute-listを使用してベストパスLSAを制御した際の挙動について検証しました。バックアップ経路に自動で切り替えてくれるのがダイナミックルーティングのメリットですが、思わぬ落とし穴(仕様)に落ちないよう、検証はしっかり行っておきたいですね。それでは。