BGPはパスベクタ型(ディスタンスベクタではない)、
トランジットASとは通過するASでありこのASではBGPを使用すべきである、
BGPスピーカが持つテーブル
(1)ネイバーテーブル
(2)BGPフォワーディングテーブル
(3)routing table、
EBGPピアは原則として直接接続している必要がありTTL=1で送信され接続していないときはebgp-multihopコマンドを設定してTTLを増加させる
next hopは受信したnext-hop属性をそのまま転送するが、自身の出力IFのアドレスをnext hopにすることができる。
どういう場合にこれが必要になるか?黒本でも、あるサイトでも、EBGPネイバーから受け取った経路情報をiBGPネイバーに転送するときが紹介されている。
RTA(100)---RTB(200)---RTC(200)というような。
このとき、RTBからRTCにアップデートを送信するときに、next-hopがRTAのアドレスになり、RTCが到達できない、ということを防ぐために、RTBのアドレスをnext-hopとして通知する、と。
なんとなくわかったような気もするが、それくらい勝手にやってくんないかな、という気もする。
ということは、EBGPピアがいて、かつ、そのEBGPピアとネイバーになっていないiBGPピアとネイバーになっているときには必須の設定と言うことかな。つまりASBR(BGPでこう呼ぶのか知らないが)では必須の設定である、と。
マルチアクセスネットワークでは、勝手にやってくれるようだ。
IBGPスプリットホライズンとは、「IBGPピアから受信したルートをほかのIBGPピアにアドバタイズしない」というルールで、AS内でルートがループするのを回避する。これは設定しなくても勝手にやってくれる。
同期(synchronization);「BGPで取得したルートはIGPでも同じルートを取得しなければルーティングテーブルに反映せず、他のピアにアドバタイズもしない」
例
RTA(100)---RTB(200)---RTC(non BGP)---RTD(200)---RTE(300)
同期がない場合、RTEからの経路情報がRTAまで伝わるが、その情報に基づいて送信されたRTAからのパケットは、non BGPスピーカーのRTCが破棄してしまう。
同期をしなくても、RTCもBGPスピーカーにすればいい?もしくはRTBとRTCを直接接続する。
こんなケースはそんなにないとは思うが、あるAS内でIGPつまりOSPFとかRIPとかが動いてなくて、つまりAS内にあるルータ同士が通信できない状態があって、しかしiBGPはフルメッシュで有効になっていて、synchronizationが有効になっていると、ASBRのルータがEBGPピアから受け取った経路はAS内に転送されないことになる。(という問題が黒本にあった)
フルメッシュに接続すれば情報がもれなく行き渡るのはわかる。だが、それをやると通信量が増えるから、なるべくしたくない。
スリットホライズンは、フルメッシュでない状態でブラックホールが発生するのを防ぐための機能である。しかしそれはもれなくルーティングする機能ではない。
「通信できない経路だったら最初から伝えない」という機能であり、それによってアクセスできなかったルータにアクセスできるようになるわけではない。
そこでルートリフレクタ。やっぱりフルメッシュ接続というのは現実的な解決ではない。
ルートリフレクタという特別なルータを作って、そこから必要なルータ宛に経路情報を転送する。これだけ。転送先に設定は必要ない。EBGPピアから受け取ったら、とか、クライアントから受け取ったら、とか、非クライアントからだったら、とかを覚える必要はない。(そういう問題が黒本にあった)
リフレクタである以前にIGPルータでありIBGPルータでありEBGPルータなのだから、経路情報は転送するのが基本。ただし、スプリットホライズンの規則によりIBGPピアから受け取った経路情報はIBGPピアには転送されない。それだと困るので、ルートリフレクタで指定したクライアントには経路情報を転送する。
黒本には以下のように書いてある。
「クライアントのピアから受け取ったルートは、クライアントと非クライアントピアの両方に転送(1)」「非クライアントのピアから受け取ったルートは、クライアントだけに転送(2)」「EBGPピアから受け取ったルートは、クライアントと非クライアントピアの両方に転送(3)」
(2)は、いい。IBGPスプリットホライズンにより転送しないのが原則だがリフレクタを設定したのでクライアントには転送する。(3)も、いい。EBGPピアからのルートなので、スプリットホライズンの対象外だから転送する。問題は(1)だ。「クライアントのピア」というのは、IBGPピアである。IBGPピアからの経路情報は転送しないのがスプリットホライズンの原則であり、ルートリフレクタのクライアントには例外的に送信する。
だが、非クライアントピアにも転送する、とある。これは、「ルートリフレクタを設定するとそうする」ということなのだろうか?どうやら「ルートリフレクタはクライアントから受信した経路情報はIBGPスプリットホライズンの原則の例外で転送される」ということのようだ。
RFCの登場
5. OperationWhen a route is received by a RR, it selects the best path based onits path selection rule. After the best path is selected, it must dothe following depending on the type of the peer it is receiving thebest path from:1) A Route from a Non-Client peerReflect to all other Clients.2) A Route from a Client peerReflect to all the Non-Client peers and also to theClient peers other than the originator. (Hence theClient peers are not required to be fully meshed).3) Route from an EBGP peerSend to all the Client and Non-Client Peers.
ま、「こう書いてあるからこうなんだ」「やってみたらそうなったからそうなんだ」というのは嫌なんだけど。そういうのが嫌だから勉強してんだけど。まあ、いっか・・・
ピアのアドレスをloopbackにする場合は、マルチホップ扱いになる。ふーん・・・。これはやってみるべきだとは思うが、メンドクサイ・・・。
やってみた。loopbackなんだからupdate sourceも必要である。
BGPのnetworkコマンドはBGPを有効にするinterfaceを指定するのでは、ない。
networkコマンドで経路情報を送信するが、自分自身のルーティングテーブルにない経路情報は送信されない。
as-pathはpushされていく。最後のpathがリストの最上位にある。
(config-router)#bgp default local-preference 200
matchもsetもないルートマップは permit all を意味する。
MED(Multi-Exit-Discriminator)
show ip bgp では Metricと表示される(じゃあMetricと呼べよといいたい)
自ASに入ってくるトラフィックを制御することができる。
optional nontransitive attribute
(config-router)#default-metric xxxで設定する。
低い値が採用される。優先度は6番目で低い。
clear ip bgp * soft in
BGPセッションをリセットさせずに、ピアから受信したルートを一時的にメモリに格納する。
認証
R1(config-router)#neighbor 2.2.2.2 password unkotare