OSPF の distribute-list in を使うと、特定の経路をルーティングテーブルに入れないようにできます。ただし OSPF では、同じエリアのルータ同士で LSDB(Link State Database)を同じ内容にそろえる必要があるため、LSDB そのものはフィルタできません。distribute-list が効くのは、LSDB から計算した経路をルーティングテーブルに入れるところだけです。この記事では、この動きを実機の出力で確かめ、使うときの注意点をまとめます。
- ACL と
distribute-list inで特定の経路を止める設定 - フィルタしたルータのルーティングテーブルと LSDB の違い
- ほかのルータには経路が残り、通信が途中で捨てられること
検証構成
R1・R2・R3 を一列につなぎ、すべてエリア0にします。R1 のループバック 1.1.1.1/32 を OSPF で広告し、真ん中の R2 で distribute-list を設定します。R3 では、R2 のフィルタがほかのルータに影響するかを確かめます。
OSPF の基本設定
R1
R1(config)#router ospf 1 R1(config-router)#network 1.1.1.1 0.0.0.0 area 0 R1(config-router)#network 192.168.12.0 0.0.0.255 area 0
R2
R2(config)#router ospf 1 R2(config-router)#network 192.168.12.0 0.0.0.255 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 192.168.23.0 0.0.0.255 area 0
R2 と R3 のルーティングテーブルを確認します。どちらも 1.1.1.1/32 を学習しています。
R2
R2#show ip route ospf
O 1.1.1.1 [110/2] via 192.168.12.1, 00:32:15, FastEthernet0/0.12
R3
R3#show ip route ospf
O 1.1.1.1 [110/3] via 192.168.23.2, 00:32:12, FastEthernet0/0.23
O 192.168.12.0/24 [110/2] via 192.168.23.2, 00:32:12, FastEthernet0/0.23
アクセスリストを作る
1.1.1.1 を拒否し、ほかはすべて許可する標準 ACL を作ります。distribute-list で使う標準 ACL は、経路のネットワークアドレスと照合されます。ACL は最後に「すべて拒否」が暗黙で入るので、permit any がないとすべての OSPF 経路が止まります。
R2
R2(config)# access-list 1 deny 1.1.1.1
R2(config)# access-list 1 permit any
distribute-list を適用する
OSPF のプロセスに、作った ACL を distribute-list 1 in で適用します。
R2
R2(config)# router ospf 1
R2(config-router)# distribute-list 1 in
フィルタの結果を確認する
R2:ルーティングテーブルから消える
R2 には OSPF の経路が1つもなくなり、show ip route 1.1.1.1 も % Network not in table になります。
R2# show ip route ospf
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
R2# show ip route 1.1.1.1
% Network not in table
R3:ルーティングテーブルに残る
R3 には 1.1.1.1/32 が残っています。from 1.1.1.1 は、この経路の情報を作ったルータ(R1 のルータ ID)です。R2 のフィルタは R3 には伝わりません。
R3# show ip route ospf
O 1.1.1.1 [110/3] via 192.168.23.2, 00:41:14, FastEthernet0/0.23
O 192.168.12.0/24 [110/2] via 192.168.23.2, 00:41:14, FastEthernet0/0.23
R3# show ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "ospf 1", distance 110, metric 3, type intra area
Last update from 192.168.23.2 on FastEthernet0/0.23, 00:41:31 ago
Routing Descriptor Blocks:
* 192.168.23.2, from 1.1.1.1, 00:41:31 ago, via FastEthernet0/0.23
Route metric is 3, traffic share count is 1
R2 の LSDB:情報は残っている
R2 の LSDB には、R1 のルータ LSA がそのまま入っています。
R2# show ip ospf database
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
1.1.1.1 1.1.1.1 723 0x80000004 0x004ADA 2
2.2.2.2 2.2.2.2 748 0x80000005 0x00D544 2
3.3.3.3 3.3.3.3 719 0x80000003 0x000210 1
Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
192.168.12.2 2.2.2.2 748 0x80000002 0x008D20
192.168.23.3 3.3.3.3 719 0x80000002 0x004055
| 表示 | 意味 |
|---|---|
| Link ID 1.1.1.1 | R1 のルータ LSA(タイプ1)。ルータ LSA の Link ID はルータ ID なので、この 1.1.1.1 はプレフィックスではなく R1 自身を表します |
| Link count 2 | R1 のルータ LSA に入っているリンクの数。ループバックの 1.1.1.1/32 はスタブのリンクとしてここに含まれ、もう1つは R1–R2 間のセグメント(192.168.12.0/24。DR は 192.168.12.2)へのトランジットリンクです |
R2 は LSDB に 1.1.1.1/32 の情報を持ったまま SPF 計算をし、その結果をルーティングテーブルに入れる段階で distribute-list に止められています。R2 は LSDB をそのまま R3 と同期するので、R3 は 1.1.1.1/32 を計算できます。
注意点
ほかのルータには経路が残る
distribute-list はフィルタしたルータ自身のルーティングテーブルにしか効きません。エリア内の LSDB は同期したままなので、ほかのルータは今までどおり経路を計算します。ネットワーク全体で経路を止めたいときには使えません。
通信が途中で捨てられる
R3 は 1.1.1.1 への経路を持っているので、R2 に向けてパケットを送ります。しかし R2 には経路がないので、パケットは R2 で捨てられます。R3 からトレースルートすると、2ホップ目で R2 から !H が返ります。
R3# traceroute 1.1.1.1
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
1 192.168.23.2 12 msec 24 msec 20 msec
2 192.168.23.2 !H !H !H
| 表示 | 意味 |
|---|---|
| !H | ICMP Destination Unreachable(タイプ3)のコード1、Host Unreachable を受け取った。宛先への経路がない R2 が返しています |
この検証では R2 にほかの経路がないので、パケットは捨てられるだけです。R2 がデフォルトルートなど別の経路を持っていて、それが R3 の方向を向いていると、R2 と R3 の間でパケットが行き来するルーティングループになります。
原因を見つけにくい
経路が消えたルータでも、OSPF のネイバーや LSDB は正常に見えます。show ip ospf database には情報があるのに show ip route に経路がないときは、distribute-list を疑って show running-config | section router ospf などで設定を確認します。
まとめ
| 項目 | distribute-list in(OSPF) |
|---|---|
| 止めるもの | 設定したルータのルーティングテーブルに入る経路 |
| 止めないもの | LSDB と LSA の伝わり方(ほかのルータには影響しない) |
| 注意点 | ほかのルータは経路を持つので、通信が途中で捨てられたり、別の経路があるとループしたりする |
エリアの外へ経路を出さないようにしたいときは、ABR で LSA タイプ3 をフィルタする area filter-list のように、LSA の段階で止める方法を検討します。
コメント