■ プレフィックスリスト
BGPはポリシーベースルーティングだ、という話はしたな。
はい。パスアトリビュートを使って、メトリックという評価値以外の基準で柔軟にルーティングできるってことでしたよね。
うむ。ルーティングをポリシーによって決定する、という方式のことだ。
パスアトリビュートによってルーティングを決定するのもこの1つだ。
この1つ?
じゃあ、他にも方法があるんですか?
うむ。簡単だ。
ピアに使って欲しくないルートはアドバタイズしなければいい。
………。
なるほど。アドバタイズされなければ、そのルートは知りようがないですからね。
そうだろう。
コロンブスの卵というか、なんというか。豪快な方法ですね。
確かに、そうかもな。
これはルートフィルタリングと呼ばれる方法だ。
ルートをフィルタリングする…。そのまんまですね。
IGPでもルートフィルタリングは実行できる。特に再配布の時に重要なポイントとなる。
それは先の話として、今回はBGPでのルートフィルタリングの方法を説明する。
はい。
Ciscoルータではプレフィックスリストというものを使う。
ぷれふぃっくす?
プレフィックスといえば、BSCI第1回でCIDRの時にプレフィックス長ってのが出てきましたが?
うむ、そのプレフィックスだ。つまり、プレフィックス長をフィルタの条件とするリストだな。
アクセスリストっぽい書き方をするが、プレフィックス長がメインとなる。
ははぁ、なんかピンときませんけど。
■ プレフィックスリストの設定
うむ。では例を出しつつ説明しよう。例えば、以下のようなネットワーク構成だとする。
[FigureRT22-01:プレフィックスリストの設定例]
そうだな。A、B、Cはそれぞれ別のASで、EBGPピアであるとしよう。
ここで、ルータAがルータCに対して送るアップデートのルータBの情報をある程度制限する必要があるとする。よってルータAに対し、プレフィックスリストを設定する。
ふむふむ。
プレフィックスリストの設定コマンドはこう。
- Router(config)#ip prefix-list list-name permit|deny ip-address/prefix [ge value] [le value]
あ〜、なんか確かにアクセスリストっぽいかも。
うむ。これをアクセスリスト同様複数設定していくわけだが。
最後に暗黙のdenyがあるのもアクセスリストと同じだ。
っていうことは、お約束として最後に「すべてを許可」を書く、と。
まぁ、そうなるかな。
ポイントはココだ。
- ip-address/prefix [ge value] [le value]
geは「以上(greater equal)」。leは「以下(less equal)」だ。
これを使うことにより、プレフィックス長が判断材料になる。
プレフィックス長が判断材料? なんですか、それは?
うむ。つまりな。アドバタイズするネットワークのプレフィックス長を見て、permitかdenyか判断するのだよ。
例えば、「ge 16 le 24」だった場合は、16〜24のプレフィックス長のネットワークだけをpermitかdenyする。
[FigureRT22-02:プレフィックス長の判断]
ははぁ。まず ip prefix-listの後ろのアドレスに含まれないと駄目なんですね。
それで、ge と le の範囲に入っていなければならない、と。
そういうことだ。
もし、geとleがない場合とか、geだけとか、leだけの場合はどうなるんです?
その場合は、以下のようになる。
[FigureRT22-03:プレフィックス長の判断・2]
は〜。なんか不思議な感じがしますねぇ。プレフィックス長で判断するなんて。
アクセスリストのポート番号で判断、とか言われた方がわかりやすいですよ。
まぁ、そうかもしれん。このプレフィックスリストを配置するのだが、アクセスリストと違い、インタフェースに配置するのではなく、neighborコマンドで配置する。
- Router(config)#neighbor ip-address prefix-list list-name in|out
最後のin・outはアクセスリストでお馴染みですけど。
インタフェースではなくて、neighborに設定するんですか。
うむ。では先ほどの例を使ってみよう。
[FigureRT22-04:prefix-listによるフィルタリング]
へぇ。なんか結構柔軟に設定できるんですね。
そうだな。集約ルートの扱いを上手くすることができる。
小さいサブネットをいちいちアドバタイズしないようにもできるわけだ。
なるほど。
■ マルチホーミング
さて、このプレフィックスリストと、パスアトリビュートを使ったポリシー制御が特に有効なのはマルチホーミングASでの話だ。
[FigureRT16-03:シングルホーム・マルチホーム]
まるちほーむ、っていうと。
他ASへのルートが2つあるASですよね。
うむ。冗長性を確保するため、2つのISPと接続するなんて時は、このマルチホームASになるわけだ。
またはより最適なルートを選択するために、マルチホーミングする、ということもありえる。
ふむふむ。
マルチホーミングで考えられるのは以下の3パターンだ。
- ISPからはデフォルトルートのみをアドバタイズしてもらう。
- ISPから特定の宛先のルートと、デフォルトルートをアドバタイズしてもらう
- ISPからすべてのルートをアドバタイズしてもらう
まず、デフォルトルートのみのアドバタイズの場合。
これはAS内部のルータのルーティングテーブルの肥大を防ぐことができる。
そうですね。他AS宛のルートはデフォルトルート1つになりますからね。
うむ。だがこの場合、BGPではどちらのISPを選ぶか、ということを決めることはできない。
何故ですか?
どちらのデフォルトルートがベストパスか、なんてことは普通ありえないだろ?
デフォルトルートは「ベストパスがない場合に使用するルート」なんだから。
あ〜、そういわれればそうかも。
なので、AS内ではIGPによってどちらのISPを使うか選択する。
[FigureRT22-05:デフォルトルートのみアドバタイズ]
場合によっては、選んだISPでは遠回りになる可能性もあるわけですか?
うむ。それはありうる。すべてデフォルトルートでまかなう場合の弊害だな。
なので、次のパターン、「特定の宛先」だけBGPによりルーティングするという方式がある。
特定の宛先だけルーティング?
何故そんなことをするんです?
例えば、大量のデータを特定の宛先だけとやりとりすることが多い場合だ。
この場合は、最短ASを使ったり、ポリシーで制御した方が効率がいい。
デフォルトルートの弊害、ってことですね。
大量のデータをやりとりするのに遠回りはしてられない、と。
もちろん、この特定の宛先以外はデフォルトルートを使うので、IGPのメトリックで判断したルーティングになる。
最後は、すべてのルートをアドバタイズしてもらう方式だが。利点と欠点はわかるな?
利点はポリシーに従ったルーティングが可能で、欠点はルーティングテーブルが肥大化するですね。
その通り。インターネットでは膨大なネットワークが存在する。まぁそのAS自身がISPでもなければやらない方式だな。
なるほど。
■ AS内部でのポリシー制御
さて、AS内部でのポリシー制御ではやはりパスアトリビュートが重要だ。
ネット君。パスアトリビュートの中で、最も柔軟性があるパスアトリビュートはなんだ?
もっとも柔軟性がある?
柔軟性があるってことは、自在に値が変更できて、かつ望むようにルーティングするように設定できるアトリビュートってことですよね?
そうだ。
BGPのパス選択の順位が高い方がなお望ましい。先にルートが決定してしまうからな。
順位が高い?
となると、Weight?
うむうむ。その通り。
Weightはそのルータがどのルートを選ぶかを決定できる。もっとも強力な制御ポリシーだ。
そうなりますね。Weightの大きいルータをまず選びますからね。
そうだ。WeightをBGPピアに設定するコマンドは以下の通り。
- Router(config-router)#neighbor ip-address Weight 0〜65535
デフォルトは0だ。なので優先的に選択したいBGPピアに設定してやれば、そのBGPピアを必ず使うことになるだろう。
ふむふむ。
次に順位が高いパスアトリビュートは何かね?
Local_Preferenceです。
うむ、Lcoal_Preferenceも柔軟性が高い。
特にAS外部へ出て行くルートを決定するときに有効だ。
Weightとどう違うかがいまいちピンとこないんですけど。
Weightを使っても、どのルート(ネクストホップとして使うBGPピア)を選択できますよね。
まず、Weightは他BGPピアを評価するパスアトリビュートであり、Local_Preは自身を評価するパスアトリビュートである、という点だ。
他BGPピアを評価? 自身を評価?
つまり、Weightは「こっちのピアを使おう」と決めるアトリビュートで。
Local_Preは「私を優先的に使いなさい」と通達するアトリビュートってことだ。
あ〜、なるほど。
それともう1つ。Local_PreはAS内全ピアにアドバタイズされ、適用されるアトリビュートだ。
そういえば、Weightはピアにアドバタイズされないアトリビュートでしたっけ。
そういうことだ。
Local_Preferenceを設定するコマンドは以下の通り。
- Router(config-router)#bgp default local-preference 0〜429467295
デフォルトは100だ。自分をあまり選んで欲しくなければ100より小さい設定をし、優先的に選んで欲しければ100より大きく設定すればいい。
なるほどです。
うむ、では今回はここまでにしよう。
はい。
一応今回でBGPは終了にする。
まだ話してないこともあるが、それはまたの機会に譲ろう。
長かったですね。BGP。
なんといっても、インターネットの根幹を担うルーティングプロトコルだからな。
さて、次回からは、これまた違うルーティングプロトコルの話だ。
了解です。
30分間ネットワーキングでした〜♪
- ルートフィルタリング
- [Route Filtering]
- プレフィックスリスト
-
[prefix-list]
プリフィックス、と読む場合もあります。
- アクセスリスト
-
[access-list]
苦手な人はとことん苦手な、Ciscoルータでパケットフィルタを実現するリスト。
パケットフィルタ以外にも使い道は多いのでとても重要。
- 暗黙のdeny
-
最後に明記されないが「すべてを拒否」が入っているということ。
忘れるとパケットが流れないという羽目になります。
- ハイパーネット君の今日のポイント
-
- アドバタイズを制御するためにルートフィルタリングを行う。
- Ciscoルータではプレフィックスリストを使ってルートフィルタリングを行う。
- プレフィックスリストはプレフィックス長を判断材料にした制御リストである。
- 複数のISPとの接続を行うことをマルチホーミングという。
- ISPからどのようなルートをアドバタイズされるかでAS内部の動作がかわる。
- WeightとLocal_PreferenceはAS内部で柔軟にポリシーを制御することができる。