vyattaでBGPを試してみた
OSPF, RIPと合わせてBGPも試してみた。
BGPは内部ルーターとの接続ではなく、外部との接続(インターネット接続など)に使用し、かつ普通の使い方だとISPのルーターをデフォルトゲートウェイに指定するだけでルーティングが出来てしまうため、使うことが無い。。
ただ、複数のISPと契約してWAN回線の冗長化を行うような時にはBGPを使うことがあるらしいため、そちらを意識して構成してみた。
vyattaでのBGPのマニュアルはこちらになる。
http://www.vyatta.com/downloads/documentation/VC6.1/Vyatta_BGPRef_R6.1_v02.pdf
構成図は次のようになる。
BGPではAS番号の異なる組織間で接続を行うのだが、ここではどちらもプライベートASである64600, 64601を使用している。
セグメントごとの用途としては、192.168.21.0/24 が接続元組織の内部セグメント(インターネット接続用のDMZセグメント??) であり、192.168.24.0/24 がISP側のセグメントという想定である。
なお、今回主にWAN側(192.168.22.0/24, 192.168.23.0/24)のセグメントを経由して、BGPの経路広報を行おうとしているのだが、BGPで広報を行う(eBGP)際には、事前に各ルーターが持っている経路の情報を同期しておく必要がある。
このうち、eBGPの情報はiBGP((内部のBGP、具体的にはvyatta1<=>vyatta2, vyatta3<=>vyatta4間で設定している)経由で同期出来るのだが、各ルーターが持っている内部セグメントのルーティング情報(例えば、vyatta1が192.168.21.0/24, 192.168.22.0/24に接続されているなど)の情報は同期出来無いため、この情報は別途同期する必要がある。マニュアルに合わせて、今回は内部のルーティングの同期にはOSPFを使用した。
※ なお この接続図では同じAS間のルーターは同セグメントで接続されているためOSPFは不要なのかもしれないのだが、、iBGPの接続にはeBGPで使用しているセグメント(192.168.22.0/24, 192.168.23.0/24)へのルーティング経路も必要らしいため、念のため設定している。
他に注意した設定として次の3点がある。
1. OSPF, BGP ではそれぞれIPアドレスと同じ形式でルーターIDを設定する必要がある。今回は192.168.21.0/24のセグメント, 192.168.24.0/24のセグメントの各IPを使用した(マニュアルではループバックに10.0.0.XのIPを振ってOSPFで接続している。。) 2. 冗長化の動作を見てみたかったため、192.168.22.0/24で指定されるWAN(vyatta1, vyatta3がつないである)を優先WANとしている。このため、vyatta1, vyatta3にlocal-pref 200(デフォルトが100で大きいほど優先度が高い)の設定を加えた。 3. BGPで接続を行うインターフェースについては、OSPFを使用する必要が無いため、passive-interfaceとして設定してある。
各ルーターの設定ファイルは次のようになった。
vyatta1: interfaces { ethernet eth0 { address 192.168.1.191/24 } ethernet eth2 { address 192.168.21.1/24 } ethernet eth3 { address 192.168.22.1/24 } loopback lo { } } protocols{ bgp 64600 { neighbor 192.168.21.2 { remote-as 64600 update-source 192.168.21.1 } neighbor 192.168.22.3 { remote-as 64601 } network 192.168.21.0/24 { } parameters { default { local-pref 200 } router-id 192.168.21.1 } } ospf { area 0.0.0.0 { network 192.168.21.0/24 network 192.168.22.0/24 } parameters { abr-type cisco router-id 192.168.21.1 } passive-interface eth3 }
vyatta2: interfaces { ethernet eth0 { address 192.168.21.2/24 } ethernet eth1 { address 192.168.23.2/24 } loopback lo { } } protocols { bgp 64600 { neighbor 192.168.21.1 { remote-as 64600 update-source 192.168.21.2 } neighbor 192.168.23.4 { remote-as 64601 } network 192.168.21.0/24 { } parameters { router-id 192.168.21.2 } } ospf { area 0.0.0.0 { network 192.168.21.0/24 network 192.168.23.0/24 } parameters { abr-type cisco router-id 192.168.21.2 } passive-interface eth1 } }
vyatta3: interfaces { ethernet eth0 { address 192.168.22.3/24 } ethernet eth1 { address 192.168.24.3/24 } loopback lo { } } protocols { bgp 64601 { neighbor 192.168.22.1 { remote-as 64600 } neighbor 192.168.24.4 { remote-as 64601 update-source 192.168.24.3 } network 192.168.24.0/24 { } parameters { default { local-pref 200 } router-id 192.168.24.3 } } ospf { area 0.0.0.0 { network 192.168.22.0/24 network 192.168.24.0/24 } parameters { abr-type cisco router-id 192.168.24.3 } passive-interface eth0 } }
vyatta4: interfaces { ethernet eth0 { address 192.168.23.4/24 } ethernet eth1 { address 192.168.24.4/24 } loopback lo { } } protocols { bgp 64601 { neighbor 192.168.23.2 { remote-as 64600 } neighbor 192.168.24.3 { remote-as 64601 update-source 192.168.24.4 } network 192.168.24.0/24 { } parameters { router-id 192.168.24.4 } } ospf { area 0.0.0.0 { network 192.168.23.0/24 network 192.168.24.0/24 } parameters { abr-type cisco router-id 192.168.24.4 } passive-interface eth0 } }
この状態で、各ルーターの各IPにpingが飛ぶことが確認できた。また、vyatta2からvyatta4にtracerouteを打つと, vyatta1,vyatta3経由で通信が行われており、優先経路が定まっていることが確認できた。
vyatta@vyatta2:~$ traceroute 192.168.24.4 traceroute to 192.168.24.4 (192.168.24.4), 30 hops max, 40 byte packets 1 (192.168.21.1) 2.897 ms 2.859 ms 2.849 ms 2 (192.168.22.3) 5.644 ms 5.679 ms 5.672 ms 3 (192.168.24.4) 7.694 ms 7.724 ms 7.716 ms vyatta@vyatta2:~$
この状態で192.168.22.0/24のセグメント向けのブリッジ(br0x22)をホストOS側で停止してみたところ、およそ140秒後に192.168.23.0/24側のセグメントが優先になり、通信が復旧することが確認できた。(br0x22起動後の復旧には30-40秒程度かかるようだ。。)<<補足>>
1. ホストOS側でのブリッジ作成方法については、こちらを参照。 http://d.hatena.ne.jp/aaabbb_200904/20100130/1264869562
2. デバッグに役立ったコマンド:
show ip bgp show ip bgp summary show ip route tail -f /var/log/messages