Linux と Quagga でBGPルーターを作る
大学で,どのようにルーティングされるのかネットワークとルーターを作成し実験してみるという勉強会を友人たちとともにやっているのですが,
その際,今回使ったQuaggaについて日本語のドキュメントが少なすぎたのでこのページにまとめてみました.
わかりづらいかもしれませんが,誰かの役に立てばと思います.
今回作成したネットワーク
見づらい画像ですいません.
使用したOS
1つだけのOSだけ使って実験をしてもつまらないので,複数のOSを使って構築してみました.
それぞれ癖が違ったりするので大変です.
以下のようにOSを分けました.
AS 65432 : Ubuntu Server
AS 65500, AS 65501 : CentOS 6.4
AS 65530 : Vyatta(高性能ルーター向けLinuxディストリビューション)
設定等に関して,筆者が担当したCentOS 6.4についてのみ書いていきます.
他のOSについては友人たちに執筆依頼をしておきます.
CentOSにQuaggaをインストールする
インストール直後,「CentOSサーバー構築マニュアル」さまの通りにセットアップしました.
セットアップ完了後
[crayon]
[root@router02]# yum -y install quagga
[/crayon]
でQuaggaをインストール
CentOSをminimumでインストールした場合,telnetがインストールされていないのでインストールしておきましょう
[crayon]
[root@router02]# yum -y install telnet
[/crayon]
インストールが終わったら起動&自動起動するようにしましょう
[crayon]
[root@router02]# /etc/rc.d/init.d/zebra start
[root@router02]# /etc/rc.d/init.d/bgpd start
[root@router02]# chkconfig zebra on
[root@router02]# chkconfig bgpd on
[/crayon]
Quaggaを設定する前に・・・
以下のことをあらかじめ設定しておきましょう
これをしておかないと後でハマって苦しい目にあいます!
実際私はこれをしておかなかったために3日間苦しみました.
- iptablesのルールからicmpをドロップしないように設定する!
- iptablesのルールに TCP 179番を開けるように設定しておく!
- 最低でも自AS内のルーターはLANケーブルでつないでおく!
- どのNICがeth0, eth1, eth1….なのか把握しておく!
CentOSサーバー構築マニュアルの通り設定した方は以下の行を削除すればicmpをドロップしないルールを作成できます
##################### ### PING OF DEATH ### ##################### iptables -N PINGOFDEATH iptables -A PINGOFDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT iptables -A PINGOFDEATH -j LOG --log-level debug --log-prefix 'PINGDEATH DROP:' iptables -A PINGOFDEATH -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j PINGOFDEATH
TCP 179番のポートを開ける場合は
[crayon]
iptables -A INPUT -p tcp –dport 179 -j ACCEPT
[/crayon]
とするとポート解放することができます.
Quaggaの設定
今回はBGPでルーティングするのでBGPに関する設定のみになります
他にもOSPFやRIPなどがあります.気になる人は調べてみてください
またここで設定するルーターはRouter02になります
- 設定のサンプルファイルから設定ファイルをコピーする
[crayon]
[root@router02]# cd /etc/quagga
[root@router02 quagga]# cp zebra.conf.sample zebra.conf
[root@router02 quagga]# cp bgpd.conf.sample bgpd.conf
[/crayon]
- vtyshで各種設定をする
[crayon]
[root@router02]# vtysh
[router02.yourhost.yourdomain]# conf t
[router02.yourhost.yourdomain (conf)]# router bgp 65500
[/crayon]
もしここでエラーが出るなら
[crayon]
[router02.yourhost.yourdomain (conf)]# no router bgp 7675 (エラー文に表示されているAS番号)
[/crayon]
ここからnetworkについて設定したりneighborを登録します.
[crayon]
[router02.yourhost.yourdomain (config-router)]# bgp router-id 10.0.2.1
[router02.yourhost.yourdomain (config-router)]# network 10.0.2.0/24
[router02.yourhost.yourdomain (config-router)]# neighbor 10.10.0.1 remote-as 65432
[router02.yourhost.yourdomain (config-router)]# neighbor 10.0.1.1 remote-as 65432
[router02.yourhost.yourdomain (config-router)]# neighbor 10.0.2.2 remote-as 65500
[router02.yourhost.yourdomain (config-router)]# neighbor 10.10.0.3 remote-as 65501
[router02.yourhost.yourdomain (config-router)]# neighbor 10.0.3.1 remote-as 65501
[router02.yourhost.yourdomain (config-router)]# neighbor 10.10.0.4 remote-as 65530
[router02.yourhost.yourdomain (config-router)]# neighbor 10.0.4.1 remote-as 65530
[/crayon]
これでnetworkの設定とneighbor の登録がおわりました.
実はいまだにneighbor登録についてどういう風に登録したらよいのかわかりません.
このページをみたお詳しい方ご教授いただけないでしょうか.よろしくお願いいたします.
登録ができたらセーブしなくては変更した項目が消えてしまいます.
変更した後はちゃんとセーブしましょう
[crayon]
[router02.yourhost.yourdomain (config-router)]# exit
[router02.yourhost.yourdomain (config)]# exit
[router02.yourhost.yourdomain]# write memory
[/crayon]
セーブする際はすべてのconfigを抜けてから最後のコマンドを実行しましょう.
これをすべてのルーターで同じように設定していきます.
なんとなく設定する雰囲気はつかめたのではないでしょうか.
私自身まだQuaggaについて完璧に理解していないので,もう少し勉強して詳しいことがわかったら追記していこうと思います.
ルーティングできているか確かめる
さきほどのvtyshで
[crayon]
[router02.yourhost.yourdomain]# show ip route
[/crayon]
とすると接続しているルーターとプロトコルがでます.
これでどことどこが接続されているのか,接続されていないのか確かめましょう
参考文献
- ここに記す:quaggaによるBGPルーター
- Quagga(Vyatta)と黒本でCCNAとCCNP合格を目指そう
- ルーティングソフトウェア Quaggaの設定
- BGP Route reflector and Confederation using Quagga and Bird
- つれづれなる・・・ : Amazon EC2 上で BGP peer を張ってみる
- zebraによるbgp4の設定
- Linuxコマンドとviとシェルスクリプトを家で覚えよう!次は自宅クラウドでOpenStack,CloudStack,vSphere管理者経験を作ろう! : 扱いやすくなりました、quagga。これでCCNA、CCNPも合格しやすくなった?(補足、修正)
あとがき
なんとかネットワーク構築が終わり,ルーティングができるようになりました.
しかし,まだ安定稼働とは言えずいろいろ試行錯誤しています.
ネットワークにお詳しい方,ぜひご教授いただけたらと思います.
これからもいろんな勉強会をしてさまざまな知識を得たいですね