IOS で MED は除去出来ない?
Cisco IOS で「BGP の MED 属性を(ゼロでは無く)除去し、missing な状態に戻して広告出来るか?」試してみました。結論から述べると上手くいきませんでした。機会があれば「何か方法が無いか?」を深掘りしてみようと思います。また、IOS-XR や NX-OS、JUNOS での振る舞いも、改めて確認してみようと思います。
構成
以下の構成で検証しました。
ルータはいずれも以下を用いました。
コンフィグ
R1 のコンフィグ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | hostname R1
!
interface Loopback1
ip address 10.0.0.1 255.255.255.255
ip ospf cost 10
!
interface Loopback2
ip address 10.0.0.2 255.255.255.255
ip ospf cost 10
!
interface Loopback3
ip address 10.0.0.3 255.255.255.255
ip ospf cost 10
!
interface Loopback4
ip address 10.0.0.4 255.255.255.255
ip ospf cost 10
!
interface Loopback5
ip address 10.0.0.5 255.255.255.255
ip ospf cost 10
!
interface GigabitEthernet0/1
ip address 10.0.12.1 255.255.255.0
no shutdown
!
router ospf 65001
network 10.0.0.1 0.0.0.0 area 0.0.0.0
network 10.0.0.2 0.0.0.0 area 0.0.0.0
network 10.0.0.3 0.0.0.0 area 0.0.0.0
network 10.0.0.4 0.0.0.0 area 0.0.0.0
network 10.0.0.5 0.0.0.0 area 0.0.0.0
network 10.0.12.0 0.0.0.255 area 0.0.0.0
!
end
|
R2 のコンフィグ
既にコンフィグ時点で「route-map 上で MED (metric) を除去する書き方が出来ない」という問題があります (route-map「CONTROL-MED」の seq 10)。これでは MED を除去出来なくても当然です…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | hostname R2
!
interface GigabitEthernet0/1
ip address 10.0.12.2 255.255.255.0
ip ospf cost 200
no shutdown
!
interface GigabitEthernet0/2
ip address 10.0.23.2 255.255.255.0
no shutdown
!
router ospf 65001
network 10.0.12.0 0.0.0.255 area 0.0.0.0
!
router bgp 65001
redistribute ospf 65001
neighbor 10.0.23.3 remote-as 65002
neighbor 10.0.23.3 route-map CONTROL-MED out
!
ip prefix-list PREFIX-1 seq 1 permit 10.0.0.1/32
ip prefix-list PREFIX-2 seq 1 permit 10.0.0.2/32
ip prefix-list PREFIX-3 seq 1 permit 10.0.0.3/32
!
route-map CONTROL-MED permit 10
match ip address prefix-list PREFIX-1
!
route-map CONTROL-MED permit 20
match ip address prefix-list PREFIX-2
set metric 0
!
route-map CONTROL-MED permit 30
match ip address prefix-list PREFIX-3
set metric +3000
!
route-map CONTROL-MED permit 40
set metric 3000
!
end
|
R3 のコンフィグ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | hostname R3
!
interface GigabitEthernet0/1
ip address 10.0.23.3 255.255.255.0
no shutdown
!
router bgp 65002
neighbor 10.0.23.2 remote-as 65001
neighbor 10.0.23.2 route-map MED+40000 in
!
ip prefix-list PREFIX-4 seq 1 permit 10.0.0.4/32
!
route-map MED+40000 permit 10
match ip address prefix-list PREFIX-4
set metric +40000
route-map MED+40000 permit 20
!
end
|
状態確認
R1 での状態確認
OSPF の RIB (Routing Information Base) を確認します。Loopback が RIB 上に存在することが分かります。但し、自ルータ上に直接接続 (directly connected) として接続されている経路なので、Best には選出されません (「>」が付与されていない)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | R1# show ip ospf rib
OSPF Router with ID (10.0.0.3) (Process ID 65001)
Base Topology (MTID 0)
OSPF local RIB
Codes: * - Best, > - Installed in global RIB
* 10.0.0.1/32, Intra, cost 10, area 0.0.0.0, Connected
via 10.0.0.1, Loopback1
* 10.0.0.2/32, Intra, cost 10, area 0.0.0.0, Connected
via 10.0.0.2, Loopback2
* 10.0.0.3/32, Intra, cost 10, area 0.0.0.0, Connected
via 10.0.0.3, Loopback3
* 10.0.0.4/32, Intra, cost 10, area 0.0.0.0, Connected
via 10.0.0.4, Loopback4
* 10.0.0.5/32, Intra, cost 10, area 0.0.0.0, Connected
via 10.0.0.5, Loopback5
* 10.0.12.0/24, Intra, cost 1, area 0.0.0.0, Connected
via 10.0.12.1, GigabitEthernet0/1
|
R2 での状態確認
R1 と同様に、OSPF の RIB を確認します。R1 の Loopback を受信しており、Best にも選出されていることが分かります (「>」が付与されている)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | R2# show ip ospf rib
OSPF Router with ID (10.0.23.2) (Process ID 65001)
Base Topology (MTID 0)
OSPF local RIB
Codes: * - Best, > - Installed in global RIB
*> 10.0.0.1/32, Intra, cost 210, area 0.0.0.0
via 10.0.12.1, GigabitEthernet0/1
*> 10.0.0.2/32, Intra, cost 210, area 0.0.0.0
via 10.0.12.1, GigabitEthernet0/1
*> 10.0.0.3/32, Intra, cost 210, area 0.0.0.0
via 10.0.12.1, GigabitEthernet0/1
*> 10.0.0.4/32, Intra, cost 210, area 0.0.0.0
via 10.0.12.1, GigabitEthernet0/1
*> 10.0.0.5/32, Intra, cost 210, area 0.0.0.0
via 10.0.12.1, GigabitEthernet0/1
* 10.0.12.0/24, Intra, cost 200, area 0.0.0.0, Connected
via 10.0.12.2, GigabitEthernet0/1
|
ルーティングテーブルを確認すると確かに、R1 から OSPF で学習した経路がインストールされていることを確認出来ます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | 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
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 9 subnets, 2 masks
O 10.0.0.1/32 [110/210] via 10.0.12.1, 00:12:15, GigabitEthernet0/1
O 10.0.0.2/32 [110/210] via 10.0.12.1, 00:12:15, GigabitEthernet0/1
O 10.0.0.3/32 [110/210] via 10.0.12.1, 00:12:15, GigabitEthernet0/1
O 10.0.0.4/32 [110/210] via 10.0.12.1, 00:12:15, GigabitEthernet0/1
O 10.0.0.5/32 [110/210] via 10.0.12.1, 00:06:49, GigabitEthernet0/1
|
BGP テーブルを確認します。OSPF を BGP へ再配布しているので、OSPF で学習した R1 の Loopback がインストールされています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | R2# show ip bgp
BGP table version is 25, local router ID is 10.0.23.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.1/32 10.0.12.1 210 32768 ?
*> 10.0.0.2/32 10.0.12.1 210 32768 ?
*> 10.0.0.3/32 10.0.12.1 210 32768 ?
*> 10.0.0.4/32 10.0.12.1 210 32768 ?
*> 10.0.0.5/32 10.0.12.1 210 32768 ?
*> 10.0.12.0/24 0.0.0.0 0 32768 ?
|
R2 〜 R3 間の eBGP Neighbor に適用されている Prefix-List と Route-Map は以下です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | R2# show ip prefix-list
ip prefix-list PREFIX-1: 1 entries
seq 1 permit 10.0.0.1/32
ip prefix-list PREFIX-2: 1 entries
seq 1 permit 10.0.0.2/32
ip prefix-list PREFIX-3: 1 entries
seq 1 permit 10.0.0.3/32
R2# show route-map
route-map CONTROL-MED, permit, sequence 10
Match clauses:
ip address prefix-lists: PREFIX-1
Set clauses:
Policy routing matches: 0 packets, 0 bytes
route-map CONTROL-MED, permit, sequence 20
Match clauses:
ip address prefix-lists: PREFIX-2
Set clauses:
metric 0
Policy routing matches: 0 packets, 0 bytes
route-map CONTROL-MED, permit, sequence 30
Match clauses:
ip address prefix-lists: PREFIX-3
Set clauses:
metric +3000
Policy routing matches: 0 packets, 0 bytes
route-map CONTROL-MED, permit, sequence 40
Match clauses:
Set clauses:
metric 3000
Policy routing matches: 0 packets, 0 bytes
route-map MED+300, permit, sequence 10
Match clauses:
Set clauses:
metric +300
Policy routing matches: 0 packets, 0 bytes
|
属性の制御を表にすると以下の通りです。
経路 |
Prefix-List |
MED |
10.0.0.1/32 |
PREFIX-1 の seq 1 |
制御無し |
10.0.0.2/32 |
PREFIX-2 の seq 1 |
0 (ゼロ) |
10.0.0.3/32 |
PREFIX-3 の seq 1 |
+3,000 (3,000 加算) |
未設定 (上記以外の経路) |
未設定 |
3,000 (3,000 で上書き) |
Neighbor への advertised-routes を確認してみます。しかし、route-map が表示される前の状態が表示されている為、属性の状態を確認することが出来ません。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | R2# show ip bgp neighbors 10.0.23.3 advertised-routes
BGP table version is 25, local router ID is 10.0.23.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.1/32 10.0.12.1 210 32768 ?
*> 10.0.0.2/32 10.0.12.1 210 32768 ?
*> 10.0.0.3/32 10.0.12.1 210 32768 ?
*> 10.0.0.4/32 10.0.12.1 210 32768 ?
*> 10.0.0.5/32 10.0.12.1 210 32768 ?
*> 10.0.12.0/24 0.0.0.0 0 32768 ?
Total number of prefixes 6
|
よって、受信側である R3 で状態確認します。
R3 での状態確認
BGP テーブルを確認します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | R3# show ip bgp
BGP table version is 12, local router ID is 10.0.23.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.1/32 10.0.23.2 210 0 65001 ?
*> 10.0.0.2/32 10.0.23.2 0 0 65001 ?
*> 10.0.0.3/32 10.0.23.2 3000 0 65001 ?
*> 10.0.0.4/32 10.0.23.2 43000 0 65001 ?
*> 10.0.0.5/32 10.0.23.2 3000 0 65001 ?
*> 10.0.12.0/24 10.0.23.2 3000 0 65001 ?
|
表にまとめると以下の通りです。一部、属性が意図通りに受信出来ていません…
経路 |
意図した MED 値 |
実際の MED 値 |
意図した結果になったか? |
10.0.0.1/32 |
無し |
210 |
X |
10.0.0.2/32 |
0 |
210 |
○ |
10.0.0.3/32 |
3,210 |
3,000 |
X |
10.0.0.4/32 |
43,000 |
43,000 |
○ |
10.0.0.5/32 |
3,000 |
3,000 |
○ |
問題点は以下の 2 点です。
- 10.0.0.1/32 の MED が「missing」では無く、「210」になっている (※ これを「意図しない」というのはおかしく、R2 のコンフィグで記載した通り、そもそも MED を除去する意図の route-map が書けていないので、想定通りと言えば想定通り…)
- 10.0.0.3/32 が R2 からの広告時に MED を「+3,000」しているにも関わらず、R3 で受信後の MED 値は「3,000」になっている (「加算」では無く、「上書き」になっている。但し、R3 の受信側で設定している「+40,000」は効いている…)
最終的なルーティングテーブルは以下となりました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | R3# show ip route bgp
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
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
B 10.0.0.1/32 [20/210] via 10.0.23.2, 00:07:03
B 10.0.0.2/32 [20/0] via 10.0.23.2, 00:07:03
B 10.0.0.3/32 [20/3000] via 10.0.23.2, 00:07:03
B 10.0.0.4/32 [20/43000] via 10.0.23.2, 00:07:15
B 10.0.0.5/32 [20/3000] via 10.0.23.2, 00:07:03
B 10.0.12.0/24 [20/3000] via 10.0.23.2, 00:07:03
|