Quaggaを使ってLinuxサーバで動的ルーティング

Quaggaは、UNIX/Linuxプラットフォームで動くルーティングソフトウェアです。
OSPF、BGP、RIP等のプロトコルが実装されていて、GNU Zebraから派生したソフトウェアだとか。


某所の環境が、ロードバランサを設置(というかLBに仮想IPアドレスを配布)すると上位のルーターにそのLBへのルートが必要となるネットワーク構成だったので、ソフトウェアベースのLinuxロードバランサに、こいつを入れて、OSPFで動的な経路広報(ダイナミックルーティング)ができるか検証してみました。

インストール

今回、OSはCentOS 6系で動かしてみました。
CentOS 6系で、Quaggaはyumリポジトリに入っていますので、

# yum -y install quagga

でインストールできると思います。

僕は、最新版で動作検証してみたかったので、公式のダウンロードサイトから最新版(現在は、0.99.22.4)のソースパッケージを取ってきて、RPMファイルを作ってインストールしてみました。(specファイルも同梱されています。)

設定

設定ファイルは、"/etc/quagga"ディレクトリ配下にあります。(各種サンプルのファイルがおいてある)

# ll /etc/quagga/
合計 44
-rw-r--r-- 1 root   root       655 12月  4 18:54 2013 babeld.conf.sample
-rw-r--r-- 1 root   root       566 12月  4 18:54 2013 bgpd.conf.sample
-rw-r--r-- 1 root   root      2801 12月  4 18:54 2013 bgpd.conf.sample2
-rw-r--r-- 1 root   root       789 12月  4 18:54 2013 isisd.conf.sample
-rw-r--r-- 1 root   root      1110 12月  4 18:54 2013 ospf6d.conf.sample
-rw-r--r-- 1 root   root       182 12月  4 18:54 2013 ospfd.conf.sample
-rw-r--r-- 1 root   root       406 12月  4 18:54 2013 ripd.conf.sample
-rw-r--r-- 1 root   root       390 12月  4 18:54 2013 ripngd.conf.sample
-rw-r----- 1 root   root         0 12月  5 10:43 2013 vtysh.conf
-rwxr-x--- 1 quagga quaggavty  128 12月  4 18:54 2013 vtysh.conf.sample
-rw-r----- 1 quagga quagga      24 12月  5 10:43 2013 zebra.conf
-rw-r--r-- 1 root   root       369 12月  4 18:54 2013 zebra.conf.sample


今回は、OSPFをしゃべらせたいので、/etc/quagga配下に"zebra.conf"と"ospfd.conf"を作成します。
とりあえず試しに、両ファイルとも以下の内容で作成します。
(とりあえず↓だけ書いておけばログインできるようになる。)

hostname test-router
password zebra
log stdout


で、次にzebraとospfdを起動させます。

# /etc/init.d/zebra start
# /etc/init.d/ospfd start

ログインしてOSPFの設定

localhost(zebraやospfdを稼動させたマシン)のLISTENしている各ポートへtelnetでアクセスします。
公式ドキュメントによると、以下記載の通り。

zebrasrv      2600/tcp		  # zebra service
zebra         2601/tcp		  # zebra vty
ripd          2602/tcp		  # RIPd vty
ripngd        2603/tcp		  # RIPngd vty
ospfd         2604/tcp		  # OSPFd vty
bgpd          2605/tcp		  # BGPd vty
ospf6d        2606/tcp		  # OSPF6d vty
ospfapi       2607/tcp		  # ospfapi
isisd         2608/tcp		  # ISISd vty


今回は、OSPFの設定がしたいので、2604ポートへアクセスします。

# telnet localhost 2604

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

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


User Access Verification

Password:

test-router>

"ospfd.conf"で設定したパスワードを使ってログインできました。

test-router> en
test-router# sh run

Current configuration:
!
hostname test-router
password zebra
log stdout
!
!
!
interface bond0
!
interface bond0.88
!
interface em1
!
interface em2
!
interface lo
!
interface p2p1
!
interface p2p2
!
line vty
!
end
test-router#

enableして(必要に応じてenable passwordを設定してくだされ。)、"show running-config"とかで、現在の設定状況とかも確認できます。


さて、OSPFの設定をしてしまいましょう。以下のような感じでコマンドを打つだけです。

test-router> en
test-router# conf t
test-router(config)# router ospf
test-router(config-router)# redistribute connected
test-router(config-router)# network 10.255.255.24/29 area 0.0.0.0
test-router(config-router)# end
test-router# write memory
Configuration saved to /etc/quagga/ospfd.conf
test-router#

今回は自身が持っている仮想IPアドレス(VIP)を経路広報したいので、"redistribute connected"をつけて設定しています。
最後に、"write memory"しておけば、設定ファイルに保存されます。


こんな感じで、QuaggaはCISCOのiOSライクなコマンドラインになっているので、普段ネットワーク機器に慣れている方はとっつきやすいと思います。

動作確認

さて、それでは経路が広報されているか確認しましょう。
既にOSPFでしゃべっているルータがあれば、そこで確認すれば良いですし、もう1台サーバを用意して、そこで↑と同じような内容でソフトウェアルータを構築して、確認してもOKです。

Before

another-router> show ip ospf route
============ OSPF network routing table ============
N    10.255.255.24/29      [10] area: 0.0.0.0
                           directly attached to bond0.88
N    10.255.255.30/32      [20] area: 0.0.0.0
                           via 10.255.255.28, bond0.88

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

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

After

another-router> show ip ospf route
============ OSPF network routing table ============
N    10.255.255.24/29      [10] area: 0.0.0.0
                           directly attached to bond0.88
N    10.255.255.30/32      [20] area: 0.0.0.0
                           via 10.255.255.28, bond0.88

============ OSPF router routing table =============
R    10.255.255.153        [10] area: 0.0.0.0, ASBR
                           via 10.255.255.28, bond0.88

============ OSPF external routing table ===========
N E2 10.48.0.0/19          [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.60/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.61/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.62/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.63/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.255.255.152/30     [10/20] tag: 0
                           via 10.255.255.28, bond0.88

この通り、経路が広報されて、ルーティングテーブルに追加されていることが確認できます。

ちなみに

"write memory"して保存された設定ファイル(ospfd.conf)は以下の通りです。

!
! Zebra configuration saved from vty
!   2014/01/07 18:25:29
!
hostname test-router
password zebra
log stdout
!
!
!
interface bond0
!
interface bond0.88
!
interface em1
!
interface em2
!
interface lo
!
interface p2p1
!
interface p2p2
!
router ospf
 redistribute connected
 network 10.255.255.24/29 area 0.0.0.0
!
line vty
!

最初から、こんな感じで内容を記載しておけば、設定時にコマンドを打つ必要もないのですが。そこは好みで。
今日はこの辺まで。それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


マスタリングTCP/IP ルーティング編

マスタリングTCP/IP ルーティング編

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

  • 作者: 竹下隆史,村山公保,荒井透,苅田幸雄
  • 出版社/メーカー: オーム社
  • 発売日: 2012/02/25
  • メディア: 単行本(ソフトカバー)
  • 購入: 4人 クリック: 34回
  • この商品を含むブログ (37件) を見る