■ ポリシーベースルーティング
「もうやめてぇぇぇ。」
さて、まずBGPの基本的なルーティング動作を説明しよう。
あの、博士?
まず、TCPを使ってBGPピアを確立することから始まるわけだ。
は、博士?
もしも〜し。
次に、UPDATEでNLRIとパスアトリビュートを交換する。
ううぅぅ、博士ぇ。
なんだネット君。
なんでスルーするんですか。寂しいじゃないですか。
人生の縮図だ。
さて、話を続けるぞ。
うぅぅぅぅぅ。
ともかく、交換したUPDATE情報をBGPスピーカはBGPテーブルを持つ。
びーじーぴーてーぶる?
ルーティングテーブルとは別にですか?
そうだ。このBGPテーブルからベストパスを選び出して、ルーティングテーブルに載せるわけだな。
BGPテーブルを確認するCiscoIOSコマンドは以下の通り。
- Router#show ip bgp
ははぁ、OSPFのトポロジカルデータベースや、EIGRPのトポロジテーブルみたいなもんですね。
そうだな、ルーティングの全情報のテーブル、ってことだな。
つまり、図で表すとこう。
[FigureRT19-01:BGPルーティングプロセス]
パスアトリビュートが、メトリックの役割を果たすんですね。
そういうことなのだが。ネット君。
BGPはどのような方式でルーティングする、と説明したかね?
パスベクタ型、でしたっけ?
経由ASの数が評価値になるという。
うむ、基本的にはそうなのだが、さらにBGPではパスアトリビュートによりパス選択を柔軟に変更できる。経由AS数だけでなく、任意にアトリビュートを設定できるのだな。
ははぁ。
このようなルーティング方式をポリシーベースルーティングという。
つまりなんらかの「ポリシーで経路が選択」される、ということだ。
じゃ、いままでのは何と言うんです?
宛先ベースルーティングだな。「宛先で経路が選択」されるわけだ。
「宛先」で経路が選択されるのと、「ポリシー」で経路が選択される。
ポリシーベースルーティングはBGPでしかできないのですか?
いや、ルートマップを使えば、OSPFなどでも実行できる。
それは先で話そう。
はい。
■ パスアトリビュート
さて、BGPルーティングの評価値、つまりメトリックと同じ扱いをされるパスアトリビュートだが、これは1つではなく、複数の値からなる。
前回でも話したAS_Pathもその1つだ。
AS_Pathは、経由したASを示すんでしたっけ。
うむ。
このパスアトリビュートはUPDATEメッセージで送られるわけだが、このパスアトリビュートには3種類の特性がある。
属性の特性? なんかややこしいですね。
そのパスアトリビュートがどういうものかを説明するものだな。
以下の3種類だ。
特性1 | Well-Known(既知) | そのアトリビュートはすべてのBGPスピーカでサポートされている |
---|---|---|
Optional(選択) | そのアトリビュートはすべてのBGPスピーカでサポートされている必要はない | |
特性2 | Mandatory(必須) | UPDATEに必ず含めなければならない |
Discretionary(任意) | UPDATEに必ず含める必要はない | |
特性3 | Transitive(透過) | そのアトリビュートは他のBGPスピーカに伝えなければならない |
Nontransitive(非透過) | 他のBGPスピーカに伝えなくてもよい |
[TableRT19-01:パスアトリビュート特性]
既知か選択、必須か任意、透過か非透過…。
例えば「既知」か「選択」のどちらかの属性をそのパスアトリビュートは持つ、ということだな。
ただし、この3種類のすべての組み合わせがあるわけではなくて、実際は以下の4通りの特性を持つ。
Well-Known Mandatory | すべてのUPDATEに含まれ、BGPスピーカはサポートしていなければならない |
Well-Known Discretionary | UPDATEに含まれなくてもよいが、BGPスピーカはサポートしていなければならない |
Optional Transitive | サポートしていなくてもよいが、他BGPスピーカには伝えなければならない。 |
Optional Nontransitive | サポートしていなくてもよいし、他BGPスピーカには伝える必要もない。 |
[TableRT19-02:パスアトリビュート特性・組み合わせ]
え〜っと、まずWell-KnownかOptionalかで分かれるわけですね。で、Well-knownならUPDATEに含むかどうか、Optionalなら他に伝えるかどうか、と。
そういうことだ。
さて、実際にCiscoルータが使用するパスアトリビュートは以下の10個 + 1個だ。
タイプコード | アトリビュート名 | 特性 |
---|---|---|
1 | Origin | Well-known Mandatory |
2 | AS_Path | Well-known Mandatory |
3 | Next_Hop | Well-known Mandatory |
4 | Multi_Exit_Discriminator(MED) | Optional Nontransitive |
5 | Local_Preference | Well-known Discretionary |
6 | Atomic_Aggregate | Well-known Discretionary |
7 | Aggregator | Optional Transitive |
8 | Community | Optional Transitive |
9 | Originator | Optional Nontransitive |
10 | Cluster_list | Optional Nontransitive |
- | Weight | - |
[TableRT19-03:パスアトリビュート]
はわ〜、一杯あるんですね。
最後のWeightってのはなんなんです?
Ciscoオリジナルの属性だ。しかも、ローカルルータにしか設定されないからUPDATEには含まれない。これは後で説明しよう。
あ、はい。
さて、全部のパスアトリビュートを説明していては日が暮れてしまうので、Origin、AS_Path、Next-Hop、MED、Local_Preference、Weightという重要なアトリビュートを説明する。
特に今回はWell-known Mandatory特性を持つ、Origin、AS_Path、Next_Hopを説明しよう。
残りは?
残りは次回だな。
了解ッス。
■ Origin
まず、Origin。「起源」とか「源」とかいう意味だな。発生元と訳すのが一番意味がわかりやすいだろう。
発生元? 何の発生元なんですか?
そのルートを最初に通知したルータのことだな。
Originには以下の3つの値がある。
優先度 | 値 | 意味 |
---|---|---|
0 | IGP | ルートは通知してきたAS内部にある |
1 | EGP | EGP(EGPsではない)によって再配送された |
2 | INCOMPLETE | それ以外で配布された(ルート再配布など) |
[TableRT19-04:Originアトリビュート]
優先度ってのは?
Originアトリビュートのまぁ、評価値だな。低い方を優先する。
例えばINCOMPLETEのルート情報と、IGPのルート情報ならばIGPを優先する。
う〜ん。IGPって値がいまいちよくわからないんですけど。
「ルートは通知してきたAS内部にある」?
うむ、つまりだな。EBGPスピーカが、他ASのEBGPスピーカにルートを通知する際に、このネットワークは自分のAS内にありますと通知するのがIGP、ということだな。
[FigureRT19-02:Originアトリビュート]
ははぁ、でもEGPは実際使われていないわけですから、これってIGPばっかりになりませんか?
そうだな、基本的にはOriginの値はIGPが多くなるな。
そうですよね。
■ AS_Path
何回か話に出てきたAS_Pathだが。
他のアトリビュートを特に設定しない場合は、AS_Pathのみでベストパスが決まるぐらい重要なアトリビュートだ。
経由AS数で決まるから、パスベクタ型なんでしたっけ。
そういうことだ。
これは図で説明したほうが早い。
[FigureRT19-03:AS_Pathアトリビュート]
ははぁ、なんかホントにASのホップ数って感じですね。
そうだな。通過するASの数というまさしくホップだな。
ちなみにIBGPの場合AS番号は追加されない。
[FigureRT19-04:AS_Pathアトリビュート・IBGP]
まぁ、これは理解できます。IBGPにアドバタイズするのに「自分のASを通過してきました」なんて言う必要ないですからね。
うむ。そういうことだ。
そして、AS_Pathにはベストパスを決定する以外にもう1つ重要な役割がある。
[FigureRT19-05:ルーティングループの回避]
AS_Pathによりルーティングループを防ぐことが可能、というわけだ。
「誰々から教えてもらったよ」というのがUPDATEに書いてあるようなものですね。
で、そこに自分の名前があれば、それを記憶する必要もない、と。
まぁ、そういうことだな。
ともかくパスアトリビュートの中でAS_Pathが最重要、と覚えておいてくれたまえ。
「パスベクタ」ですね。
■ Next_Hop
さて、UPDATEに必ず含まれるWell-known Mandatory特性の最後の1つが、Next_Hopだ。
ねくすとほっぷ。
これはそのまま、次のホップ、なんですか?
基本的には次のホップそのものだな。
[FigureRT19-06:Next_Hopアトリビュート]
EBGPでは通知するピアにUPDATEを送るインタフェースがNext_Hopになる。
でも、IBGPでは変更しないんですよね。
うむ。その通り。
つまり、Next_Hopは宛先ネットワークへ繋がっている次のASの入り口を指す、ということだ。
次のASの入り口?
そうだ。つまり、先ほどの図を使えば、こういう意味になる。
[FigureRT19-07:Next_Hopアトリビュートの意味]
なるほど。AS単位での次のホップってことですか。
うむ。
それと、IBGPでのAS内部のネットワークの場合は、Next_HopアトリビュートはそのままIGPなどのネクストホップと同じ意味だ。
[FigureRT19-08:AS内のNext_Hopアトリビュート]
あ〜、普通にアドバタイズを送ったルータがNext_Hopになるんですね。
確かにRIPなんかと同じですね。
うむ。
さらにもう1つ、マルチアクセスネットワークでは、また動作がことなる。
まるちあくせすねっとわーく?
え〜っと、イーサネットとかですよね。
そうだ。その時は下のようになる。
[FigureRT19-09:マルチアクセスネットワークでのNext_Hopアトリビュート]
はわ〜。EBGPでアドバタイズする時も変えないんですね。なんでです?
うむ。マルチアクセスネットワークならば、いちいちルータBを経由する必要がないからだな。直接送った方が効率的だ。
あ〜、確かにそうですね。
だが、同じマルチアクセスネットワークでも、NBMAの場合違う可能性がある。
えぬびーえむえー。
フレームリレーやX.25のノンブロードキャストマルチアクセスネットワークですね。
そうだ。NBMAの場合、マルチアクセスでも直接接続できない場合があるのだ。
[FigureRT19-10:NBMAでのNext_Hopアトリビュート]
は〜。なんかややこしいですねぇ。
この場合、以下のコマンドでマルチアクセスネットワークでもNext_Hopを変更することを設定しておかなければならない。
- Router(config-router)#neighbor ip-address next-hop-self
このIPアドレスは、アドバタイズを送るピアのIPアドレスだ。
先ほどの例の場合、RouterB(config-router)#neighbor 200.100.10.1 next-hop-self となる。
う、う〜ん。なんでこんなややこしいんですか?
それはな、Next_Hopアトリビュートはベストパス選択時に到達性を確認するために使うからだ。まぁ、これについては先で説明しよう。
あ、はい。
だが、さすがにちょっとややこしいから、まとめてみよう。
- EBGPのNext_hop
- 通常はアドバタイズするルータ自身に変更
- マルチアクセスネットワークならば、変更なし
- NBMAならばルータ自身に変更
- IBGPのNext_Hop
- AS内部ルート…アドバタイズするルータ自身に変更
- AS外部ルート…変更なし
さてさて、他のアトリビュートは次回にしょう。今回はここまで。
了解です。
30分間ネットワーキングでした〜♪
- ポリシーベースルーティング
-
[Policy-Based Routing]
宛先から経路を選択するのではなく、例えばQoSなどによって経路を設定できる。
略称「PBR」。
- 宛先ベースルーティング
-
[Destination-Based Routing]
略称「DBR」。
- Ciscoルータが使用する
- Optional属性ではそのルータのベンダー独自のパスアトリビュートが存在します。一応このページはCCNP向けなので、Ciscoメインで。
- ハイパーネット君の今日のポイント
-
- BGPはパスアトリビュートによってポリシーベースルーティングが可能である。
- 必ずUPDATEに含めなければならないアトリビュートは、ORIGIN、AS_Path、Next_Hopである。
- AS_Pathは経由するAS数。
- 他のアトリビュートを変更しなければAS_Pathでベストパスが決まる。
- AS_Pathでルーティングループを防止している。
- Next_Hopはベストパス選択時に到達性を確認する。