前回、GNS3環境が作成できたので、OpenWRT使ったネットワークシミュレータ活用編です。
OpenWRT編
OpenWRTはWiFi アクセスポイント用に作成されたLinuxベースのルータソフトです。 他のソフトと比べるととても小さいですが、Linuxらしくパッケージを追加して機能を拡張できます。 ①で使用したOpenWRTはOSPF使用するためにFRRoutingを追加していますが、ディスク容量は20Mバイト弱です。 Linuxベースルータで有名なVyOS は全部入りの構成とは言え、427MB あります。 起動直後のメモリー使用量もVyOS の250MBに対して、OpenWRT は50MB ととても少ないです。
OpenWRTは実際の機器を使用する場合にとても安上がりになります。 エレコム WRC-1167GST2 はファームウェアの入替が必要ですが、メルカリなどで中古機器を1500円で入手可能です。 USBが無いのが欠点ですが、1Gポートが5つありメモリ256MB、フラッシュディスク32MB です。
私がアマゾンで新品を購入したのは、GL.iNet MT2500 です。 WiFiが無く1Gポートも2個ですが、メモリ1GB、フラッシュディスク8GB でUSB3.0 が使えます。 USB3.0にSSDタイプのUSBメモリを接続してLinuxサーバとして使うのに遜色ない性能でした。 GL.iNet社の各製品はOpenWRTベースで簡易なWeb-UIも付いていますが、OpenWRTが全て入っていてファームウェアの入替無しでOpenWRTを使う事ができるので、技適の懸念なくWiFi利用もできそうです。
openwrt-23-05-2-frr.qcow2
OVAに含まれるopenwrt-23-05-2-frr.qcow2 は公式で配布されているイメージファイルをQCOW2フォーマットに変更して以下のパッケージ追加と設定変更をしています。
opkg update
opkg install wget-ssl
opkg install frr-zebra frr-watchfrr frr-staticd frr-vtysh frr-ospfd frr-ripd
opkg install luci-app-keepalived luci-app-tinyproxy
uci set network.lan.ipaddr='192.168.56.88'
uci commit
reboot
作成するネットワークの要件
拠点A B と本店C の3拠点のネットワークで、A B C はWAN側は同一セグメントですが、A-C 間とB-C 間のルーティングのみ配布して、A-B 間の通信は禁止する事にします。
回線部分は一本ですが、C拠点はルータ2台でLAN側VRRP(KeepAlived) とWAN側RIPv2 で冗長構成とします。
IPアドレス
LAN(Ethernet0) | WAN(Ethernet1) | |
---|---|---|
A (WR1) | 192.168.1.2 | 192.168.10.1 |
B (WR2) | 192.168.2.2 | 192.168.10.2 |
C1(WR3) | 192.168.56.11 | 192.168.10.11 |
C2(WR4) | 192.168.56.12 | 192.168.10.12 |
C-VIP | 192.168.56.10 | |
Linux1 | 192.168.1.1 | |
Linux2 | 192.168.2.1 | |
Linux3 | 192.168.56.20 |
GNS3でネットワーク作成
新規プロジェクトでネットワークを作成します。 File - Open project でNew project タブでName: に 「OpenWRT-RIP2」と付けました。
空白のプロジェクトが表示されるので、左のBrowse all devices」アイコンでデバイスを開いて、OpenWRT を右にドラッグすると各デバイスを配置できます。
今回使う、OpenWRTを4つ、検証用のLinuxを3つと「Ethernet switch」を2つと 192_168_56 のデバイスを配置してしまいます。
デバイス名は、配置した順に1..2 と振られます。 左側 WR3 WR4 Switch2 Linux3 が本店C で、右上が拠点A、右下が拠点B になります。
左上のネットワークアイコン「1」はホストのWindowsも接続しているネットワークです。 右クリックして「Configure」メニューのMiscタブでName: 192.168.56 に変更しておきます。
左下の「Add a link」アイコンをクリックすると×マークが出て、結線モードになります。 192.168.56をクリックすると「br0」が表示されるのでクリック、Switch2も同様にEthernet0~8が表示されるので、Ethernet0をクリックして結線します。 同様にWR3 のEthernet0 とSwtich2のEthernet1 を結線します。
OpenWRT Start
左下の「Add a link」アイコンをクリックして結線モードを解除して、WR3 を右クリックして「Start」します。 ここでConsoleは使いませんが、起動状況を確認するために、「Console」を選択して表示してください。
10秒ほどで起動します。 Consoleで「Enter」キー押下でrootでログイン状態になると思います。 初期IPがLAN側 192.168.56.88 になっているので、Windowsからブラウザで http://192.168.56.88 にアクセスするとOpenWRT のWeb-UI がアクセスできます。 Web-UIからIPアドレスとFirewallの設定を変更します。
IPアドレスはそれぞれ先ほど決めたアドレスに変更します。 br-lan(Ethernet0)の「DHCP Server」タブで、「Ignore interface」をチェックしてDHCPをオフにする事を忘れないようにしてください。
OpenWRTの初期設定で WAN側でNATするFirewall設定が入っているので、これを削除します。NetworkメニューのFirewall画面 General Settingsで、InputとForwardをacceptに変更します。 また、Zones設定を右側の「Delete」で削除します。 「Save & Apply」でOKです。
WR3 も同様に設定します。 WR1 WR2 はIPアドレスが192.168.56.xx でないので同様に設定できませんが、一旦Switch2にEthernet0を接続して設定変更後に配線を変更するのが簡単と思います。 LANのIPアドレス変更を最後に行うようにご注意ください。
LANのIPアドレス変更がWeb-UIからは出来ないようです。 その場合は、Consoleのコマンドで変更してください。
root@OpenWrt:/# uci set network.lan.ipaddr='192.168.1.2'
root@OpenWrt:/# uci commit
root@OpenWrt:/# reboot
Linux
テスト用のLinux端末で、Alpine Linux のDockerをベースに各種ツールが入っています。 /home/gns3/alpine-term にDockerfileがあります。 IPアドレスの設定を右クリック「Configure」メニューでNetwork configuration の「Edit」をクリックしてテキストファイルを編集してください。 例が有るのでauto eth0 からgateway まで5行のコメントを外して、address 192.168.56.20 gateway 192.168.56.10 として、「Save」してください。
それぞれIPアドレスを入力して、結線をすると隣接ノード間でPingが通るようになる事を確認できると思います。
VRRP
本店Cのルータ冗長構成のためにKeepalivedを使って仮想IP 192.168.56.10 をVRRP 設定します。 OpenWRTでWeb-UIで設定できます。 ServiceメニューのKeepalived 「IP Address」タブでVIP 192.168.56.10 と「Interfaces]タブでeth1 を設定します。
「Instance」タブで必須のVirtual Router IDやPriority など設定、「Tarcking」タブで「Interfaces]で設定したWANを指定
WR4側も同様の設定ですが、StateをBackup でPriority 100 にする事でBackup状態にします。 Virtual Router IDは VIPのIDなので、WR3 WR4 とも10 です。
Overviewタブで、それぞれ現在の状態が確認できます。 Ethernet1をSuspendにするなどしてダウン状態にすると、172.16.56.10のMACアドレスがWR3とWR4の間で変更されるので確認できると思います。
RIPv2
FRRouting を起動時に有効にするために以下のコマンドを入力。また、vtyshでFRRoutingに入り、RIP設定を入力します。 ここではCisco風のコマンドになります。
# service frr enable
# service fee start
# vtysh
OpenWrt# config terminal
OpenWrt(config)# router rip
OpenWrt(config-router)# network eth1
OpenWrt(config-router)# redistribute connected
OpenWrt(config-router)# exit
OpenWrt(config)# exit
OpenWrt# write
通常のルート交換はOK
WR1 とWR2 でルート交換しないように、Neighborを設定する
WR1 WR2
router rip
version 2
neighbor 192.168.10.11
neighbor 192.168.10.12
redistribute connected
exit
WR3 WR4
router rip
version 2
neighbor 192.168.10.1
neighbor 192.168.10.2
redistribute connected
exit
RIPの場合は学習したルートを勝手に再配布しないようで、無事にWR1からB拠点へのルートが消えました。
OpenWrt1# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
C>* 192.168.1.0/24 is directly connected, br-lan, 00:24:51
C>* 192.168.10.0/24 is directly connected, eth1, 00:24:51
R>* 192.168.56.0/24 [120/2] via 192.168.10.11, eth1, weight 1, 00:08:07
R>* 192.168.56.10/32 [120/2] via 192.168.10.11, eth1, weight 1, 00:08:07
WR3 WR4 はA B 両方へのルートを持っています。
OpenWrt3# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
R>* 192.168.1.0/24 [120/2] via 192.168.10.1, eth1, weight 1, 00:07:51
R>* 192.168.2.0/24 [120/2] via 192.168.10.2, eth1, weight 1, 00:06:25
C>* 192.168.10.0/24 is directly connected, eth1, 00:49:23
C>* 192.168.56.0/24 is directly connected, br-lan, 00:49:23
C>* 192.168.56.10/32 is directly connected, br-lan, 00:49:23
RIP のルートについて再配布を制限するようにdistribute-listを設定する必要が有ると踏んでいたのですが、このケースでは再配布されないようです。