目次
概要
インターネット接続を冗長化しているマルチホームASでのBGPの設定例です。以下の項目について詳しく設定します。
- ルートフィルタ
- IGPとBGPの連携
関連記事
このページの設定例を理解するためには、以下の内容が前提です。
ネットワーク構成
AS100はAS1およびAS2と接続しているマルチホームASです。AS100とAS1、AS2との境界に位置するR1、R2を中心としてマルチホームASの設定を考えます。
図にある青い矢印がEBGPネイバーを表しています。R1とR2がそれぞれISP1、ISP2との間でEBGPネイバーを構成しています。また、ISP1とISP2もEBGPネイバーを構成しています。AS100内部はOSPFでルーティングを行っています。
各AS内のネットワークは次のように想定しています。
AS | ネットワークアドレス |
---|---|
AS100 | 100.100.1.0/24 100.100.2.0/24 100.100.3.0/24 |
AS1 | 100.1.1.0/24 100.1.2.0/24 100.1.3.0/24 |
AS2 | 100.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 |
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へ送信していることがわかります。
また、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の外部ルートを示したものが次の図です。
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の仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPピアグループ(Peer Group) ~ネイバーの設定をまとめよう~
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート -ORIGIN/AS_PATH/NEXT_HOP-
- 図解!BGPベストパス選択アルゴリズム
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP KEEPALIVEタイマ/ホールドタイムの設定
- BGPルート 最小送信間隔の設定
- BGPルートダンプニング
- マルチホーム – インターネット接続の冗長化 –
- マルチホームAS BGPルートフィルタのポイント
- マルチホームAS ベストパス選択のポイント
- マルチホームAS IGPとBGPの連携のポイント
- マルチホームAS BGPの設定例
- IP-VPNでのBGPの利用 設定例
- BGPルートフィルタの種類
- BGPルートフィルタ -ディストリビュートリスト-
- BGPルートフィルタ -ディストリビュートリスト設定例-
- BGPルートフィルタ -プレフィクスリスト-
- BGPルートフィルタ -プレフィクスリスト設定例-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)設定例-
- BGPルートフィルタ -ルートマップ(route-map)-
- BGPルートフィルタ -ルートマップ(route-map)設定例-
- BGP neighbor allowas-inコマンド
- BGP neighbor as-overrideコマンド
- BGPルート RIB Failure
- BGPルート アドミニストレイティブディスタンスの制御
- BGPルートの負荷分散
- BGPルート 条件付き生成
- BGPルート 条件付きアドバタイズ
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGPルート集約 networkコマンドによる集約 設定例
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- aggregate-addressコマンド as-set/attribute-map/advertise-map 設定例
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP 選択型集約 suppress-map/unsuppress-map 設定例
- BGP local-as ~ネイバーに他のASのように見せる~
- BGP neighbor remove-private-ASコマンド
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- [演習]BGP応用 Part1:BGP基本設定
- [演習]BGP応用 Part2:ルート集約
- [演習]BGP応用 Part3:ポリシーベースルーティング
- [演習]BGP応用 Part4:トラブルシューティング
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- BGP 設定ミスの切り分けと修正 Part7
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- 2021年10月4日 Facebookに何が起こったか?
- IPv4 BGPネイバーでのIPv6プレフィックスの交換