Quaggaとは
Quaggaとは、OSPFv2, OSPFv3, RIP v1/v2, RIPng, BGP-4等の動的ルーティングプロトコルを動作させることが出来るソフトウェアルータです。(もちろん静的ルーティングも出来ます。)UNIXプラットフォームで動作し、FreeBSD, Linux, Solaris, NetBSD等で動作します。
CiscoライクなCLI環境が特徴で、Ciscoルータを触ったことがある方なら簡単に設定を行うことが出来ます。逆に言えば、Quaggaのコマンド体系に慣れておけばCiscoルータの設定もある程度出来るようになるかと思います。
Quaggaの動作
Quaggaはコアデーモンである zebra と ripd や ospfd 等、各ルーティングプロトコル毎にある複数の zebra のクライアントデーモンから構成されています。クライアントデーモンによって変更されたルーティング情報を zebra がカーネルとのインターフェイスとなり、カーネルのルーティングテーブルの書き換えを行います。
使用出来るルーティングプロトコルとデーモン
各デーモンごとに以下のルーティングプロトコルを使用出来ます。zebra と使用したいルーティングプロトコル用のクライアントデーモンを起動させることで動作させます。
IPv4 | IPv6 | 説明 |
zebra | zebra | 静的ルーティング |
ripd | ripngd | ripd : RIPv1/RIPv2(IPv4) rpngd : RIPng(IPv6) |
ospfd | ospf6d | ospfd : OSPFv2(IPv4) odpf6d : OSPFv3(IPv6) |
bgpd | bgpd | BGPv4 +(IPv4,IPv6) |
isisd | isisd | IS-IS(IPv4,IPv6) |
デーモン起動時に /etc/quagga に設定ファイルを配置します。サンプルの設定ファイルが /usr/share/doc/quagga-core/examples/ にあるのでコチラからコピーして適宜内容を編集して配置します。
各種プロセスへのログイン
実際に各ルーティングプロトコルの設定をするためには、VTYアクセスによって行います。ログインパスワードなどの設定は /etc/quagga/vtysh.conf によって行います。
各種プロセスへは以下のように接続を行います。
$ telnet localhost ポート番号
各種プロセスでVTYアクセスに使用するポートは以下のようになっています。
デーモン | ポート番号 |
zebra | 2601 |
ripd | 2602 |
ripngd | 2603 |
ospfd | 2604 |
bgpd | 2605 |
ospf6d | 2606 |
isisd | 2608 |
動作環境
VirtualBoxを使用して、以下のように「debrt01」、「debrt02」、「debrt03」、「debsv01」、「debsv02」の5台のゲストOSを使用します。使用するネットワークアダプターは「ブリッジアダプター」と「内部ネットワーク」となっています。
前回までのネットワークトポロジであれば、「debrt01」が所属しているネットワークへサーバが接続されていたので、ルーティング情報が自動で学習されて通信が可能でした。しかし今回は、サーバとの間に「debrt02」、「debrt03」が接続されているため、ルーティング情報をルーティングテーブルへ登録する必要があります。
この記事では目標として、サーバ間の通信、外部ネットワークとの通信(NAT)を静的ルーティングによって行うこと出来るようにします。
参考までに5台とも以下のような構成となっています。
OS | Debian 10.2 Buster |
デスクトップ環境 | 未インストール |
プロセッサー数 | 1 |
メモリ | 1GB |
ストレージ | 8GB |
ルータ
「debrt01」、「debrt02」、 「debrt03」はルータとして使用します。
debrt01
enp0s3 | アダプター1 | ブリッジアダプター |
IPアドレス | 192.168.0.21/24 192.168.0.22/24 192.168.0.23/24 |
|
デフォルトゲートウェイ | 設定無し | |
enp0s8 | アダプター2 | 内部ネットワーク(名前:net01) |
IPアドレス | 172.16.1.254/24 | |
デフォルトゲートウェイ | 設定無し | |
enp0s9 | アダプター3 | 内部ネットワーク(名前:net02) |
IPアドレス | 172.16.2.254/24 | |
デフォルトゲートウェイ | 設定無し |
debrt02
enp0s3 | アダプター1 | 内部ネットワーク(名前:net01) |
IPアドレス | 10.0.1.2/30 | |
デフォルトゲートウェイ | 設定無し | |
enp0s8 | アダプター2 | 内部ネットワーク(名前:lan01) |
IPアドレス | 172.16.1.0/24 | |
デフォルトゲートウェイ | 設定無し |
debrt03
enp0s3 | アダプター1 | 内部ネットワーク(名前:net02) |
IPアドレス | 10.0.2.2/30 | |
デフォルトゲートウェイ | 設定無し | |
enp0s8 | アダプター2 | 内部ネットワーク(名前:lan02) |
IPアドレス | 172.16.2.0/24 | |
デフォルトゲートウェイ | 設定無し |
サーバ(検証用)
「debsv01」、「debsv02」は検証用のサーバとして設定します。
debsv01
enp0s3 | アダプター1 | 内部ネットワーク(名前:lan01) |
IPアドレス | 172.16.1.1/24 | |
デフォルトゲートウェイ | 172.16.1.254 |
debsv02
enp0s3 | アダプター1 | 内部ネットワーク(名前:lan02) |
IPアドレス | 172.16.2.1/24 | |
デフォルトゲートウェイ | 172.16.2.254 |
設定
では、実際に各種設定を行っていきます。インターフェイスの設定については割愛させていただきます。前回の記事などをご参照ください。
各ルータの共通設定
「debrt01」、「debrt02」、「debrt03」で共通して行う設定です。
パケット転送の有効化
# vi /etc/sysctl.conf
# 28行目のコメントを解除
net.ipv4.ip_forward=1
# sysctl -p
net.ipv4.ip_forward = 1
Quaggaのインストール
インストールの際は、インターフェイスを追加してインターネット接続可能な状態にするか、インストールDVDを用いてインストールを行ってください。
# apt -y install quagga quagga-core
Quaggaの設定ファイルのコピー
今回は静的ルーティングのみを行うため、必要なファイルのみをコピーします。
# cp /usr/share/doc/quagga-core/examples/zebra.conf.sample /etc/quagga/zebra.conf
# cp /usr/share/doc/quagga-core/examples/vtysh.conf.sample /etc/qu
agga/vtysh.conf
zebraの起動
静的ルーティングの設定を行うために、zebra を起動します。
# systemctl start zebra.service
各種ルータ設定方法解説
実際の設定に入る前に、各種設定の解説を行います。
zebraへのログイン
telnetでログインします。パスワードを求められたら、 初期状態のログインパスワードは「zebra」となっていますので、 コチラを入力します。
$ telnet localhost 2601
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 1.2.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
Router>
特権EXECモードへの移行
Cisco IOSと同様に、ユーザEXECモード(プロンプト:>)と特権EXECモード(プロンプト:#)があります。UNIXの一般ユーザとrootユーザのようなイメージです。設定は特権EXECモードでしか行えないようになっているため、「enable」コマンドで移行します
※ 初期パスワードは「zebra」が設定されています。
Router> enable
Password:
Router#
プロンプトが「#」に変わりました。
グローバルコンフィギュレーションモードへの移行
各種設定は特権EXECモードに移行後、グローバルコンフィギュレーションモード(設定を行うためのモード)へ移行して行います。「configure terminal」コマンドを実行します。
Router# configure terminal
Router(config)#
特権EXECモードへ戻るためには、 「exit」コマンド、 または「Ctrl + Z」特権EXECモードへ移行します。
Router(config)# exit
Router#
ホスト名の設定
初期状態のホスト名は「Router」となっているため、他のルータと見分けがつく用にホスト名を設定します。「hostname」コマンドで設定します。
Router(config)# hostname debrt01
debrt01(config)#
プロンプトが「Router」から設定したホスト名に変わりました。
現在の設定情報の確認
静的ルーティング情報の設定前に、現在の設定情報を確認します。
まず、「show running-config」コマンドで、実行中のコンフィグを確認します。このコマンドは特権EXECモードで行います。
debrt01(config)# exit
debrt01# show running-config
Current configuration:
!
hostname debrt01
password zebra
enable password zebra
!
interface enp0s3
!
interface enp0s8
!
interface enp0s9
!
interface lo
!
ip forwarding
!
!
line vty
!
end
次に、ルーティングテーブルを確認します。「show ip route」コマンドを実行します。
debrt01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
> - selected route, * - FIB route
C>* 10.0.1.0/30 is directly connected, enp0s8
C>* 10.0.2.0/30 is directly connected, enp0s9
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, enp0s3
ルーティング設定を行っていないため、ルータのインターフェイスが所属しているサブネットの情報しかありません。
※ 先頭行アルファベット一文字のコード「C」は connected(インターフェイスが直接接続しているサブネット)を示しています。
静的ルーティング設定
静的ルーティングは「ip route」コマンドを使用します。書式としては、以下のようになっています。
debrt01(config)# ip route 宛先ネットワークアドレス サブネットマスク 転送先アドレス
また、デフォルトルートを設定する場合は以下のように行います。
debrt01(config)# ip route 0.0.0.0 0.0.0.0 転送先アドレス
設定の保存
設定ファイルには「running-config」と「startup-config」の2種類があります。 「running-config」 は現在実行中のコンフィグ(電源OFFや再起動で消えます)で 「startup-config」 はルータ起動時のコンフィグ(電源OFFや再起動しても保持されます)です。
上記で解説したコマンドを実行しただけでは「running-config」へ書き込まれるだけですので、「startup-config」へ書き込みを行う必要があります。
「write memory」コマンドを実行すると、「startup-config」へ書き込まれます。再度「running-config」を確認し、間違いが無ければ以下のように実行します。
debrt01# write memory
Configuration saved to /etc/quagga/zebra.conf
3台のルータへ設定
各ルータとホストの接続関係は以下のようになっています。
各ルータごとの必要な静的ルーティングを以下にまとめました。
対象ルータ | 追加する静的ルーティング |
debrt01 | デフォルトルート |
172.16.1.0/24 | |
172.16.2.0/24 | |
debrt02 | デフォルトルート |
debrt03 | デフォルトルート |
また、Quagga の設定とは別に2台のホストをインターネットへ接続出来るように iptables でNATの設定も行います。
(インターネットへ接続しているルータはインターネット宛と 192.168.0.0/24 宛以外のルーティング情報を持っていないため。)
debrt01
zebra に接続し、ホスト名と静的ルートの設定を行います。
user@debrt01:~$ telnet localhost 2601
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 1.2.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
Router> enable
Password:
Router# configure terminal
Router# hostname debrt01
debrt01(config)# ip route 0.0.0.0 0.0.0.0 192.168.0.254
debrt01(config)# ip route 172.16.1.0 255.255.255.0 10.0.1.2
debrt01(config)# ip route 172.16.2.0 255.255.255.0 10.0.2.2
debrt01# write memory
Configuration saved to /etc/quagga/zebra.conf
ルーティングテーブルを確認すると デフォルトルート、172.16.1.0/24・172.16.2.0/24 への静的ルートが追加されているのが分かります。
debrt01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
> - selected route, * - FIB route
S>* 0.0.0.0/0 [1/0] via 192.168.0.254, enp0s3
C>* 10.0.1.0/30 is directly connected, enp0s8
C>* 10.0.2.0/30 is directly connected, enp0s9
C>* 127.0.0.0/8 is directly connected, lo
S>* 172.16.1.0/24 [1/0] via 10.0.1.2, enp0s8
S>* 172.16.2.0/24 [1/0] via 10.0.2.2, enp0s9
C>* 192.168.0.0/24 is directly connected, enp0s3
※ 先頭行アルファベット一文字のコード「S」は static(静的ルーティング)を示しています。
また、iptables へ以下の設定を行い、NATの設定を行います。iptables のNATについてはコチラの記事をご参照ください。
# iptables -t nat -A PREROUTING -i enp0s3 -d 192.168.0.22 -j DNAT --to 172.16.1.1
# iptables -t nat -A POSTROUTING -o enp0s3 -s 172.16.1.1 -j SNAT --to 192.168.0.22
# iptables -t nat -A PREROUTING -i enp0s3 -d 192.168.0.23 -j DNAT
--to 172.16.2.1
# iptables -t nat -A POSTROUTING -o enp0s3 -s 172.16.2.1 -j SNAT -
-to 192.168.0.23
# iptables-save > /etc/iptables/rules.v4
debrt02
zebra に接続し、ホスト名と静的ルートの設定を行います。
user@debrt02:~$ telnet localhost 2601
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 1.2.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
Router> enable
Password:
Router# configure terminal
Router# hostname debrt02
debrt02(config)# ip route 0.0.0.0 0.0.0.0 10.0.1.1
debrt02# write memory
Configuration saved to /etc/quagga/zebra.conf
必要に応じてルーティングテーブルの確認を行ってください。
debrt03
zebra に接続し、ホスト名と静的ルートの設定を行います。
user@debrt03:~$ telnet localhost 2601
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 1.2.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
Router> enable
Password:
Router# configure terminal
Router# hostname debrt03
debrt03(config)# ip route 0.0.0.0 0.0.0.0 10.0.2.1
debrt03# write memory
Configuration saved to /etc/quagga/zebra.conf
必要に応じてルーティングテーブルの確認を行ってください。
検証
設定が完了すると、ホスト間の通信、インターネットへの接続が可能になります。今回は pingコマンド により確認を行います。
debsv01からdebsv02へPING
$ ping 172.16.2.1
PING 172.16.2.1 (172.16.2.1) 56(84) bytes of data.
64 bytes from 172.16.2.1: icmp_seq=1 ttl=61 time=0.825 ms
64 bytes from 172.16.2.1: icmp_seq=2 ttl=61 time=2.04 ms
64 bytes from 172.16.2.1: icmp_seq=3 ttl=61 time=2.01 ms
64 bytes from 172.16.2.1: icmp_seq=4 ttl=61 time=1.95 ms
^C
--- 172.16.2.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 8ms
rtt min/avg/max/mdev = 0.825/1.706/2.041/0.509 ms
debsv01からインターネットへPING
$ ping blog.flan999.com
PING blog.flan999.com (153.126.216.154) 56(84) bytes of data.
64 bytes from ik1-344-32150.vs.sakura.ne.jp (153.126.216.154): icmp_seq=1 ttl=51 time=36.1 ms
64 bytes from ik1-344-32150.vs.sakura.ne.jp (153.126.216.154): icmp_seq=2 ttl=51 time=33.8 ms
64 bytes from ik1-344-32150.vs.sakura.ne.jp (153.126.216.154): icmp_seq=3 ttl=51 time=33.9 ms
64 bytes from ik1-344-32150.vs.sakura.ne.jp (153.126.216.154): icmp_seq=4 ttl=51 time=33.9 ms
^C
--- blog.flan999.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 7ms
rtt min/avg/max/mdev = 33.824/34.428/36.063/0.971 ms
※ debsv02からも同様に通信が可能となっています。必要に応じて確認してください。
最後に
以上で今回の目標通りの静的ルーティング設定を行うことが出来ました。
次回からはいよいよ Quagga を用いて、動的ルーティングを行って見たいと思います。ルーティングを学習する上ではまず、静的ルーティングを1行ずつ記述することが必要だと思いあえてこの記事を書きました。
余談ではありますが、以下を確認すると zebra によってカーネルのルーティングテーブルが追加されていることが分かります。
# ip route show
default via 192.168.0.254 dev enp0s3 proto zebra metric 20
10.0.1.0/30 dev enp0s8 proto kernel scope link src 10.0.1.1
10.0.2.0/30 dev enp0s9 proto kernel scope link src 10.0.2.1
172.16.1.0/24 via 10.0.1.2 dev enp0s8 proto zebra metric 20
172.16.2.0/24 via 10.0.2.2 dev enp0s9 proto zebra metric 20
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.21
コメント