BGPルートリフレクション
IBGP(Internal Border Gateway Protocol)では、フルメッシュでBGPピアを構成する必要がありますが、規模が大きくなるとフルメッシュは困難です。このため、代替方法が考えられました。
本項では、ルートリフレクションについて説明します。
ルートリフレクションの基本
ルートリフレクションを使わない場合、AS内では以下のようにフルメッシュでBGPを接続する必要があります。
ルートリフレクションを使うと、1台のルートリフレクター(RR:Route Reflector)を中心としたスター型で構成できます。
これで、各段にBGPピアの設定が少なくなります。
RR以外は、クライアントピアと呼ばれます。クライアントピアは、RRを介して経路情報を受信します。つまり、IBGPでは他BGPピアに経路を転送しませんが、RRだけは転送するということです。
クライアントピアはルートリフレクションをサポートしている必要はなく、RRだけがサポートしている必要があります。このため、クライアントピア側の設定は、ルートリフレクションを意識した設定ではなく、RRとの通常のBGPピア設定になります。
RRとクライアントピアのグループを、クラスターと呼びます。クラスターにはクラスターIDが必要で、通常はRRで自身のBGP識別子を設定します。
非クライアントピアとの接続
RRのクライアントピアとならないBGPスピーカーを、非クライアントピアと言います。非クライアントピア間は、通常のフルメッシュ構成が必要ですが、クラスターは1つのBGPスピーカーに見えるため、RRだけをBGPピアにします。
この時、RRは以下の動作をします。
- クライアントピアからの経路
- すべての非クライアントピアと、クライアントピアに転送します。
- 非クライアントピアからの経路
- すべてのクライアントピアに転送します。
つまり、クライアントピアは非クライアントピアとBGPで接続する必要はありません。
AS内に、クラスター構成と非クライアントピアが同居できるため、現在AS内でフルメッシュ構成にしていたとしても、一部だけルートリフレクションにすることができます。その後、徐々にルートリフレクションを拡大して移行していくことも可能です。
複数のRRで冗長化
1つのクラスター内に、複数のRRを設定して冗長化できます。
これで、1台のRRがダウンしても、他方のRRで経路を広報できます。
各RRは、同じクラスターIDを設定する必要があります(どれかのRRのBGP識別子を使う)。
複数クラスターとの接続
クラスターは、複数存在できます。1つのクラスターから見ると、他のクラスターは非クライアントピアと同じように見えます。
この時、RRは以下の動作をします。
- クライアントピアからの経路
- すべてのクラスターのRRと、クライアントピアに転送します。(非クライアントピアがあれば、非クライアントピアにも転送します)
- 他クラスターからの経路
- すべてのクライアントピアに転送します。
つまり、各クラスターのRR間でフルメッシュにする必要がありますが、クライアントピアは自クラスターのRRをBGPピアとすればよいだけです。
ルートリフレクションのループ防止
もともと、IBGPでフルメッシュにするのは、経路を転送しないことでループを防止するためです。ルートリフレクションは、RRで経路を転送するようにしているため、ループ防止の機能が別途必要です。これは、2とおりあります。
- ORIGINATOR_ID属性
- RRで、ORIGINATOR_ID属性に経路生成元のBGP識別子を付与します。RRは、ORIGINATOR_ID属性がある経路を受信した場合、無視します。
- CLUSTER_LIST属性
- RRは、経路を広報する時、自身のクラスターIDを入れたCLUSTER_LIST属性を追加します。すでにCLUSTER_LIST属性がある場合は、自身のクラスターIDを追加します。もし、広報されてきた経路に自身のクラスターIDが存在すれば、経路がループしていると判断して無視します。これは、AS_PATH属性のループ防止方法と同じです。
ORIGINATOR_ID属性ですが、例えば1つのクラスター内でRRが2台あったとします。1台のRRでORIGINATOR_ID属性を付与して他方のRRに広報した場合、受信したRRではこの経路を無視します。
これは、クライアントピアから直接受け取れる経路だからです。
また、CLUSTER_IDは以下のように他のクラスターを介して、自分に返ってくる経路を無視します。
つまり、ORIGINATOR_ID属性がクラスター内のループを防ぎ、CLUSTER_LIST属性がクラスター間のループを防ぎます。