Cisco OSPF distribute-list in の動作仕様とルート再配送への影響

ルータ

検証環境

  • Cisco C891FJ-K9
    • バージョン:15.8(3)M9

OSPF における distribute-list in の動作

OSPF において、distribute-list in をインターフェースに対して設定することで、そのインターフェースで受信したルートをフィルタリングして、特定のルートをルーティングテーブルにインストールさせないようにすることができます。

例えば、以下のネットワークを考えます。

Router02 に注目すると、ルーティングテーブルの OSPF ルートは以下の通りです。

Router02#show ip route ospf
...
      1.0.0.0/32 is subnetted, 1 subnets
O        1.1.1.1 [110/2] via 10.1.100.1, 00:00:04, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/2] via 10.1.200.1, 00:00:04, Vlan200
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
O        10.11.0.0/24 [110/2] via 10.1.100.1, 00:00:04, Vlan100
O        10.13.0.0/24 [110/2] via 10.1.200.1, 00:00:04, Vlan200

ここで、Router02 にて Router03 の右側のセグメントの 10.13.0.0/24 宛のルートをルーティングテーブルにインストールさせないようにしてみます。例えば、以下のような distribute-list を Router03 向けのインターフェースである Vlan200 の in 方向に設定します。

router ospf 100
 distribute-list ospfdlist in Vlan200

ip access-list standard ospfdlist
 deny   10.13.0.0 0.0.0.255
 permit any

distribute-list を設定後の Router02 のルーティングテーブルを見てみると、以下のように 10.13.0.0/24 宛のルートが消えています。

Router02#show ip route ospf
...
      1.0.0.0/32 is subnetted, 1 subnets
O        1.1.1.1 [110/2] via 10.1.100.1, 00:02:14, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/2] via 10.1.200.1, 00:02:14, Vlan200
      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O        10.11.0.0/24 [110/2] via 10.1.100.1, 00:02:14, Vlan100

このように、distribute-list in を使用することで特定のルートをルーティングテーブルに載せないようにすることができます。

【注意】隣接するルータにはフィルタリングしたルートが広報されてしまう

OSPF では distribute-list in を使用することで、その設定をしたルータ自身のルーティングテーブルにはルートを載せないようにすることはできますが、隣接するルータにはフィルタリングしたルートは広報されてしまいます。

distribute-list in コマンドは、ルーティングテーブルに入るルートをフィルタ処理するだけであり、リンクステートパケットの伝達を防ぐわけではありません。そのため、このコマンドがルータメモリの節約を助けることはなく、ルータがフィルタ処理されたルートを他のルータに伝達することを防ぐこともありません。

https://www.cisco.com/c/ja_jp/support/docs/ip/open-shortest-path-first-ospf/9237-9.html#q12

上で示したネットワーク構成例で確認してみます。

Router02 に distribute-list in を設定した後、Router02 のルーティングテーブルでは 10.13.0.0/24 宛のルートが消えましたが、Router02 に隣接する Router01 のルーティングテーブルを確認してみます。

Router01#show ip route ospf
...
      2.0.0.0/32 is subnetted, 1 subnets
O        2.2.2.2 [110/2] via 10.1.100.254, 01:44:21, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/3] via 10.1.100.254, 01:44:57, Vlan100
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
O        10.1.200.0/24 [110/2] via 10.1.100.254, 01:46:26, Vlan100
O        10.13.0.0/24 [110/3] via 10.1.100.254, 01:46:26, Vlan100

上記の通り、Router01 のルーティングテーブルには 10.13.0.0/24 宛のルートが存在しており、Nexthop が Router02 となっています。

このため Router01 が 10.13.0.0/24 宛のパケットを受信した場合 Router02 にルーティングしてしまいますが、Router02 は 10.13.0.0/24 宛のルートを持たないため到達不能となります。

このように、OSPF で distribute-list in を設定するとネットワークに問題が発生する可能性があるため、distribute-list in を設定する場合は細心の注意を払う必要があります。

OSPF の distribute-list in のルート再配送への影響

上で説明した通り OSPF の distribute-list in は、当該ルータのルーティングテーブルにフィルタリングしたルートを載せないが、隣接ルータには当該ルートを広報するという仕様です。

ここで以下の点が気になりました。

  • OSPF の distribute-list in を設定しているルータで EIGRP も使用していて、かつ EIGRP で OSPF 再配送を設定している場合、OSPF の distribute-list in でフィルタされたルートは EIGRP に再配送されるのか?

以下のネットワーク構成で確認してみます。

前項で示していたネットワーク構成をベースに、Router01 – Router02 間を OSPF から EIGRP に変更し、Router02 では EIGRP で OSPF 再配送を設定しています。

上記構成でまず、Router02 の OSPF で distribute-list in を設定していない状態での Router01 のルーティングテーブルは以下の通りです。

Router01#show ip route eigrp
...
      2.0.0.0/32 is subnetted, 1 subnets
D EX     2.2.2.2 [170/3072] via 10.1.100.254, 00:16:57, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
D EX     3.3.3.3 [170/3072] via 10.1.100.254, 00:16:57, Vlan100
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
D EX     10.1.200.0/24 [170/3072] via 10.1.100.254, 00:16:57, Vlan100
D EX     10.13.0.0/24 [170/3072] via 10.1.100.254, 00:16:57, Vlan100

次に、Router02 の OSPF の設定にて以下の distribute-list in の設定を行い、Router03 から広報される 10.13.0.0/24 宛のルートを拒否します。

router ospf 100
 distribute-list ospfdlist in Vlan200

ip access-list standard ospfdlist
 deny   10.13.0.0 0.0.0.255
 permit any

上記設定をした後の Router01 のルーティングテーブルを確認してみます。

Router01#show ip route eigrp
...
      2.0.0.0/32 is subnetted, 1 subnets
D EX     2.2.2.2 [170/3072] via 10.1.100.254, 00:20:24, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
D EX     3.3.3.3 [170/3072] via 10.1.100.254, 00:00:47, Vlan100
      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
D EX     10.1.200.0/24 [170/3072] via 10.1.100.254, 00:20:24, Vlan100

上記の通り、Router01 で10.13.0.0/24 宛のルートが消えました。

この結果から OSPF の distribute-list in で拒否されたルートは EIGRP に再配送されないと言えます。

2方向からルート受信する場合での distribute-list in

上で使用していたネットワークに対して Router04 を追加した以下のネットワークを考えます。

このネットワークでは、Router03、Router04 の両方が背後にあるセグメント 10.13.0.0/24 へのルートを Router02 に広報するため、Router02 のルーティングテーブルは以下のようになります。

Router02#show ip route ospf
...
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/2] via 10.1.200.1, 00:00:05, Vlan200
      4.0.0.0/32 is subnetted, 1 subnets
O        4.4.4.4 [110/1] via 10.1.40.1, 00:00:05, Vlan300
      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
O        10.13.0.0/24 [110/2] via 10.1.200.1, 00:00:05, Vlan200
                      [110/2] via 10.1.40.1, 00:00:05, Vlan300

上記の通り 10.13.0.0/24 へのルートとして Router03 (Vlan200) 向けと Router04 (Vlan300) 向けの 2 つのルートが掲載されています(2 つのルートは等コストのため)。

ここで、再び Router02 にて以下のように Router03 向けの Vlan200 に対して distribute-list in を設定してみます。

router ospf 100
 distribute-list ospfdlist in Vlan200

ip access-list standard ospfdlist
 deny   10.13.0.0 0.0.0.255
 permit any

結果、Router02 のルーティングテーブルは以下のようになります。

Router02#show ip route ospf
...
      3.0.0.0/32 is subnetted, 1 subnets
O        3.3.3.3 [110/2] via 10.1.200.1, 00:02:12, Vlan200
      4.0.0.0/32 is subnetted, 1 subnets
O        4.4.4.4 [110/1] via 10.1.40.1, 00:02:12, Vlan300
      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
O        10.13.0.0/24 [110/2] via 10.1.40.1, 00:02:12, Vlan300

Router03 (Vlan200) 向けに対して distribute-list in を設定したので、Router03 から受信したルートは拒否されましたが、Router04 (Vlan300) から受信したルートは拒否されず、ルーティングテーブルに残っています。

さらに、この時の Router01 のルーティングテーブルも確認してみます。

Router01#show ip route eigrp
...
      2.0.0.0/32 is subnetted, 1 subnets
D EX     2.2.2.2 [170/3072] via 10.1.100.254, 01:42:46, Vlan100
      3.0.0.0/32 is subnetted, 1 subnets
D EX     3.3.3.3 [170/3072] via 10.1.100.254, 00:04:22, Vlan100
      4.0.0.0/32 is subnetted, 1 subnets
D EX     4.4.4.4 [170/3072] via 10.1.100.254, 00:04:22, Vlan100
      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
D EX     10.1.40.0/24 [170/3072] via 10.1.100.254, 00:45:46, Vlan100
D EX     10.1.200.0/24 [170/3072] via 10.1.100.254, 01:42:46, Vlan100
D EX     10.13.0.0/24 [170/3072] via 10.1.100.254, 00:04:22, Vlan100

上記の通りRouter01 にも 10.13.0.0/24 宛のルートが存在します。

Router02 のルーティングテーブルには Router04 から受信したルートが残っているので、そのルートが EIGRP に再配送されて Router01 へルートが広報されています。

Router02 にて、Router04 から受信した 10.13.0.0/24 へのルートに関しても拒否したい場合は、Router03 向けの Vlan200 に対して設定したのと同様に、Router04 向けの Vlan300 に対しても distribute-list in を設定する必要があります。

まとめ

  • OSPF の distribute-list in 設定は、当該設定をしたルータのルーティングテーブルには影響するが、隣接ルータへ広報されるルートには影響しない
    • この仕様が意図せずネットワークのルーティングの問題を引き起こすことがあるので、十分に注意する必要がある
  • OSPF の distribute-list in 設定を設定しているルータで EIGRP への OSPF再配送を設定している場合、distribute-list in で拒否されたルートは EIGRP に再配送されない

参考資料

OSPF:よく寄せられる質問(FAQ)
このドキュメントでは、OpenShortestPathFirst(OSPF)に関連付けられた特によく寄せられる質問(FAQ)を扱います。このドキュメントは、OSPFバージョン2のみをカバーします。CiscoIOSソフトウェアリリース12.0(24)S、12.2(18)S、および12.2(15)Tで導入されたOSPFバー...


タイトルとURLをコピーしました