VirtualBoxを用いた仮想ネットワークの構築! ~ 「Quagga」を使用した静的ルーティング ~

Debian

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 と使用したいルーティングプロトコル用のクライアントデーモンを起動させることで動作させます。

IPv4IPv6説明
zebrazebra静的ルーティング
ripdripngdripd : RIPv1/RIPv2(IPv4)
rpngd : RIPng(IPv6)
ospfdospf6dospfd : OSPFv2(IPv4)
odpf6d : OSPFv3(IPv6)
bgpdbgpdBGPv4 +(IPv4,IPv6)
isisdisisdIS-IS(IPv4,IPv6)

デーモン起動時に /etc/quagga に設定ファイルを配置します。サンプルの設定ファイルが /usr/share/doc/quagga-core/examples/ にあるのでコチラからコピーして適宜内容を編集して配置します。

各種プロセスへのログイン

実際に各ルーティングプロトコルの設定をするためには、VTYアクセスによって行います。ログインパスワードなどの設定は /etc/quagga/vtysh.conf によって行います。

各種プロセスへは以下のように接続を行います。

$ telnet localhost ポート番号

各種プロセスでVTYアクセスに使用するポートは以下のようになっています。

デーモンポート番号
zebra2601
ripd2602
ripngd2603
ospfd2604
bgpd2605
ospf6d2606
isisd2608

動作環境

VirtualBoxを使用して、以下のように「debrt01」、「debrt02」、「debrt03」、「debsv01」、「debsv02」の5台のゲストOSを使用します。使用するネットワークアダプターは「ブリッジアダプター」と「内部ネットワーク」となっています。

前回までのネットワークトポロジであれば、「debrt01」が所属しているネットワークへサーバが接続されていたので、ルーティング情報が自動で学習されて通信が可能でした。しかし今回は、サーバとの間に「debrt02」、「debrt03」が接続されているため、ルーティング情報をルーティングテーブルへ登録する必要があります。

この記事では目標として、サーバ間の通信、外部ネットワークとの通信(NAT)を静的ルーティングによって行うこと出来るようにします。

参考までに5台とも以下のような構成となっています。

OSDebian 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

コメント

タイトルとURLをコピーしました