■ BGPスプリットホライズンの問題点
さて、前回までで基本的なBGPの動作を説明したわけだ。
[FigureRT19-01:BGPルーティングプロセス]
OPENでBGPピアを確立して、ベストパスをUPDATEとしてを交換。
そして、BGPテーブルに記載して、パスアトリビュートに従ってルーティングテーブルを作成する、と。
そうだ。
基本動作をわかったところで、今回はBGP4でのスケーラビリティの問題についての話だ。
すけーらびりてぃ?
EIGRPのところでスケーラブルってでてきましたよね、階層化?
うむ。階層化、構造化という意味だな。
さて、ネット君、BGPのスプリットホライズンは覚えているな。
BGPすぷりっとほらいずん? BSCI第18回に出てきたやつですよね。
IBGPピアからの情報は他のIBGPピアへ送らないってやつ。
そうだ、IBGPでのルーティングループを防ぐために使われる。
IBGPでのルーティングループは、以下の図のように起きる。
[FigureRT18-05:IBGPのルーティングループ]
で、IBGPピアからの情報は他のIBGPピアへ送らないにより、ルーティングループを防ぐんですよね。
[FigureRT18-06:BGPスプリットホライズン]
そういうことだ。
問題は、IBGPピアの数が多くなった場合だ。
え〜っと、BSCI第18回で、言ってましたっけ。
IBGPピア同士はフルメッシュトポロジでなければならないって。
うむ。だがフルメッシュは接続数が多くなりすぎる。
そうするとTCPでのリソースの消費、帯域幅の使用など問題が多発する。
[FigureRT18-07:フルメッシュでのピア]
そうそう、そうでした。
確か、それを解消するのが、「るーと…」なんでしたっけ?
ルートリフレクタ、だ。
■ ルートリフレクタ
りふれくた。
反射?
そうだな。reflectは「反射」だから、reflecterは「反射するもの」だな。
「ルートを反射するもの」という意味になる。
ルートを反射するって、どういうことです?
うむ、まずIBGPピアのBGPスピーカを3種類にわけることから設定は始まる。
ルートリフレクタ、ルートリフレクタクライアント、ルートリフレクタノンクライアントだ。
ははぁ。ルートリフレクタと、そのクライアントと、クライアント以外という意味ですか?
そうだ。ルートリフレクタは受け取ったUPDATEをクライアントに送信する。
[FigureRT21-01:ルートリフレクタ]
UPDATEをリフレクト(反射)するんですね。
だから、ルートリフレクタ、と。
うむうむ、そういうことだ。
ここで覚えておいて欲しいのは、クライアント同士はIBGPピアを確立しないということだ。
そうですね。さっきのムービーでは、ルータBとルータCはピアになっていなかったですよね。
そうだ。つまりルートリフレクタをハブとしたハブアンドスポークトポロジを形成するわけだ。
なるほど。
ルートリフレクタはBGPスプリットホライズンを適用しないわけですよね。ルーティングループは発生しないんですか?
クライアント同士がIBGPピアを確立しないからな。
なので、前に出てきた例のようなルーティングループは発生しない。
[FigureRT21-02:スプリットホライズンとルートリフレクタ]
意味的には同じになる。
さらに、ルータIDを使用する。
ルータID?
ルータIDっていうと、そのルータを識別する数字ですよね。そのルータの持つ一番大きなIPアドレスがなるという。
うむ。発生元のルータIDをOptional Nontransitiveのパスアトリビュートとして通達する。
ルータIDをUPDATEにアトリビュートとして付け加えるわけですね。
そうすると、どうなるんです?
これにより、もともとのUPDATEを送ったルータは自分のルータIDを持つUPDATEを無視する。
基本的にはありえないが、ルートリフレクタを使った場合設定をミスると自分の送ったUPDATEが戻ってきてしまう可能性があるからな。
え〜っと、つまり。通常ならばBGPスプリットホライズンで自分の隣接ピアにしか送られないのがUPDATEでしたよね。
それが、ルートリフレクタを使うとUPDATEがさらに送られてしまう、と。
そう。それで設定のミスによって、UPDATEが返ってきてしまう場合がある。
それを防ぐためにパスアトリビュートとしてルータIDを付加して無視するわけだ。
[FigureRT21-03:ルートリフレクタの設定ミス]
さきほどの3つのルータで、間違ってルートリフレクタを2つにしてしまった場合の設定だ。
なるほど、ループが発生していますね。
■ ノンクライアント
さて、先ほどBGPスピーカを3つにわけると説明したが。ノンクライアントを説明していなかったな。
[FigureRT21-04:ルートリフレクタノンクライアント]
クライアントからはクライアントとノンクライアントに転送して。
ノンクライアントからはクライアントのみに転送する。
ははぁ。他のノンクライアントとはBGPスプリットホライズンが有効である、ということですか。
そうだな。つまりルートリフレクタとノンクライアントはあくまでも普通のIBGPピアだ、ということだな。
ルートリフレクタがBGPスピリットホライズンの適用外になるのは、あくまでもクライアントとの関係だけだ。
なるほど。
ここで注意して欲しいのは。
[FigureRT21-05:EBGPのアップデートの場合]
ルートリフレクタがEBGPピアから受け取ったUPDATEはクライアント、ノンクライアント双方に送られる。
BGPスプリットホライズンが有効なのは、あくまでIBGPピアから受け取ったUPDATEだけ、ということだ。
EBGPピアから受け取った場合は、ルートリフレクタの役割とは関係ないってことですね。
■ クラスタ
一つのAS内にBGPスピーカが多い場合、ルートリフレクタが使われるが。
ルートリフレクタが1つとは限らない。
幾つも置けるってことですか?
そうだ。
[FigureRT21-06:複数のルートリフレクタ]
上の図のような配置も可能だ。
この場合、ルータBとルータCは、ルータAのクライアントであり、かつそれぞれ2つのクライアントを持つ、という構成になっているわけだ。
拡張スター型トポロジみたいっすね。
うむ。まさしくその形だな。
この、クライアントがどのルートリフレクタのクライアントか、ということを判別するものをクラスタという
くらすた?
そうだ。先ほどの図の場合、こうなる。
[FigureRT21-07:クラスタ]
ルータAは、クラスタ1のリフレクタ。ルータBはクラスタ1のクライアントかつクラスタ2のリフレクタ。
ルータCはクラスタ1のクライアントで、クラスタ3のリフレクタ。
と、なるわけですか。
そういうことだ。
これを使うことにより、AS内のBGPスピーカをスケーラブルに構成することができるわけだ。
ははぁ。まさしくスケーラブルという名前にふさわしい階層化ですねぇ。
ただし、このように複数のルートリフレクタが混在すると、ちょっとした設定ミスによりルーティングループが発生してしまう。
そういうものですか?
うむ。本来ならばクラスタに入ってはいけないBGPスピーカをクラスタに入れてしまったりするわけだな。これを防ぐために、クラスタIDをOptional Nontransitiveのパスアトリビュートとして通達する。
…どっかで聞いた話ですね。
うむ、先ほどの発生元のルータIDを通達する、という話と全く同じだ。
つまり、動作としては…。
[FigureRT21-08:クラスタでの動作]
は〜、なるほど。
■ ルートリフレクタの設定
さて、実際にCiscoルータでルートリフレクタを設定する場合。
ルートリフレクタで以下のコマンドを実行する。
- Router(config-router)#neighbor ip-address route-reflector-client
IPアドレスには、クライアントにするBGPスピーカのIPアドレスを入れる。
さらに、クラスタIDの設定には。
- Router(config-router)#bgp cluster-id cluster-id
ルートリフレクタにこの2つのコマンドを行うだけだ。
あれ? クライアントには設定しないんですか?
しない。リフレクタだけだ。
クライアントがクライアントであると知っている必要はあまりないからな。クライアントはごく普通に動作すればいい。
そういえばそうかもしれません。
クライアントは何か特別なことをしてないですからね。
あぁ、そうそう。もし同一クラスタ内のクライアント同士がIBGPピアになっていた場合は、以下のコマンドでIBGPピアを解除しなければならない。
- Router(config)#clear ip bgp ip-address
もしクライアント同士でIBGPピアのままだったらルーティングループが発生する可能性がある。
クライアントの設定で重要なのはこれぐらいだな。
了解です。
ルートリフレクタはIBGPピアを減らす非常に有効な手段だが。
闇雲に設定すればいいというわけではない。例えば。
[FigureRT21-09:ルートリフレクタが原因のループ]
あ〜、こりゃ見事なルーティングループですねぇ。
うむ。ルートリフレクタに物理的に接続されていないクライアント、という場合だな。
これ以外にもルートリフレクタが引き起こす問題がいくつかあるので、設定には気をつけるように。
なるほどです。
うむ、では今回はここまでにしよう。
はい。
次回も、もう少しBGPの話が続く。
次回でBGPは7回目ですか。いままでのルーティングプロトコルの中で一番長いですね。
そうだな。IGPよりも大規模のネットワークを扱うだけあって、なかなか大変なのだよ。
というわけでまた次回。
了解です。
30分間ネットワーキングでした〜♪
- ルートリフレクタ
- [Route Reflecter]
- パスアトリビュート
- タイプコード9のOriginatorのことです。
- クラスタ
-
[cluster]
一群、群れ。
- パスアトリビュート
- タイプコード10のCluster_IDのことです。
- ハイパーネット君の今日のポイント
-
- IBGPにはBGPスピリットホライズンが有効化されている。
- そのためIBGPはフルメッシュトポロジでなければならない。
- フルメッシュトポロジでの負荷を減らすためにルートリフレクタを使う。
- クライアントから受け取ったUPDATEをノンクライアントと同一クラスタのクライアントに転送する。
- ノンクライアントから受け取ったUPDATEをクラスタのクライアントに転送する。
- クライアント同士はIBGPピアにならない。
- 複数のルートリフレクタを使う場合は、クラスタに分け、階層化を行う。