30 Minutes NetWorking
No.RT21

30Minutes NetWorking

BSCI

第21回BGP4(6) ルートリフレクタ

■ 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スピーカをクラスタに入れてしまったりするわけだな。これを防ぐために、クラスタIDOptional 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ピアにならない。
  • 複数のルートリフレクタを使う場合は、クラスタに分け、階層化を行う。

30 Minutes NetWorking No.RT21

管理人:aji-ssz(at)selene.is.dream.jp