ネットワーク技術

BGP4 ルート集約

ローカル ルートの集約

下記の図の構成で、R2はローカルで生成されたルート「10.0.0.0/24」「10.0.1.0/24」「10.0.2.0/24」「10.0.3.0/24」を集約します。

ルート集約する前のR1とR2は以下の様な設定をおこなっています。

BGPで集約するためには、集約しようとしている個々のルートが最低限ひとつBGPテーブルに存在する必要があります。 そのため、これから集約しようとしているルート「10.0.x.0/24」がBGPテーブルに存在することを確認します。

BGPテーブルの確認ができたので、集約ルートの追加をR2におこないます。集約ルートを追加するためにはaggregate-addressコマンドを実行します。

R2への設定追加が完了したので、R1とR2のBGPテーブルを表示させ、集約アドレスが存在することを確認します。

続いて、R1で集約ルート(10.0.0.0/22)の詳細情報を確認します。
集約ルートの属性がatomic-aggregateとなっているのは、集約によりAS情報が失われたことを意味しています。

併せて、R2でルーティングテーブルの確認を行います。以下のように、集約ルートへのネクストホップにNull0が自動的に挿入されます。

Null0が自動的に挿入される理由は、ルーティングループを防ぐためです。

ローカル ルートの再配信による集約

ローカル ルートの集約は再配信によって実現することもできます。connectルートを再配信するためには次のようにします。

R2がクラスフルサマリを生成しないように no auto-summary が必要であることに注意します。
no auto-summaryを実行しなかった場合、以下のようにクラスフル境界でアドバタイズされます。

次にR1とR2のルーティングテーブルを確認します。R1では集約ルート 10.0.0.0/8 が配信されています。また、R2には 10.0.0.0/8 へのNull0向けルートが自動的に挿入されていないことに注意してください。これはルーティングループを発生させる危険性があります。

学習した経路の集約

下記の図の構成で、R2はR3からプリフィックス 10.0.0.0/24 – 10.0.3.0/24を学習します。R2は学習したこれらのルートを10.0.0.0/22に集約します。

R1、R2、R3にはそれぞれ以下のような設定をおこなっています。

R1のBGPテーブルを表示させると集約ルートが含まれていることを確認することができます。

ASパス情報を見ると、集約ルートのみAS65002が生成しているように見えます。これはR2が集約をおこなった際にAS65003のパス情報が失われたためです。

R1で集約ルートの情報を表示させることにより、atomic属性を持っていることがわかります。atomic属性はASパス情報が失われたことを意味します。

ASパス情報を残してルート集約する

ここまで、ルート集約によりASパス情報が失われることを確認しました(atomic-aggregate)。次は、ASパス情報を残しながら集約ルートをアドバタイズできることを確認します。そして、ASパス情報が失われた場合と、ASパス情報を残してルート集約した場合の動作の違いを確認します。

下記の図のような構成で、R2はR1とR3からルートを学習します。

R1、R2、R3にはそれぞれ以下のような設定をおこなっています。

集約前に、それぞれのルーターのBGPテーブルを調べてプリフィックス 10.0.0.0/24 – 10.0.3.0/24が学習されていることを確認します。

次に、R2へ設定を追加して集約ルートのアドバタイズを有効にします。

R2でルート集約をおこなうと、集約ルートにはAS65001およびAS65003のルートが含まれます。R2は自分をネクストホップとする集約ルートをアドバタイズしますが、これはASパス情報が失われたことを意味します(atomic-aggregate)。そして、ASパス情報が失われているため、R1とR2は自分のルートを含む集約ルートを受け入れます。

では次に、ASパス情報を残して集約をおこなうために、R2で as-set オプションを使用します。

R2のBGPテーブルには集約ルートが存在していて、ASパス情報が失われていない事を確認します。

集約ルートの情報を調べると、ASパス情報が保存されている事が確認できます。

次にR1とR3のBGPテーブルを調べます。R1とR3は自分のAS番号がAS_PATH属性に含まれているため、集約ルートを拒否します。

集約ルートを制御する

「ASパス情報を残してルート集約する」では、R1とR3はAS_PATH属性に自分のAS番号が含まれているため集約ルートを拒否していることを確認しました。このセクションでは、集約ルートをAS65001にはアドバタイズしたくないが、AS65003にはアドバタイズしたい、といった具合に集約ルートを制御できることを確認します。

まず、R1とR3には集約ルートが存在しないことを確認します。

集約ルートをAS65001にアドバタイズせず、AS65003にアドバタイズするためには、AS_PATH属性にAS65001を含め、AS65003は含まないようにします。 この動作を制御するためには、advertise-mapオプションを使用します。まずは、アクセスリストでAS65001が生成するルートを集約ルートに含めるようにR2へ設定を追加します。

R1、R3のBGPテーブルを調べ、R3のBGPテーブルのみ集約ルートが存在することを確認します。また、集約ルートの生成元がAS65001であることも確認できます。

また、アクセスリストでなくAS番号で制御することもできます。R2を次のように設定しても、同様の制御ができます。

集約ルートの属性を変更する

属性を変更するためには、ルートマップを使用します。これまで、メトリックは初期値の0でアドバタイズされてきました。そこで、MED属性を変更してメトリックを100としてアドバタイズできることを確認します。

以下の構成で、R2はR1とR3からルートを学習し、学習したルートを集約してアドバタイズします。その際、MED属性を変更してメトリックを初期値の0から100に変更します。

R2は以下の設定をおこなっています。

現在のR1とR3のBGPテーブルを調べ、メトリックが0であることを確認します。

次に、R2でattribute-mapを使用してMED属性の値を100に変更します。

R1とR3のBGPテーブルを調べ、MED属性が変更されメトリックが100となっていることを確認します。

個々のルートを抑制する

以下の構成で、R2はR1とR3からルートを学習し、集約ルートをアドバタイズします。このセクションでは、R1とR3から学習した個々のルートのアドバタイズを抑制しながら集約ルートをアドバタイズできることを確認します。

R2は以下のように設定しています。

R1とR3のBGPテーブルには「10.0.0.0/24」「10.0.1.0/24」「10.0.2.0/24」「10.0.3.0/24」および集約ルート「10.0.0.0/22」が存在します。

BGPテーブルの確認ができたので、summary-onlyオプションを使用して個々のルートのアドバタイズを抑制します。

R1とR3のBGPテーブルを調べ、個々のルートが抑制され消えていることを確認します。

次にR2で抑制されたルートの詳細情報を調べます。

アドバタイズが抑制されたことが、このメッセージから確認できます。

個々のルートを部分的に抑制する

「個々のルートを抑制する」ではすべてのルートを抑制し、集約ルートのみアドバタイズしました。このセクションでは、アドバタイズするルートを部分的に抑制できることを確認します。

以下の構成で、R2は10.0.0.0/22を集約ルートとしてアドバタイズすることができます。

R2は以下のような設定をおこなっています。

R3のBGPテーブルを調べ、集約ルートと個々のルートが存在することを確認します。

次に、R2の設定を変更し、10.0.0.0/24を抑制します。

ルートマップに一致したルートのみ抑制されることに注意してください。R1へ設定追加後、R3のBGPテーブルから10.0.0.0/24が消えていることを確認します。

自動集約

Ciscoルーターの初期設定では、自動集約が無効になっています。以下の構成で自動集約を有効化した際、どのように動作するのか確認します。

自動集約はBGPに再配布されたルートのみ適用されます。再配布されたルートはBGPによってクラスフル境界で集約されます。

R1、R2、R3は以下の設定をおこなっています。

R1とR2のBGPテーブルを調べると、クラスフル境界で集約されていることが確認できます。

ひとつ集約されていないルートがあります。10.0.0.0/24ですが、このルートが集約されていない理由は最初に書いたとおり、再配布されたルートでなく、networkコマンドでアドバタイズさせているためです。R1のBGP設定に再配布設定を追加すると10.0.0.0/24がクラスフル境界でアドバタイズされます。

以下のように、R1の設定を変更します。

設定変更後、R1とR2のBGPテーブルを調べ、10.0.0.0/24がクラスフル境界でアドバタイズされていることを確認します。