NWエンジニアの勉強ブログ

NWエンジニアです。勉強した内容を気ままにまとめていきます。

OSPFへの再配送時における、distribute-listの適用方向ごとのアルゴリズムの違い【Cisco】

こんにちは。
今回は、OSPFへの再配送時にdistribute-listを使用した経路制御を検証したので、アウトプットしていきます。

検証構成1


EIGRPからOSPFへ再配送を行う、単純な構成です。構成1では、ASBRにあたるR2において、distribute-listをout方向で使用し、EIGRPから再配送される経路の内、10.1.1.0/24のみを除外するケースを構築します。

distribute-list適用前の状態

distribute-list適用前のルーティングテーブルとLSDBを確認します。

R2(config-router)#do sh ip ro | b las
Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
C        2.2.2.2 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
D        10.1.1.0/24 [90/156160] via 10.12.1.1, 00:26:34, FastEthernet0/0
D        10.2.2.0/24 [90/156160] via 10.12.1.1, 00:26:34, FastEthernet0/0
D        10.3.3.0/24 [90/156160] via 10.12.1.1, 00:26:34, FastEthernet0/0
C        10.12.1.0/24 is directly connected, FastEthernet0/0
L        10.12.1.2/32 is directly connected, FastEthernet0/0
C        10.23.1.0/24 is directly connected, FastEthernet1/0
L        10.23.1.2/32 is directly connected, FastEthernet1/0

R2(config-router)#do sh ip os d

            OSPF Router with ID (2.2.2.2) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         1100        0x80000004 0x0026AE 1
3.3.3.3         3.3.3.3         1545        0x80000002 0x00E5E9 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.23.1.3       3.3.3.3         1545        0x80000001 0x004FA5

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
10.1.1.0        2.2.2.2         13          0x80000001 0x00127A 0
10.2.2.0        2.2.2.2         1089        0x80000001 0x00FA8F 0
10.3.3.0        2.2.2.2         1089        0x80000001 0x00E3A4 0
10.12.1.0       2.2.2.2         1089        0x80000001 0x008DF3 0
R3#sh ip ro | b las
Gateway of last resort is not set

      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
O E2     10.1.1.0/24 [110/20] via 10.23.1.2, 00:00:07, FastEthernet0/0
O E2     10.2.2.0/24 [110/20] via 10.23.1.2, 00:01:07, FastEthernet0/0
O E2     10.3.3.0/24 [110/20] via 10.23.1.2, 00:01:07, FastEthernet0/0
O E2     10.12.1.0/24 [110/20] via 10.23.1.2, 00:01:07, FastEthernet0/0
C        10.23.1.0/24 is directly connected, FastEthernet0/0
L        10.23.1.3/32 is directly connected, FastEthernet0/0
R3#sh ip os d

            OSPF Router with ID (3.3.3.3) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         88          0x80000004 0x0026AE 1
3.3.3.3         3.3.3.3         532         0x80000002 0x00E5E9 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.23.1.3       3.3.3.3         532         0x80000001 0x004FA5

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
10.1.1.0        2.2.2.2         18          0x80000001 0x00127A 0
10.2.2.0        2.2.2.2         78          0x80000001 0x00FA8F 0
10.3.3.0        2.2.2.2         78          0x80000001 0x00E3A4 0
10.12.1.0       2.2.2.2         78          0x80000001 0x008DF3 0

EIGRPからOSPFへ再配送された経路情報はLSA type5としてR2(ASBR)が生成し、OSPFドメイン内のルータ(R2,R3)はOSPF externalルートとして経路を学習しています。
※R2ではAD値の関係からEIGRPで学習した経路情報をルーティングテーブルに載せています。

distribute-listをR2に適用する

下記コンフィグをR2に投入します。

router ospf 1
 distribute-list 10 out
!
access-list 10 deny   10.1.1.0 0.0.0.255
access-list 10 permit any

distribute-list適用後の状態

distribute-list適用後のルーティングテーブルとLSDBを確認します。

まずは、ルーティングテーブルから。

R2(config-router)#do sh ip ro | b las
Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
C        2.2.2.2 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
D        10.1.1.0/24 [90/156160] via 10.12.1.1, 00:27:49, FastEthernet0/0
D        10.2.2.0/24 [90/156160] via 10.12.1.1, 00:27:49, FastEthernet0/0
D        10.3.3.0/24 [90/156160] via 10.12.1.1, 00:27:49, FastEthernet0/0
C        10.12.1.0/24 is directly connected, FastEthernet0/0
L        10.12.1.2/32 is directly connected, FastEthernet0/0
C        10.23.1.0/24 is directly connected, FastEthernet1/0
L        10.23.1.2/32 is directly connected, FastEthernet1/0

R3#sh ip ro | b las
Gateway of last resort is not set

      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O E2     10.2.2.0/24 [110/20] via 10.23.1.2, 00:01:15, FastEthernet0/0
O E2     10.3.3.0/24 [110/20] via 10.23.1.2, 00:01:15, FastEthernet0/0
O E2     10.12.1.0/24 [110/20] via 10.23.1.2, 00:01:15, FastEthernet0/0
C        10.23.1.0/24 is directly connected, FastEthernet0/0
L        10.23.1.3/32 is directly connected, FastEthernet0/0

R2ではEIGRPで10.1.1.0/24の経路を学習しているため、ルーティングテーブルに変化はありません。
R3では10.1.1.0/24の経路がルーティングテーブルから消えていることがわかります。

続いて、LSDB。

R2(config-router)#do sh ip os d

            OSPF Router with ID (2.2.2.2) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         1192        0x80000004 0x0026AE 1
3.3.3.3         3.3.3.3         1638        0x80000002 0x00E5E9 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.23.1.3       3.3.3.3         1638        0x80000001 0x004FA5

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
10.2.2.0        2.2.2.2         1182        0x80000001 0x00FA8F 0
10.3.3.0        2.2.2.2         1182        0x80000001 0x00E3A4 0
10.12.1.0       2.2.2.2         1182        0x80000001 0x008DF3 0
R2(config-router)#


R3#sh ip os d

            OSPF Router with ID (3.3.3.3) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         85          0x80000002 0x002AAC 1
3.3.3.3         3.3.3.3         84          0x80000002 0x00E5E9 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.23.1.3       3.3.3.3         84          0x80000001 0x004FA5

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
10.2.2.0        2.2.2.2         122         0x80000001 0x00FA8F 0
10.3.3.0        2.2.2.2         122         0x80000001 0x00E3A4 0
10.12.1.0       2.2.2.2         125         0x80000001 0x008DF3 0

注目すべきは、R2のLSDBです。type-5の一覧からLink ID 10.1.1.0の情報が載っていないことから、R2(ASBR)は10.1.1.0/24のLSA type5を生成していないことが言えます。

このことから、OSPFにおいて、distribute-listをout方向に適用すると、EIGRPからOSPFに再配送後から、LSDB構築前までのプロセスに影響を及ぼしていることがわかります。

検証構成2


同様な構成で、今度はR3にdistribute-listをin方向で適用し、10.1.1.0/24の経路を除外するよう構築してみます。

distribute-listをR3に適用する

下記コンフィグをR3に投入します。なお、検証構成1でR2に投入したコンフィグは予め削除しています。

router ospf 1
 distribute-list 10 in
!
access-list 10 deny   10.1.1.0 0.0.0.255
access-list 10 permit any

distribute-list適用後の状態

distribute-list適用後のルーティングテーブルとLSDBを確認します。なお、R2はコンフィグ投入前後で変化がないため割愛します。

まずは、ルーティングテーブルから。

R3(config-router)#do sh ip ro | b las
Gateway of last resort is not set

      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O E2     10.2.2.0/24 [110/20] via 10.23.1.2, 00:03:12, FastEthernet0/0
O E2     10.3.3.0/24 [110/20] via 10.23.1.2, 00:03:12, FastEthernet0/0
O E2     10.12.1.0/24 [110/20] via 10.23.1.2, 00:03:12, FastEthernet0/0
C        10.23.1.0/24 is directly connected, FastEthernet0/0
L        10.23.1.3/32 is directly connected, FastEthernet0/0

10.1.1.0/24の経路が除外されていることがわかります。

次に、LSDB。

R3(config-router)#do sh ip os d

            OSPF Router with ID (3.3.3.3) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         341         0x80000002 0x002AAC 1
3.3.3.3         3.3.3.3         340         0x80000002 0x00E5E9 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.23.1.3       3.3.3.3         340         0x80000001 0x004FA5

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
10.1.1.0        2.2.2.2         345         0x80000001 0x00127A 0
10.2.2.0        2.2.2.2         375         0x80000001 0x00FA8F 0
10.3.3.0        2.2.2.2         375         0x80000001 0x00E3A4 0
10.12.1.0       2.2.2.2         386         0x80000001 0x008DF3 0

LSA type-5にLink ID 10.1.1.0が載っていることがわかります。
このことから、OSPFにおいて、distribute-listをin方向に適用すると、LSDB構築後から、ルーティングテーブル作成までのプロセスに影響を及ぼしていると推測できます。

したがって、distribute-listの適用方向によって、影響を及ぼす箇所(チェックポイント)は下記のような違いがあるといえます。

なぜdistribute-listの適用方向ごとに異なるのか【考察】

上記の検証より、distribute-listの適用方向によって、distribute-listのチェックポイントが異なることがわかりました。一見すると、適用方向に関係なく、LSDB構築前(あるいは後)で統一してもよさそうに見えます。なぜこのような違いがあるのかを考察してみます。

結論的には、同一エリア内のOSPFルータは同じトポロジーマップ(=LSDB)を持つ必要があるという仕様により、distribute-listのチェックポイントが異なると言えます。

OSPFはネイバー確立後、自身のLSDBとほかのネイバーのLSDBを比較し合い、同期処理を行うことでアジャセンシーを確立します。アジャセンシー確立後、新たにLSDBに変化があった場合は、再同期処理を行うことで、同じLSDBを保つように動作します。

このような仕様のもと、例えば、distribute-listをin方向で適用した際、LSDB構築前にdistribute-listのチェックポイントが存在すると、LSDBの差分は存在し続けることになります(out方向でも同様に考えられる)。したがって、distribute-listのチェックポイントは適用方向によって異なる必要があると考えることができます。

まとめ

今回は、OSPFへの再配送時における、distribute-listによる経路制御を検証し、適用方向によってアルゴリズムに違いがあることがわかりました。それでは。