🤖

BGPのMEDの挙動確認

2024/04/18に公開

MEDの設定

MEDは、自分のASのどのルータにパケットを送付させるかを他ASに対して指示する。
このとき、MEDが小さい方のルートを選択される。

概論

例えば以下のようなトポロジを考える。

このとき、以下のようになる。

  • R3から1.1.1.0/24へのルートはR4→R1の経路になる。
  • R3から1.1.100.0/24へのルートはR5→R2の経路になる。

設定

  • R1→R4
    • 1.1.1.0/24はMED10 (こちらが優先される)
    • 1.1.100.0/24はMED20
  • R2→R5
    • 1.1.1.0/24はMED20
    • 1.1.100.0/24はMED10 (こちらが優先される)

以下のように設定する

R1(config)#access-list 1 permit 1.1.1.0
R1(config)#access-list 2 permit 1.1.100.0

R1(config)#route-map R-MED permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#set metric 10

R1(config)#route-map R-MED permit 20
R1(config-route-map)#match ip address 2
R1(config-route-map)#set metric 20

R1(config-route-map)#route-map R-MED permit 30

R1(config)#router bgp 10000
R1(config-router)#network 1.1.1.0 mask 255.255.255.0
R1(config-router)#network 1.1.100.0 mask 255.255.255.0
R1(config-router)#neighbor 20.0.0.254 remote-as 20000
R1(config-router)#neighbor 20.0.0.254 route-map R-MED out

R1から送られたUPDATEメッセージは以下。MEDアトリビュートが送られていることがわかる。

R2(config)#access-list 1 permit 1.1.1.0
R2(config)#access-list 2 permit 1.1.100.0

R2(config)#route-map R-MED permit 10
R2(config-route-map)#match ip address 1
R2(config-route-map)#set metric 20

R2(config)#route-map R-MED permit 20
R2(config-route-map)#match ip address 2
R2(config-route-map)#set metric 10

R2(config)#route-map R-MED permit 30

R2(config)#router bgp 10000
R2(config-router)#network 1.1.1.0 mask 255.255.255.0
R2(config-router)#network 1.1.100.0 mask 255.255.255.0
R2(config-router)#neighbor 30.0.0.254 remote-as 20000
R2(config-router)#neighbor 30.0.0.254 route-map R-MED out

R2から送られたUPDATEメッセージは以下。MEDアトリビュートが送られていることがわかる。

ルートの再配布

このとき、ルートは伝搬したがpingが通らない。
おそらく、[20,30].0.0.0/24のセグメントが広告されていないため。
R3~R5は(iBGPを使うため)フルメッシュ構成にしている。そのため、お互いへの経路は直接接続で知っている。
一方、[20,30].0.0.0/24のセグメントはR4, R5に直接接続されたルートなので、再広告しないといけない。

例えば、以下のように設定してもこれらのルートは広告されない。

R4(config-router)#network 20.0.0.254 mask 255.255.255.0

正しくは以下のように設定する。

R4(config-router)#redistribute connected
R5(config-router)#redistribute connected

結果として、BGPテーブルは以下のようになる。

R3#sh ip bgp   
   Network          Next Hop            Metric LocPrf Weight Path
*>i1.1.1.0/24       20.0.0.1                10    100      0 10000 i
*>i1.1.100.0/24     30.0.0.1                10    100      0 10000 i
*>i20.0.0.0/24      172.16.100.1             0    100      0 ?
*>i30.0.0.0/24      192.168.200.1            0    100      0 ?
r>i172.16.100.0/24  172.16.100.1             0    100      0 ?
*>i192.168.100.0    172.16.100.1             0    100      0 ?
* i                 192.168.200.1            0    100      0 ?
r>i192.168.200.0    192.168.200.1            0    100      0 ?

ルーティングテーブルは以下のようになる。BGPテーブルの>の数だけ、ルーティングテーブルに追加されている。

R3#sh ip route
Codes: 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

Gateway of last resort is not set

     1.0.0.0/24 is subnetted, 2 subnets
B       1.1.1.0 [200/10] via 20.0.0.1, 00:03:12
B       1.1.100.0 [200/10] via 30.0.0.1, 00:01:11
     20.0.0.0/24 is subnetted, 1 subnets
B       20.0.0.0 [200/0] via 172.16.100.1, 09:38:14
     172.16.0.0/24 is subnetted, 1 subnets
C       172.16.100.0 is directly connected, FastEthernet0/0
C    192.168.200.0/24 is directly connected, FastEthernet0/1
B    192.168.100.0/24 [200/0] via 172.16.100.1, 09:38:14
     30.0.0.0/24 is subnetted, 1 subnets
B       30.0.0.0 [200/0] via 192.168.200.1, 09:38:23

以上でMEDの設定はおしまい。
MEDを設定することで、他のASに出るときのルートを選択できることがわかった。

検証

1.1.1.254に疎通できることを確認。

R3#ping 1.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/38/44 ms

1.1.100.1に疎通できることを確認。

R3#ping 1.1.100.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.100.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/46/68 ms

Discussion