ルーティングソフトウェア quagga の設定

実験で使用する UNIX 用ルーティングソフトウェア quagga の基本的な設定について紹介する.

このドキュメントについて

このドキュメントは東京大学電子情報工学科 2009年度 後期学生実験 江崎研担当の「IPネットワークアーキテクチャ」のために, 2009 年 10 月 12 日に quagga 0.99.9-2ubuntu1.3 について書かれたドキュメントである.

更新履歴

目次

リンク

イントロダクション

quagga は 石黒邦宏氏が開発したルーティングソフトウェア GNU zebra の派生ソフトウェアで,FreeBSD, NetBSD, Linux, Solaris などの UNIX で動作し,OSPFv2, OSPFv3, RIP v1, RIP v2, RIPng, BGP-4 などのルーティングプロトコルが実装されている.quagga をインストールすることによって PC をソフトウェアルータとして動作させることが可能になる.

quagga にはいくつかのルーティングデーモンが含まれている.zebra は quagga のコアデーモンで,UNIX のカーネル上に抽象化レイヤを構築し,後に挙げるルーティングデーモンに対して API(Zserv API) を提供する.また static ルーティングなどの設定を行う.ripd は RIPv1 と RIPv2,ospfd は OSPFv2,ospf6d は OSPFv3(IPv6),ripngd は RIPng(IPv6),bgpd は BGPv4+(IPv6) を実装したデーモン (Zserv clients) である.

また,quagga は Cisco のルータやスイッチに使用されている基本ソフトウェア,IOS のコマンドラインに良く似たコマンドラインを持つため,Cisco のネットワーク機器を扱う練習台としても利用されている.

各種設定方法などのドキュメントはこちらから確認することができる.

環境

主に本実験で使用する Ubuntu 8.04 について記す.Linux のターミナルの基礎的な操作方法は理解しているものとして説明を行う.

インストール

Ubuntu ではパッケージ化されているため apt-get install quagga でインストール可能である.

elab@denjo-pc:/etc/quagga$ sudo apt-get install quagga

FreeBSD では ports(/usr/ports/net/quagga),NetBSD では pkgsrc(/usr/pkgsrc/net/quagga),Mac OS X では macports(port install quagga) でインストール可能である.

コンフィグファイルのコピー

quagga のコンフィグファイルは /etc/quagga に置かれる.初期状態では daemons と debian.conf が置かれているはずである.

elab@denjo-pc:/etc/quagga$ ls -l    
total 20
-rw-r--r-- 1 root root 850 Oct  8 17:51 daemons
-rw-r--r-- 1 root root 471 Jun  9 04:27 debian.conf

ルーティングデーモンのシェルで対話的に設定したコンフィグを保存すると,このディレクトリのコンフィグファイルに保存される. 例えば ripd のコンフィグファイルは ripd.conf である.なお,コンフィグファイルが無い状態ではデーモンは起動しないため, サンプルコンフィグファイルを /usr/share/doc/quagga/examples/ からコピーする. サンプルコンフィグファイルには各デーモンのパスワードなどの設定など最低限必要な設定と設定例がコメントとして書かれている. 利用する場合はファイル名末尾の .sample は消す.

本実験ではコア・デーモンのコンフィグファイル zebra.conf,quagga のシェル VTY shell のコンフィグファイル vtysh.conf,本実験で使用する RIP のコンフィグファイル ripd.conf をコピーする.

elab@denjo-pc:/etc/quagga$ sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
elab@denjo-pc:/etc/quagga$ sudo cp /usr/share/doc/quagga/examples/ripd.conf.sample  /etc/quagga/ripd.conf
elab@denjo-pc:/etc/quagga$ sudo cp /usr/share/doc/quagga/examples/vtysh.conf.sample /etc/quagga/vtysh.conf

コンフィグファイルの編集

quagga を使用するための基本的な設定を行う.ルーティングの設定は各デーモンのシェルから対話的に行うため,コンフィグファイルにルーティングの設定を書くことはしない.

ここまでの手順でコンフィグファイルの存在は以下のようになっているはずである.

elab@denjo-pc:/etc/quagga$ ls -l    
total 20
-rw-r--r-- 1 root root 850 Oct  8 17:51 daemons
-rw-r--r-- 1 root root 471 Jun  9 04:27 debian.conf
-rw-r--r-- 1 root root 426 Oct  8 17:51 ripd.conf
-rw-r--r-- 1 root root 126 Oct  8 17:50 vtysh.conf
-rw-r--r-- 1 root root 389 Oct  8 17:51 zebra.conf

daemons

起動するルーティングデーモンを指定するコンフィグファイルである.yes で起動,no で不起動,数値で優先度を指定できる.シェルスクリプト同様,先頭が # の行はコメントである.

本実験では zebra と ripd を起動するため,以下のように書き換える.

zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no
isisd=no

debian.conf

ルーティングデーモンのオプションを指定するコンフィグファイルである.--daemon でデーモン化,-A で vtysh の LISTEN アドレスを指定できる.シェルスクリプト同様,先頭が # の行はコメントである.

本実験では変更の必要は無い.

vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1"
bgpd_options="  --daemon -A 127.0.0.1"
ospfd_options=" --daemon -A 127.0.0.1"
ospf6d_options="--daemon -A ::1"
ripd_options="  --daemon -A 127.0.0.1"
ripngd_options="--daemon -A ::1"
isisd_options=" --daemon -A 127.0.0.1"

vtysh.conf

vtysh のコンフィグファイルである.ユーザ名とパスワードを設定する.IOS 同様,先頭が ! の行はコメントである.

本実験では特に変更しなくても良い.

service integrated-vtysh-config
!hostname quagga-router
username root nopassword

zebra.conf

zebra のコンフィグファイルである.ホスト名やパスワードを設定する.IOS 同様,先頭が ! の行はコメントである.

本実験では特に変更しなくても良い.

! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: quagga.html,v 1.1 2010/10/05 08:13:54 gucchi 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 /var/log/quagga/zebra.log

ripd.conf

ripd のコンフィグファイルである.ホスト名やパスワードを設定する.IOS 同様,先頭が ! の行はコメントである.

本実験では特に変更しなくても良い.

"router rip" というコンフィグ(コマンド)により RIP ルータを有効にしていることを理解する.

! -*- rip -*-
!
! RIPd sample configuration file
!
! $Id: quagga.html,v 1.1 2010/10/05 08:13:54 gucchi Exp $
!
hostname ripd
password zebra
!
! debug rip events
! debug rip packet
!
router rip
! network 11.0.0.0/8
! network eth0
! route 10.0.0.0/8
! distribute-list private-only in eth0
!
!access-list private-only permit 10.0.0.0/8
!access-list private-only deny any
! 
!log file /var/log/quagga/ripd.log
!
log stdout

quagga の再起動

quagga のコンフィグレーションファイルを編集した場合は,編集内容を反映させるために quagga の再起動が必要になる.

$ sudo /etc/init.d/quagga restart
Stopping Quagga daemons (prio:0): (ripd) (zebra) (bgpd) (ripngd) (ospfd) (ospf6d) (isisd).
Removing all routes made by zebra.
Nothing to flush.
Loading capability module if not yet done.
Starting Quagga daemons (prio:10): zebra ripd.

この例では zebra と ripd を起動させるように変更した.なお,以降で説明する対話的なコンフィグレーションを行った場合は,この操作を行う必要は無い.

vtysh へのログイン

telnet で各ルーティングデーモンへログインすることが出来る.各デーモンのポート番号は以下の通りである.

daemonport
zebra2601
ripd2602
ospfd2604
bgpd2605
ospf6d2606

ripd へのログインは以下のように行う.パスワードは ripd.conf で設定したものである.

elab@denjo-pc:/etc/quagga$ telnet localhost 2602
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.9).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password: 
ripd>

IOS系コマンドラインの基本的な使い方

ログインすると

ripd>

のようなシェルが出現する.このシェルを用いてルータのコンフィグレーションを対話的に行うことが出来る.

候補の表示

? を入力することによりコマンドの候補を表示することが出来る.入力しても ? は表示されないが,便宜上 ? を記す.

利用可能なコマンドを一覧できる.

ripd> ?
  echo      Echo a message back to the vty
  enable    Turn on privileged mode command
  exit      Exit current mode and down to previous mode
  help      Description of the interactive help system
  list      Print command list
  quit      Exit current mode and down to previous mode
  show      Show running system information
  terminal  Set terminal line parameters
  who       Display who is on vty

e で始めるコマンドの一覧を表示する.

ripd> e?
  echo    Echo a message back to the vty
  enable  Turn on privileged mode command
  exit    Exit current mode and down to previous mode
ripd> e

コマンドの次の引数を調べる.この場合改行であるのでコマンドはこれで完了している.

ripd> enable ?
  <cr>  
ripd> enable 

コマンドの補完

コマンドの入力中に tab キーを押すとコマンドを補完することが出来る.候補が複数ある場合は候補が一覧される.一意に補完できる場合はコマンドが補完されるが,補完しないまま入力してもコマンドとして解釈される.tab を入力しても文字は表示されないが,押す箇所を便宜上 [tab] として記す.

候補が複数ある場合は候補が表示される.

ripd> e[tab]      
echo       enable     exit   

一意に補完できる場合は補完される.

ripd> en[tab]
ripd> enable 

一意に補完できる場合は入力途中でもコマンドとして実行できる.

ripd> en
ripd#

ユーザ EXEC モードと特権 EXEC モード

IOS には UNIX の一般ユーザと root のように,ユーザ EXEC モードと特権 EXEC モードが存在する.コンフィグは特権 EXEC モードでなければ行うことが出来ない.ユーザ EXEC モードから特権 EXEC モードへは enable で移行することが出来る.一般には enable パスワードがかけられている.

前述のようにコンフィグは一意に補完が出来れば省略できるので en で enable が実行できる.特権 EXEC モードになるとプロンプトが # になる.

ripd> en
ripd#

コンフィグの確認

実行中のコンフィグ (running-config) を確認するには show running-config を利用する.

ripd# show ru

Current configuration:
!
hostname ripd
password zebra
log stdout
!
router rip
!
line vty
!
end

グローバルコンフィギュレーションモードへの移行

configure terminal は簡単に言えばルータのコンフィグを行うモード(グローバルコンフィギュレーションモード)へ移行するコマンドである.このモードへ移行することで,実行中のルータのコンフィグ (running-config) をリアルタイムで変更することが出来る.加えられた変更は保存しなければ電源を切ってしまうと消えてしまう.コンフィグの保存に関しては後述する.

変更が即時に反映されるため誤ったコンフィグを入れると大変なことになる場合が多い.念のためにまずコンフィグをバックアップするのが安全である.面倒な場合は前述の show running-config で現在のコンフィグをターミナルに表示して残しておくという方法がよく行われる(ターミナルをクリアしないように注意する).

ripd# conf t
ripd(config)#

各コンフィギュレーションモードへの移行

ルータの各種機能のコンフィグを行うためには,グローバルコンフィギュレーションモード (config) から,各種のコンフィギュレーションモードへ移行する.

以下は RIP ルータのコンフィギュレーションモードへ移行する例である. tab 補完と ? でのヘルプ表示の使い方を参考にすると良い.

ripd(config)# r[tab]      
ripd(config)# route?
  route-map  Create route-map or enter route-map command mode
  router     Enable a routing process
ripd(config)# router
ripd(config)# router ?
  rip    Routing Information Protocol (RIP)
  zebra  Make connection to zebra daemon
ripd(config)# router r[tab]
ripd(config)# router rip ?
  <cr>  
ripd(config)# router rip 
ripd(config-router)# 

プロンプトの (config) が (config-router) となった.これで RIP ルータのコンフィギュレーションモードへ移行することが出来た.

各コンフィギュレーションモードのコンフィグ

RIP ルータのコンフィギュレーションモードに入ったら RIP ルータのコンフィグを行う.

以下は RIP ルータのインターフェイスの有効化を行うコマンドを入力した例である.

ripd(config-router)# ?
  default-information  Control distribution of default route
  default-metric       Set a metric of redistribute routes
  distance             Administrative distance
  distribute-list      Filter networks in routing updates
  end                  End current mode and change to enable mode.
  exit                 Exit current mode and down to previous mode
  help                 Description of the interactive help system
  list                 Print command list
  neighbor             Specify a neighbor router
  network              Enable routing on an IP network
  no                   Negate a command or set its defaults
  offset-list          Modify RIP metric
  passive-interface    Suppress routing updates on an interface
  quit                 Exit current mode and down to previous mode
  redistribute         Redistribute information from another routing protocol
  route                RIP static route configuration
  route-map            Route map set
  show                 Show running system information
  timers               Adjust routing timers
  version              Set routing protocol version
  write                Write running configuration to memory, network, or terminal
ripd(config-router)# net[tab]
ripd(config-router)# network ?  
  A.B.C.D/M  IP prefix /, e.g., 35.0.0.0/8
  WORD       Interface name
ripd(config-router)# network 192.168.0.0/24
ripd(config-router)# 

各コンフィギュレーションモードからの離脱

RIP ルータのコンフィグを終えてグローバルコンフィギュレーションモードに戻りたい時は exit コマンドで RIP ルータのコンフィギュレーションモードを抜けることが出来る.

ripd(config-router)# exit
ripd(config)# 

end コマンドで一気にグローバルコンフィギュレーションモードからも抜けて,特権 EXEC モードへことが出来る.

ripd(config-router)# end
ripd#

コンフィグの確認(再掲)

実行中のコンフィグ (running-config) を確認するには show running-config を利用する.先ほど設定した network 192.168.0.0/24 が反映されているのが分かる.

ripd# show ru

Current configuration:
!
hostname ripd
password zebra
log stdout
!
router rip
 network 192.168.0.0/24
!
line vty
!
end

コンフィグの保存

runnning-config は電源を抜くと消えてしまうコンフィグである.起動時に読み込まれる startup-config にコピーする必要がある.

ripd# copy running-config startup-config
Configuration saved to /etc/quagga/ripd.conf
write memory というコマンドはコンフィグの保存を行う古いコマンドであるが,タイプ数が少ないので未だによく利用される.
ripd# wr me     
Configuration saved to /etc/quagga/ripd.conf

ルータの設定

ルータの設定はドキュメントを参照しつつ行う.