概要

インターネット接続を冗長化しているマルチホームASでのBGPの設定例です。以下の項目について詳しく設定します。

  • ルートフィルタ
  • IGPとBGPの連携

関連記事

このページの設定例を理解するためには、以下の内容が前提です。

ネットワーク構成

図 マルチホームAS BGP設定例 ネットワーク構成
図 マルチホームAS BGP設定例 ネットワーク構成

AS100はAS1およびAS2と接続しているマルチホームASです。AS100とAS1、AS2との境界に位置するR1、R2を中心としてマルチホームASの設定を考えます。

図にある青い矢印がEBGPネイバーを表しています。R1とR2がそれぞれISP1、ISP2との間でEBGPネイバーを構成しています。また、ISP1とISP2もEBGPネイバーを構成しています。AS100内部はOSPFでルーティングを行っています。

各AS内のネットワークは次のように想定しています。

ASネットワークアドレス
AS100100.100.1.0/24
100.100.2.0/24
100.100.3.0/24
AS1100.1.1.0/24
100.1.2.0/24
100.1.3.0/24
AS2100.2.1.0/24
100.2.2.0/24
100.2.3.0/24
その他インターネット111.1.1.0/24
222.2.2.0/24
150.1.0.0/16
150.2.0.0/16
表 AS内のネットワーク

BGPルータは、これらのネットワークのルート情報をBGPでアドバタイズしています。AS内部のプライベートアドレスやAS間のネットワークについては、BGPでアドバタイズしません。

各ルータの設定の抜粋

各ルータのBGPおよびOSPFに関する設定の抜粋です。

R1 初期設定(Click)

router ospf 1
 router-id 1.1.1.1
 log-adjacency-changes
 network 1.1.1.1 0.0.0.0 area 0
 network 192.168.13.0 0.0.0.255 area 0
!
router bgp 100
 no synchronization
 bgp log-neighbor-changes
 network 100.100.1.0 mask 255.255.255.0
 network 100.100.2.0 mask 255.255.255.0
 network 100.100.3.0 mask 255.255.255.0
 neighbor 172.16.1.11 remote-as 1
 neighbor 172.16.1.22 remote-as 2
 no auto-summary

R2 初期設定(Click)

router ospf 1
 router-id 2.2.2.2
 log-adjacency-changes
 network 2.2.2.2 0.0.0.0 area 0
 network 192.168.23.0 0.0.0.255 area 0
!
router bgp 100
 no synchronization
 bgp log-neighbor-changes
 network 100.100.1.0 mask 255.255.255.0
 network 100.100.2.0 mask 255.255.255.0
 network 100.100.3.0 mask 255.255.255.0
 neighbor 172.16.1.11 remote-as 1
 neighbor 172.16.1.22 remote-as 2
 no auto-summary

R3 初期設定(Click)

router ospf 1
 router-id 3.3.3.3
 log-adjacency-changes
 network 100.100.0.0 0.0.255.255 area 0
 network 192.168.0.0 0.0.255.255 area 0

ISP1 初期設定(Click)

router bgp 1
 bgp log-neighbor-changes
 network 100.1.1.0 mask 255.255.255.0
 network 100.1.2.0 mask 255.255.255.0
 network 100.1.3.0 mask 255.255.255.0
 network 111.1.1.0 mask 255.255.255.0
 network 150.1.0.0
 neighbor 172.16.1.1 remote-as 100
 neighbor 172.16.1.1 route-map Lo1 out
 neighbor 172.16.1.2 remote-as 100
 neighbor 172.16.1.2 route-map Lo1 out
 neighbor 172.16.1.22 remote-as 2
 neighbor 172.16.1.22 route-map Lo1 out
 no auto-summary
!
access-list 1 permit 111.1.1.0
access-list 1 permit 150.1.0.0
route-map Lo1 permit 10
 match ip address 1
 set as-path prepend 11 111
!
route-map Lo1 permit 1000

ISP2 初期設定(Click)

router bgp 2
 no synchronization
 bgp log-neighbor-changes
 network 100.2.1.0 mask 255.255.255.0
 network 100.2.2.0 mask 255.255.255.0
 network 100.2.3.0 mask 255.255.255.0
 network 150.2.0.0
 network 222.2.2.0
 neighbor 172.16.1.1 remote-as 100
 neighbor 172.16.1.1 route-map Lo1 out
 neighbor 172.16.1.2 remote-as 100
 neighbor 172.16.1.2 route-map Lo1 out
 neighbor 172.16.1.11 remote-as 1
 neighbor 172.16.1.11 route-map Lo1 out
 no auto-summary
!
!
route-map Lo1 permit 10
 match ip address 1
 set as-path prepend 22 222
!
route-map Lo1 permit 1000

ルートフィルタの設定

トランジットASにならないようにするために、マルチホームASではBGPでルートを送信するとき、自AS内のルート情報のみを送信するというフィルタをかけます。

現在フィルタをかけていない状態です。まずは、このときR1がどのようにISP1およびISP2にBGPでルートを送受信しているかを確認しましょう。そのために、R1がISP1から受信しているルートとISP2へ送信しているルートを確認します。

R1がISPから受信したルート情報

R1#sh ip bgp neighbors 172.16.1.11 routes 

   Network          Next Hop            Metric LocPrf Weight Path
*> 100.1.1.0/24     172.16.1.11              0             0 1 i
*> 100.1.2.0/24     172.16.1.11              0             0 1 i
*> 100.1.3.0/24     172.16.1.11              0             0 1 i
*  100.2.1.0/24     172.16.1.22                            0 1 2 i
*  100.2.2.0/24     172.16.1.22                            0 1 2 i
*  100.2.3.0/24     172.16.1.22                            0 1 2 i
*> 111.1.1.0/24     172.16.1.11              0             0 1 11 111 i
*> 150.1.0.0        172.16.1.11              0             0 1 11 111 i
*  150.2.0.0        172.16.1.22                            0 1 2 22 222 i
*  222.2.2.0        172.16.1.22                            0 1 2 22 222 i

Total number of prefixes 10 

R1がISP2へ送信しているルート情報

R1#show ip bgp neighbors 172.16.1.22 advertised-routes 

   Network          Next Hop            Metric LocPrf Weight Path
*> 100.1.1.0/24     172.16.1.11              0             0 1 i
*> 100.1.2.0/24     172.16.1.11              0             0 1 i
*> 100.1.3.0/24     172.16.1.11              0             0 1 i
*> 100.100.1.0/24   192.168.13.3             2         32768 i
*> 100.100.2.0/24   192.168.13.3             2         32768 i
*> 100.100.3.0/24   192.168.13.3             2         32768 i
*> 111.1.1.0/24     172.16.1.11              0             0 1 11 111 i
*> 150.1.0.0        172.16.1.11              0             0 1 11 111 i

ハイライトしている部分をみると、R1はISP1から受信したルート情報のうちベストパスになっているルートをそのままISP2へ送信していることがわかります。

図 R1 BGPルートのアドバタイズ
図 R1 BGPルートのアドバタイズ

また、ISP2でR1から受信したルートも確認してみます。

ISP2がR1から受信したルート情報

ISP2#show ip bgp neighbors 172.16.1.1 routes
BGP table version is 59, local router ID is 222.2.2.22
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  100.1.1.0/24     172.16.1.11                            0 100 1 i
*  100.1.2.0/24     172.16.1.11                            0 100 1 i
*  100.1.3.0/24     172.16.1.11                            0 100 1 i
*  100.100.1.0/24   172.16.1.1               2             0 100 i
*  100.100.2.0/24   172.16.1.1               2             0 100 i
*  100.100.3.0/24   172.16.1.1               2             0 100 i
*  111.1.1.0/24     172.16.1.11                            0 100 1 11 111 i
*  150.1.0.0        172.16.1.11                            0 100 1 11 111 i

Total number of prefixes 8

これを見ると、ISP1→R1→ISP2と伝わってきたルート情報はベストパスにはなっていません。そのため、ISP2から150.1.0.0/16などへパケットをルーティングするときR1へ転送することはないのですが、このような無駄なルート情報は他のASのBGPテーブルを混乱させてしまうことになります。同じことがR2でもいえます。

マルチホームASの構成では、無駄なルート情報を送信して、トランジットASになってしまうことがないようにルートフィルタを行います。ディストリビュートリストやプレフィクスリスト、フィルターリストなど、どのようなフィルタ方法でもトランジットASにならないようにすることができます。ただ、最も効率的なフィルタはフィルターリストによるフィルタです。BGPはAS単位でルートを考えるので、AS_PATHアトリビュートに基づくフィルタであるフィルターリストが最も効率的です。

R1では、次のようにAS_PATHアクセスリストを作成しネイバーに対して適用します。

R1 フィルターリストによるルートフィルタの設定

ip as-path access-list 1 permit ^$
!
router bgp 100
 neighbor 172.16.1.11 filter-list 1 out 
 neighbor 172.16.1.22 filter-list 1 out 

自AS内のルート情報のAS_PATHアトリビュートは空っぽで、正規表現では^$です。AS_PATHアトリビュートがからっぽのルート情報、つまり自AS内のルート情報のみをISP1およびISP2へ送信するという設定です。

図 フィルタリストの設定
図 フィルタリストの設定

ただし、フィルタを設定しただけでは反映されません。フィルタを適用したあとは、そのフィルタを反映させるためにBGPルートの再送信を行わなければいけません。その様子は次の通りです。

R1 BGPルートの再送信

R1#clear ip bgp * out 
R1#sh ip bgp neighbors 172.16.1.11 advertised-routes 
BGP table version is 91, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 100.100.1.0/24   192.168.13.3             2         32768 i
*> 100.100.2.0/24   192.168.13.3             2         32768 i
*> 100.100.3.0/24   192.168.13.3             2         32768 i

clear ip bgp * outでBGPルートを再送信しています。その後、R1からISP1へ送信されるルート情報を見ると、AS100内のルートのみが送信されていることがわかります。

ネイバーを維持したままルートを再び送受信する機能をルートリフレッシュ機能と呼びます。

IGPとBGPの連携の設定

R1およびR2はBGPでAS1、AS2やインターネット上のルート情報を学習できています。しかし、OSPFしか動作していないR3ではそれらのルート情報を学習できていません。この時点のR3のルーティングテーブルは次の通りです。

R3 ルーティングテーブル 再配送前

R3#show ip route 
-- omitted --

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/2] via 192.168.13.1, 03:19:05, FastEthernet0/0
C    192.168.13.0/24 is directly connected, FastEthernet0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/2] via 192.168.23.2, 03:19:05, FastEthernet0/1
     100.0.0.0/24 is subnetted, 3 subnets
C       100.100.1.0 is directly connected, Loopback0
C       100.100.2.0 is directly connected, Loopback0
C       100.100.3.0 is directly connected, Loopback0
C    192.168.23.0/24 is directly connected, FastEthernet0/1

R3のようなAS100内部のルータがインターネット側のルート情報を学習させるために、BGPルート情報をOSPFへ再配送します。再配送は境界のルータであるR1とR2で行います。

また、単純にBGPからOSPFへ再配送すると、OSPFのコンバージェンスに悪影響が出ることが考えられます。さらに、再配送されたルートの最適ルートをどうするかを考慮する必要もあります。単純に再配送するのではなく、再配送するルートをフィルタして絞り込んだり、シードメトリックを考慮した設定を行います。

今回のケーススタディでは、次の要件にしたがってBGPからOSPFへの再配送を行います。

<BGPからOSPFへの再配送の要件>

  • AS1およびAS2内のルートのみ再配送の対象とする
  • それ以外のインターネットのルートはデフォルトルートで到達可能にする
  • AS1内のネットワークへはR1を経由するように
  • AS2内のネットワークへはR2を経由するように
  • 上記以外のインターネットへのルートはR1とR2でロードバランスさせる

この要件に基づいてR1でBGPからOSPFへの再配送を行う設定は次のようになります。

R1 BGPからOSPFへの再配送

ip as-path access-list 2 permit ^1$
ip as-path access-list 3 permit ^2$
!
route-map BGP2OSPF permit 10
 match as-path 2 
 set metric 50
route-map BGP2OSPF permit 20
 match as-path 3 
 set metric 100
!
router ospf 1
 redistribute bgp 100 route-map BGP2OSPF subnets 
 default-information originate always

この設定について、もう少し詳しく解説します。

まず、再配送対象のルートを絞り込むためにAS_PATHアクセスリストを作成しています。それぞれのAS_PATHアクセスリストは次のようにルートを絞り込んでいます。

  • AS_PATHアクセスリスト2:AS1内部のルート
    • AS1内部のルートのAS_PATHアトリビュートは「1」
  • AS_PATHアクセスリスト3:AS2内部のルート
    • AS2内部のルートのAS_PATHアトリビュートは「2」

ip as-path access-list 2 permit ^1$
ip as-path access-list 3 permit ^2$

そして、BGPからOSPFへの再配送時にフィルタするルートマップ「BGP2OSPF」のmatch条件でこれらのAS_PATHアクセスリストを参照しています。R1では、AS1内部のルートのシードメトリックを50、AS2内部のルートのシードメトリックを100にしてBGPからOSPFへ再配送しています。それ以外のインターネットのルートは再配送されません。

route-map BGP2OSPF permit 10
 match as-path 2 
 set metric 50
route-map BGP2OSPF permit 20
 match as-path 3 
 set metric 100
!
router ospf 1
 redistribute bgp 100 route-map BGP2OSPF subnets 

さらに、インターネットに到達するためのデフォルトルートを生成しています。

router ospf 1
 default-information originate always

R2では、シードメトリックの値が違うぐらいでR1とほとんど同じ設定です。R2の設定は次のようになります。

R2 BGPからOSPFへの再配送

ip as-path access-list 2 permit ^1$
ip as-path access-list 3 permit ^2$
!
route-map BGP2OSPF permit 10
 match as-path 2 
 set metric 100
route-map BGP2  OSPF permit 20
 match as-path 3 
 set metric 50
!
router ospf 1
 redistribute bgp 100 route-map BGP2OSPF subnets 
 default-information originate always

ここまでの設定によって、アドバタイズされるOSPFの外部ルートを示したものが次の図です。

図 OSPF外部ルートのアドバタイズ
図 OSPF外部ルートのアドバタイズ

R1とR2でBGPからOSPFへ再配送したことによって、R3のルーティングテーブルは次のように変化します。

R3 ルーティングテーブル 再配送後

R3#show ip route 
-- omitted --

Gateway of last resort is 192.168.13.1 to network 0.0.0.0

     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/2] via 192.168.13.1, 00:02:25, FastEthernet0/0
C    192.168.13.0/24 is directly connected, FastEthernet0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/2] via 192.168.23.2, 00:02:25, FastEthernet0/1
     100.0.0.0/24 is subnetted, 9 subnets
C       100.100.1.0 is directly connected, Loopback0
C       100.100.2.0 is directly connected, Loopback0
C       100.100.3.0 is directly connected, Loopback0
O E2    100.2.2.0 [110/50] via 192.168.23.2, 00:02:26, FastEthernet0/1
O E2    100.1.1.0 [110/50] via 192.168.13.1, 00:02:26, FastEthernet0/0
O E2    100.2.3.0 [110/50] via 192.168.23.2, 00:02:26, FastEthernet0/1
O E2    100.1.3.0 [110/50] via 192.168.13.1, 00:02:26, FastEthernet0/0
O E2    100.2.1.0 [110/50] via 192.168.23.2, 00:02:27, FastEthernet0/1
O E2    100.1.2.0 [110/50] via 192.168.13.1, 00:02:27, FastEthernet0/0
C    192.168.23.0/24 is directly connected, FastEthernet0/1
O*E2 0.0.0.0/0 [110/1] via 192.168.13.1, 00:02:25, FastEthernet0/0
               [110/1] via 192.168.23.2, 00:02:25, FastEthernet0/1

BGPの仕組み