最新更新日 2002.07.02.

zebra を使おう(ripng 篇)
 以前に route6d を使ってルータを作る。と言う特集が有りましたが今回はこれを zebra に置き換えてみます。
 第一回目は route6d を zebra に置き換えるので ripng に付いて書いてみることにします。その後、もし時間があれば別項目で zebra の BGP+ に付いて書いてみたいと思います;-)。お楽しみに。

 と、言う事で、まずは zebra のインストールですが、packages/ports からインストールするのが一番楽なので、pkg_add zebra-0.92a_1.tgz するか、 /usr/ports/net/zebra で make;make install するのが良いでしょう。ちなみに zebra のソースをいじれる知り合いの人が言うには「CVS から持ってきた方がソースコードが美しいし、クオリティが高いよ」との事でした。zebra に詳しい方が是非そうしてください;-)。

 ちなみに、zebra は Linux(RedHat) 上で開発されているそうです。なので、 RedHat を使っている人で、最新のカーネルを追っかけている人は凄くその恩恵が受けられるそうです;-)。

 と、言う事で本題です。FreeBSD 上でインストールが終わったら設定しますが、 /usr/local/etc/zebra に必要な設定ファイルがあるので準備しましょう。

----------------
# cd /usr/local/etc/zebra
# cp zebra.conf.sample zebra.conf
# cp ripngd.conf.sample ripngd.conf
----------------

 /usr/local/sbin/zebra に -d オプションを付けて起動するとデーモンモードで起動します。同じく /usr/local/sbin/ripngd も -d で起動します。一応、起動スクリプトを。これを /usr/local/etc/rc.d/zebra.sh として置けば OK でしょう。

----------------
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
export PATH

case $1 in
'start' )
    if   [ -f /usr/local/sbin/zebra ] ; then
        /usr/local/sbin/zebra -d &
        /usr/local/sbin/ripngd -d &
#       /usr/local/sbin/bgpd -d &
    fi
    echo ' Zebra Start.'
    ;;
'stop' )
    if [ -f /var/run/zebra.pid ] ; then
        kill -TERM `cat /var/run/zebra.pid`
        kill -TERM `cat /var/run/ripngd.pid`
#       kill -TERM `cat /var/run/bgpd.pid`
    fi
    echo 'Zebra System Stop'
    ;;
* )
    echo "usage : zebra.sh {start|stop}"
    ;;
esac
----------------

 さて、今はデェフォルトの状態で起動しました。ちょっとづつ見ていく事にしましょう。zebra をインストールすると、以下の表の様なルーティングプロトコルをしゃべる事が可能になります。そして、それぞれのデーモンの管理用に port を開けて待っている事になります。

デーモンプロトコル管理用 port
zebra管理用デーモン2601
ripdRIP2602
ripngdRIPng2603
ospfdOSPFv22604
bgpdBGP4 / BGP4+2605
ospf6dOSPFv32606

 これらの port に接続して、VTY 端末経由で設定ファイルを変更していきます。zebra は基本的には Cisco ライクなので zebra をいじれる様になると Csico もいじれる様になるかな?;-)

zebra.conf を設定する
   と、言う事でまずは設定ファイルを見ていく事にしましょう。一番最初は zebra.conf です。

! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.14 1999/02/19 17:26:38 developer Exp $
!
hostname Router
password zebra
enable password zebra
!
! Interface's description. 
!
!interface lo
! description test of desc.
!
!interface sit0
! multicast

!
! Static default route sample.
!
!ip route 0.0.0.0/0 203.181.89.241
!

!log file zebra.log

 これはデェフォルトの設定(zebra.conf.sample)です。これを以下の様に変更してみましょう。

!
! Zebra configuration saved from vty
!   2002/07/02 23:31:16
!
hostname zebra-deamon
password zbrpass
enable password zbrpass
log syslog
!
!
interface faith0
 ipv6 nd suppress-ra
!
interface lo0
 ipv6 nd suppress-ra
!
interface ep0
 ipv6 nd suppress-ra
!
interface ed1
 ipv6 nd suppress-ra
!
interface gif0
 ipv6 nd suppress-ra
!
ipv6 route ::/0 gif0
!
access-list OK-LIST permit 127.0.0.1/32
access-list OK-LIST permit 192.168.1.0/24
access-list OK-LIST deny any
!
ipv6 access-list OK-LIST permit ::1/128
ipv6 access-list OK-LIST permit 3ffe:505:2019:5000:/64
ipv6 access-list OK-LIST deny any
!
line vty
 access-class OK-LIST
 ipv6 access-class OK-LIST
 exec-timeout 600 0
!

 起動した zebra の管理 port に telnet します。パスワードは zebra.conf の password に指定されている "zebra" になります。そしてプロンプトは hostname で指定してある "Router" になります。

----------------
# telnet localhost 2601
Trying ::1...
Connected to localhost.running-dog.net.
Escape character is '^]'.

Hello, this is zebra (version 0.92a).
Copyright 1996-2001 Kunihiro Ishiguro.


User Access Verification

Password: 
Router> 
----------------

 "?" と打つと利用できるコマンドを表示してくれます。また、tcsh みたいにコマンドの補完もしてくれるので TAB キーが重宝します。これでだいたいのイメージを掴むことにしましょう。

 続いて設定内容を変更します。まず、hostname と password を変更します。その為には「enable 権限」に移行します。enable コマンドを入力すると enable password を聞かれるので zebra.conf の enable password で設定されているパスワードを指定します。その後、configure terminal と言うコマンドを叩きます。そして、"?" と打つと利用できるコマンドの一覧が表示されるので、hostname、password、enable password コマンドを実行し、自分の好きな値に変更します。hostname はただちに反映されます。

----------------
Router> enable
Password: 
Router# 
Router# configure terminal
Router(config)# hostname zebra-deamon
zebra-deamon(config)# password zbrpass
zebra-deamon(config)# enable password zbrpass
zebra-deamon(config)# exit
zebra-deamon# show running-config

Current configuration:
!
hostname zebra-deamon
password zbrpass
enable password zbrpass
   :
   :
zebra-deamon# write memory
Configuration saved to /usr/local/etc/zebra/zebra.conf
zebra-deamon# exit
Connection closed by foreign host.
% 
----------------

 変更が完了したら、exit で一旦抜け、enable 権限状態で show running-config コマンドを実行します。すると、現在動作している zebra の設定の情報が表示されます。hostname、password、enable password が正しく変更された事を確認しましょう。

 ここで変更した値は、zebra が動いている最中のメモリにしか展開されて居ないのでこれを zebra.conf に反映する必要があります。write memory コマンドを打って /usr/local/etc/zebra/zebra.conf に反映させましょう。

 以上、基本的な zebra の使い方でした。これを繰り返し他の設定も施す事にしましょう;-)。新しく作成した zebra.conf の説明をしておきます。

1. ipv6 route ::/0 gif0
 IPv6 のデェフォルトルートは gif0 である事の設定。

2. access-list OK-LIST permit 127.0.0.1/32
 "OK-LIST" と言うクラスを設定し、port 2601 に対し、localhost からしか接続を許可しない様に設定。

3. access-list OK-LIST permit 192.168.1.0/24
 "OK-LIST" と言うクラスを設定し、port 2601 に対し、192.168.1.0/24 からしか接続を許可しない様に設定。

3. access-list OK-LIST deny any
 上の 2.、3. 以外の所からははじくと言う設定。

 同様にして、IPv6 access-list が存在します。通常、IPv4 に付いては FW などで止めることが可能な場合が多いですが、IPv6 に対応している有用な FW が無い事を考えると zebra 側である程度守った方が安全でしょう。

4. line vty の設定
 これで port 2601 に対するアクセス制限がかけられますが、最後にアクセスリストを登録する必要があります。

 access-class OK-LIST は、IPv4 のアクセスクラスを宣言します。
 ipv6 access-class OK-LIST は、IPv6 のアクセスクラスを宣言します。
 exec-timeout 600 0 は、まぁ、書いておきましょう;-)。

 これだけ書き込んだら OK でしょう。尚、これらは zebra に対してコマンドを打つと随時反映されます。最後に write memory すると zebra.conf に反映されます。もし、zebra.conf をエディタで編集した場合には、zebra デーモンを再起動してあげましょう。

ripngd.conf を設定する
 続いて ripngd.conf の設定を見ていきましょう。その前に今回のネットワーク構成図ですが、route6d を使ってルータを作る。 の所にあるテキストベースのネットワーク構成図にします。そして、GateWay サーバである gate.running-dog.net は今まで通り route6d として LAN 内 Router である v6route.running-dog.net を zebra の ripngd を利用する事にします。

 今回も IPv4 の事については掲載していません。あくまで IPv6 のルーティングとなります。と、言う事で、設定ファイルを見ていく事にしましょう。最初はデェフォルト状態の ripng.conf です。

! -*- rip -*-
!
! RIPngd sample configuration file
!
! $Id: ripngd.conf.sample,v 1.12 1999/02/19 17:35:39 developer Exp $
!
hostname ripngd
password zebra
!
! debug ripng events
! debug ripng packet
!
!
router ripng
! network sit1
! route 3ffe:506::0/32
! distribute-list local-only out sit1
!
!ipv6 access-list local-only permit 3ffe:506::0/32
!ipv6 access-list local-only deny any
!
log stdout

 これを以下の様に変更する事にしましょう。前回は zebra の管理 port で ある 2601 接続しましたが、今回は ripng の管理 port である 2603 に telnet で接続していろいろ設定する事になります。

!
! Zebra configuration saved from vty
!   2002/07/02 34:15:44
!
hostname ripng-deamon
password ripngpass
enable password ripngpass
log stdout
!
interface faith0
!
interface lo0
!
interface fxp0
!
interface fxp1
!
interface gif0
!
!
router ripng
 default-information originate
 network gif0
 redistribute connected
 route 3ffe:505:2019:a000::/64
!
access-list OK-LIST permit 127.0.0.1/32
access-list OK-LIST permit 192.168.1.0/24
access-list OK-LIST deny any
!
ipv6 access-list OK-LIST permit ::1/128
ipv6 access-list OK-LIST permit 3ffe:505:2019:5000:/64
ipv6 access-list OK-LIST deny any
!
line vty
 access-class OK-LIST
 ipv6 access-class OK-LIST
 exec-timeout 600 0
!

 zebra.conf の所で設定したモノはそのまま同じ事をしましょう。hostname、password、enable password、そして、access-list 回りの設定ですね。すると・・。ripng の為の設定は結局 5 行しか無いと言う事ですね・・。ではそれについて見ていくことにしましょう。

1.router ripng
 ripng を使うと言う設定。

2. default-information originate
 デフォルト経路を生成すると言う設定。

3. network gif0
 ripng をシャベるインターフェースを指定します。

4. redistribute connected
 ま、オマジナイと言う事で;-)。

5. route 3ffe:505:2019:a000::/64
 設定している ripng からは 3ffe:505:2019:a000::/64 の情報を広告と言う設定。

 こんな感じで設定が出来ていれば ripngd が route6d とお喋りできるようになるかと思います。後は、rpingd.conf に書き込んで OK と言う事になります。確認方法は netstat -nr -f inet6 で見る事が可能です。もしくは、 telnet で ripngd に接続し、以下のコマンドを打つ事により可能です。

----------------
ripngd-router> show ipv6 ripng 

Codes: R - RIPng

   Network                           Next Hop                  If Met Tag Time
R  ::/0                              ::                         0  1   0 
R  3ffe:505:2019::/48                fe80::260:8ff:feb0:7e58    5  2   0 02:20
R  3ffe:505:2019:1::/64              fe80::260:8ff:feb0:7e58    5  2   0 02:20
C  3ffe:505:2019:a000::/64           ::                         3  1   0 
ripngd-router>
----------------

 "C" は "Connected" の略で、ルータが接続しているインタフェースの経路情報になります。"R" は Ripng が取得した経路情報です。つまり上流から取得したと言う事ですね。"If" は ifconfig -l" の結果の何番目のインターフェースかと言う情報です。"Met" は経路が到達するまでの個数になります。

 最後におまけですが、gate.running-dog.net 側を route6d から zebra の ripngd に変更した場合の、ripngd.conf を付けておきます。これで、対抗で zebra を使う事が可能ですね;-)。

hostname GateWay
password ripngpass
enable password ripngpass
log syslog
!
interface gif1
!
router ripng
 default-information originate
 network gif1
 redistribute connected
 route 3ffe:505:2019::/48
!
access-list OK-LIST permit 127.0.0.1/32
access-list OK-LIST permit 192.168.1.0/24
access-list OK-LIST deny any
!
ipv6 access-list OK-LIST permit ::1/128
ipv6 access-list OK-LIST permit 3ffe:505:2019:3000:/64
ipv6 access-list OK-LIST deny any
!
line vty
 access-class OK-LIST
 ipv6 access-class OK-LIST
 exec-timeout 600 0
!

 とまぁ、今回は zebra の ripng を使ってみました。 route6d とどっちが良いのか?と言われればまー、どっちでしょうかねぇぇ(^^;;。次回は zobra を使って BGP4+ を試してみましょう。ただしっ!! いつ書けるかは今の所未定です。;-P



Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.