*Zebra [#xa2d4cc6] RIGHT:更新日&lastmod(); zebraはTCP/IPのルーティングを行うフリー・ソフトでサポートしているルーティング・プロトコルは,IPv4用はBGP-4,RIPv1,RIPv2,OSPFv2など,IPv6用はRIPng,BGP4+,OSPFv3など。quaagaというzebraの後続版もあるようだ 今回はripを利用するためにインストールしてみる。 それぞれのプロトコルに対応したデーモンがあり、それをzebraというデーモンを通してKeranelのルーティングテーブルに書き込みをしている。またネットワークに経路情報を発信する。 実験環境 192.168.50.0/24 | (ripなし) | | | 192.168.50.1 (eth1) | 192.168.50.1 (eth1) (rip受信のみ) ---------------- | host1 | | | ---------------- | 192.168.10.43 (eth0) | (この間がrip) | | 192.168.10.44 (eth0) ---------------- | host2 | | | ---------------- | 192.168.60.1 (eth1) | 192.168.60.1 (eth1) (rip受信のみ) | | (ripなし) | 192.168.60.0/24 それぞれのインターフェイスにパケットがフォワードされるように ''/etc/sysctl.conf''を変更 net.ipv4.ip_forward = 1 0から1 ''有効にするため'' # sysctl -p **インストール [#z874a218] http://www.zebra.org/から Downlad もしかすると readline-develが必要かもしれないのでインストール $ tar zxvf zebra-0.95a.tar.gz $ cd zebra-0.95a $ ./configure $ make $ su # make install **環境設定 [#vb864c8e] 環境ファイルは /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 debug rip events <= event(Sending and receiving packets, timers, and changes in interfaces )をlogに書き出す debug rip packet <= packet(information about the RIP packets)をlogに書き出す !log stdout log file /var/log/ripd.log log stdout ! interface lo ! interface eth0 <==インターフェイスの指定 interface eth1 <==これがないとpassive-interfaceを指定しても有効にならずripを出してしまう ! interface sit0 ! router rip <== RIPを使うための宣言 passive-interface eth1 <== 受信した全てのRIPメッセージを解釈するが、 そのインターフェースから自分は発信しない ! network 192.168.10.0/24 <== RIP情報を流すネットワークを指定(passive modeの時も必要なようだ) network 192.168.50.0/24 <== RIP情報を流すネットワークを指定(両方必要なようだ) ! 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 eth1 ! interface sit0 ! router rip passive-interface eth1 network 192.168.10.0/24 network 192.168.60.0/24 ! line vty ! ***起動 [#w803823d] # /usr/local/sbin/zebra -d # /usr/local/sbin/ripd -d ***確認 [#l6abef97] 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 Status 表示 仮想端末(ripd:2602)にログイン ripd> show ip protocols Routing Protocol is "rip" Sending updates every 30 seconds with +/-50%, next due in 20 seconds Timeout after 180 seconds, garbage collect after 120 seconds Outgoing update filter list for all interface is not set Incoming update filter list for all interface is not set Default redistribution metric is 1 Redistributing: Default version control: send version 2, receive version 2 Interface Send Recv Key-chain eth0 2 2 eth1 2 2 Routing for Networks: 192.168.10.0/24 192.168.50.0/24 Routing Information Sources: Gateway BadPackets BadRoutes Distance Last Update 192.168.10.44 0 0 120 00:00:05 Distance: (default is 120) host1でdebug rip events, debug rip packetを有効にしてeth1はrip受信のみしたときのlog # tail -f /var/log/ripd.log 2009/09/12 17:28:15 RIP: RECV packet from 192.168.10.44 port 520 on eth0 2009/09/12 17:28:15 RIP: RECV RESPONSE version 2 packet size 24 2009/09/12 17:28:15 RIP: 192.168.60.0/24 -> 0.0.0.0 family 2 tag 0 metric 1 2009/09/12 17:28:15 RIP: triggered update! 2009/09/12 17:28:15 RIP: SEND UPDATE to eth0 ifindex 2 2009/09/12 17:28:15 RIP: multicast announce on eth0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^eth0しかrip送信していない 2009/09/12 17:28:15 RIP: update routes on interface eth0 ifindex 2 2009/09/12 17:28:15 RIP: SEND to socket 8 port 520 addr 224.0.0.9 2009/09/12 17:28:15 RIP: SEND RESPONSE version 2 packet size 24 2009/09/12 17:28:15 RIP: 192.168.50.0/24 -> 0.0.0.0 family 2 tag 0 metric 1 2009/09/12 17:28:15 RIP: RECV packet from 192.168.10.44 port 520 on eth0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^host2からripを受信 2009/09/12 17:28:15 RIP: RECV RESPONSE version 2 packet size 24 2009/09/12 17:28:15 RIP: 192.168.60.0/24 -> 0.0.0.0 family 2 tag 0 metric 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^host2からの内容 2009/09/12 17:28:15 RIP: ignore packet comes from myself もしeth1もripを送信していると以下のようなlogになる 2009/09/12 17:26:19 RIP: SEND UPDATE to eth0 ifindex 2 2009/09/12 17:26:19 RIP: multicast announce on eth0 2009/09/12 17:26:19 RIP: update routes on interface eth0 ifindex 2 2009/09/12 17:26:19 RIP: SEND UPDATE to eth1 ifindex 3 2009/09/12 17:26:19 RIP: multicast announce on eth1 2009/09/12 17:26:19 RIP: update routes on interface eth1 ifindex 3 ''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 仮想端末のポート -zebra 2601 -ripd 2602 -ripngd 2603 -ospfd 2604 -bgpd 2605 -ospf6d 2606 **参考 [#b1810ffe] -http://itpro.nikkeibp.co.jp/free/v6start/zebra_v6/20020308/1/?ST=system -http://www.miraclelinux.com/support/?q=node/184 -http://www.wakhok.ac.jp/~kanayama/summer/05/net/node129.html