zebraはTCP/IPのルーティングを行うフリー・ソフトでサポートしているルーティング・プロトコルは,IPv4用はBGP-4,RIPv1,RIPv2,OSPFv2など,IPv6用はRIPng,BGP4+,OSPFv3など。quaagaというzebraの後続版もあるようだ
今回はripを利用するためにインストールしてみる。
それぞれのプロトコルに対応したデーモンがあり、それをzebraというデーモンを通してKeranelのルーティングテーブルに書き込みをしている。またネットワークに経路情報を発信する。
実験環境
192.168.50.0/24 | | | 192.168.50.1 (eth1) ---------------- | host1 | | | ---------------- | 192.168.10.43 (eth0) | | | 192.168.10.44 (eth0) ---------------- | host2 | | | ---------------- | 192.168.60.1 (eth1) | | 192.168.60.0/24
それぞれのインターフェイスにパケットがフォワードされるように
/etc/sysctl.confを変更
net.ipv4.ip_forward = 1 0から1
有効にするため
# sysctl -p
http://www.zebra.org/から Downlad
もしかすると readline-develが必要かもしれないのでインストール
$ tar zxvf zebra-0.95a.tar.gz $ cd zebra-0.95a $ ./configure $ make $ su # make install
環境ファイルは /usr/local/etcにプログラムは /usr/loca/sbinにインストールされる
# cd /usr/local/etc/ # cp zebra.conf.sample zebra.conf # cp ripd.conf.sample ripd.conf
zebra.confは特に変更場所はない。ただし、対話モードにログインするときのパスワードが記入されているので実運用時変更の必要あり。
ripd.conf
[host1側]
! <==コメント ! Zebra configuration saved from vty ! 2009/09/10 20:49:46 ! hostname ripd password zebra log stdout ! interface lo ! interface eth0 <==インターフェイスの指定 ! interface sit0 ! router rip <== RIPを使うための宣言 ! passive-interface eth0 <== コメントアウトを外すと受信した全てのRIP メッセージを解釈するが、 そのインターフェースから自分は発信しない ! network 192.168.10.0/24 <== RIP情報を流すネットワークを指定 network 192.168.50.0/24 <== ! line vty !
[host2側]
! ! Zebra configuration saved from vty ! 2009/09/10 13:05:42 ! hostname ripd password zebra log stdout ! interface lo ! interface eth0 ! interface sit0 ! router rip network 192.168.10.0/24 network 192.168.60.0/24 ! line vty !
# /usr/local/sbin/zebra -d # /usr/local/sbin/ripd -d
host1で(host2も同じ)仮想端末(zebra:2601)にログイン
$ telnet localhost 2601 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello, this is zebra (version 0.95a). Copyright 1996-2004 Kunihiro Ishiguro. User Access Verification Password: <=zebra(zebra.confのパスワード) Router> show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, B - BGP, > - selected route, * - FIB route K>* 0.0.0.0/0 via 192.168.10.253, eth0 C>* 127.0.0.0/8 is directly connected, lo K>* 169.254.0.0/16 is directly connected, eth1 C>* 192.168.10.0/24 is directly connected, eth0 R>* 192.168.50.0/24 [120/2] via 192.168.10.43, eth0, 00:00:12 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ rip情報が追加されている C>* 192.168.60.0/24 is directly connected, eth1
shellでも確認
$ netstat -rn カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インターフェース 192.168.50.0 192.168.10.43 255.255.255.0 UG 0 0 0 eth0 ^^^^^^^^^^^^^^^^^^^^^^^^^ 追加されている。 192.168.60.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 192.168.10.253 0.0.0.0 UG 0 0 0 eth0
仮想端末のポート