quaggaでOSPFを使ってみる | ぼぶろぐ

ぼぶろぐ

以前は、あいらぶLinux♪というタイトルでしたが、
最近はLinux以外のことも書いているので、タイトルを変更しました。
ぼぶちゃんのぶろぐでぼぶろぐです。

quaggaのospfで経路広告をしてみました。


業務でciscoルータも使っているので、簡単にできるだろうと
軽い気持ちでやってみましたが、かなり時間がかかってしまいました。


事前準備が足りずに進まなかったところがほとんどなので、
最初につまったところを書いておきます。


・quaggaがOSPFなどのルーティングプロトコルごとに異なるプロセスで
動いていることが理解できていなかったため、OSPFの設定が
なかなかできなかった。
また、ルーティングプロトコルごとに設定ファイルを用意しないと
いけないことを知らず、そこでも作業が進みませんでした。

・今回、OSはCentOS5.7を使ったのですが、インストール後にSELinuxと
iptablesを無効にしていなかったため、経路広告が行われなかった。


今回の構成図です。

VMWare上のLinuxサーバ2台を使い、直接接続していない
ネットワークのルーティングを受け取れるかを確認しました。



あいらぶLinux♪


以下、今回の作業ログです。

quaggaのインストールは以前のブログ に公開していますので、
インストール後からのログをまとめていきます。


・フォワードの設定

# vi /etc/sysctl.conf

変更前
net.ipv4.ip_forward = 0

変更後
net.ipv4.ip_forward = 1


# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296



・設定ファイルの準備

/etc/quagga配下にsampleファイルが置いてあるので、
コピーして設定ファイルを準備します。


# cd /etc/quagga/
# ls
bgpd.conf.sample ospf6d.conf.sample ripd.conf.sample vtysh.conf zebra.conf
bgpd.conf.sample2 ospfd.conf.sample ripngd.conf.sample vtysh.conf.sample zebra.conf.sample
# cp -p ospfd.conf.sample ospfd.conf
# cp -p ospf6d.conf.sample ospf6d.conf
# cp -p ripd.conf.sample ripd.conf
# cp -p ripngd.conf.sample ripngd.conf
# cp -p bgpd.conf.sample bgpd.conf
# ls

bgpd.conf ospf6d.conf ospfd.conf.sample ripngd.conf vtysh.conf.sample
bgpd.conf.sample ospf6d.conf.sample ripd.conf ripngd.conf.sample zebra.conf
bgpd.conf.sample2 ospfd.conf ripd.conf.sample vtysh.conf zebra.conf.sample


ログイン時のデフォルトのパスワードはzebraになっていますので、
変更したい場合は、設定ファイル内のパスワードを変更します。


 私は設定ファイルをもともと用意していなかったのですが、
 調べている間に以下のコマンドを実行した結果、必要だと
 いうことがわかりました。

 # cd /etc/init.d
 # ospfd
 can't open configuration file [/etc/quagga/ospfd.conf]


・quaggaの起動
chkconfigで該当サービスを起動するように設定変更した後に再起動して、
プロセスを立ち上げてしまいました。


# chkconfig --list
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
bgpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1
bluetooth 0:off 1:off 2:on 3:on 4:on 5:on 6:off
capi 0:off 1:off 2:off 3:off 4:off 5:off 6:off
conman 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
dnsmasq 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dund 0:off 1:off 2:off 3:off 4:off 5:off 6:off
firstboot 0:off 1:off 2:off 3:on 4:off 5:on 6:off
gpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
hidd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off ★2
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off ★2
irda 0:off 1:off 2:off 3:off 4:off 5:off 6:off
irqbalance 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
isdn 0:off 1:off 2:on 3:on 4:on 5:on 6:off
kudzu 0:off 1:off 2:off 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mcstrans 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mdmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
messagebus 0:off 1:off 2:off 3:on 4:on 5:on 6:off
microcode_ctl 0:off 1:off 2:on 3:on 4:on 5:on 6:off
multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
netplugd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
nscd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
oddjobd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ospf6d 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ospfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1
pand 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1
pcscd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
portmap 0:off 1:off 2:off 3:on 4:on 5:on 6:off
psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rawdevices 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
readahead_early 0:off 1:off 2:on 3:on 4:on 5:on 6:off
readahead_later 0:off 1:off 2:off 3:off 4:off 5:on 6:off
restorecond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ripd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1
ripngd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1
rpcgssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcidmapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcsvcgssd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
smartd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
tcsd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
wpa_supplicant 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ypbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off
yum-updatesd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
zebra 0:off 1:off 2:off 3:off 4:off 5:off 6:off ★1


★1がquagga関連になります。
★2が無効にし忘れたiptablesです。これは事前に無効にしましょう。


quaggaはzebraで動かせるというのは知っていたのですが、
OSPFなどのルーティングプロトコルを利用するには、
それぞれのプロセスを立ち上げる必要があります。

起動時にプロセスが立ち上がるように設定を変更します。


# chkconfig zebra on
# chkconfig ospfd on
# chkconfig ospf6d on
# chkconfig bgpd on
# chkconfig ripd on
# chkconfig ripngd on


再起動後のpsコマンドの実行結果より以下のコマンドで
それぞれのプロセスが起動できます。


# /usr/sbin/zebra -d -A 127.0.0.1 -f /etc/quagga/zebra.conf
# /usr/sbin/bgpd -d -A 127.0.0.1 -f /etc/quagga/bgpd.conf
# /usr/sbin/ospf6d -d -A ::1 -f /etc/quagga/ospf6d.conf
# /usr/sbin/ospfd -d -A 127.0.0.1 -f /etc/quagga/ospfd.conf
# /usr/sbin/ripd -d -A 127.0.0.1 -f /etc/quagga/ripd.conf
# /usr/sbin/ripngd -d -A ::1 -f /etc/quagga/ripngd.conf


・ospfルーティング設定作業

各ルーティングプロトコルごとに接続方法が変わります。
netstatを見るとポート2601から2606までで待ち受けているものがあります。


# netstat -na
【必要箇所のみ抜粋】
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2602 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2604 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2605 0.0.0.0:* LISTEN
tcp 0 0 ::1:2603 :::* LISTEN
tcp 0 0 ::1:2606 :::* LISTEN


このポート番号が各ルーティングプロトコルに紐づいています。


プロトコル ポート番号
zebra 2601/tcp
ripd 2602/tcp
ripngd 2603/tcp
ospfd 2604/tcp
bgpd 2605/tcp
ospf6d 2606/tcp


例えば、zebraにアクセスするためには以下のコマンドを実行します。


# telnet localhost 2601
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

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


User Access Verification

Password:
router2> en
router2# sh run

Current configuration:
!
hostname router2
password xxxxxxxx
!
interface eth0
ipv6 nd suppress-ra
!
interface eth1
ipv6 nd suppress-ra
!
interface eth2
ipv6 nd suppress-ra
!
interface lo
!
interface sit0
ipv6 nd suppress-ra
!
ip forwarding
!
!
line vty
!
end


今回はOSPFの設定なので、以下のコマンドを実行します。


- router1
# telnet localhost 2604
Password:
ospfd> en
ospfd# conf t
ospfd(config)# router ospf
ospfd(config-router)# network 10.0.0.0/24 area 0
ospfd(config-router)# network 172.168.0.0/24 area 0
ospfd(config-router)# end
ospfd# write memory
Configuration saved to /etc/quagga/ospfd.conf


- router2
# telnet localhost 2604
Password:
ospfd> en
ospfd# conf t
ospfd(config)# router ospf
ospfd(config-router)# network 10.10.0.0/24 area 0
ospfd(config-router)# network 172.168.0.0/24 area 0
ospfd(config-router)# end



・2台設定後のルーティングテーブル
- router1
ospfd# sh ip of spf route
============ OSPF network routing table ============
N 10.0.0.0/24 [10] area: 0.0.0.0
directly attached to eth2
N 10.10.0.0/24 [20] area: 0.0.0.0
via 172.168.0.111, eth1
N 172.168.0.0/24 [10] area: 0.0.0.0
directly attached to eth1

============ OSPF router routing table =============

============ OSPF external routing table ===========


- router2
ospfd# sh ip ospf route
============ OSPF network routing table ============
N 10.0.0.0/24 [20] area: 0.0.0.0
via 172.168.0.110, eth1
N 10.10.0.0/24 [10] area: 0.0.0.0
directly attached to eth2
N 172.168.0.0/24 [10] area: 0.0.0.0
directly attached to eth1

============ OSPF router routing table =============

============ OSPF external routing table ===========


直接接続していないセグメントのルーティングが
登録されました。


まとめて書くとそんな大したことはやっていないんだけど、
これだけで1日かかってしまいました。
これをもとにBGPやIPv6ルーティングをやってみます。