目次
FRRoutingとは
Free Range Routing(FRR)は、Quaggaから派生したUNIX/Linuxプラットフォーム用のフリーでオープンソースのルーティングプロトコルスイートです。BGP/OSPF/RIP/MPLSなどのさまざまなルーティングプロトコルを実装しています。Cisco独自のEIGRPもサポートしています。
リンク
FRRoutingオフィシャルサイト
GNS3サイトの以下の記事をベースにしています。 “Create a Router with Docker and Free Range Routing”
GNS3にFRRコンテナを追加して、ソフトウェアルータとして利用できます。このページでは、FRRコンテナの追加方法とCisco IOSルータとの相互接続例について解説します。
なお、以下の環境に基づいています。
ホストOS | Windows10 Pro |
GNS3バージョン | 2.2.17 |
GNS3 VMバージョン | 2.2.17 |
仮想化ハイパーバイザ | VMware Workstation 16.6.2 |
FRRコンテナの追加方法
GNS3でFRRコンテナを追加して、ソフトウェアルータとして利用するための手順は次のようになります。
- FRRコンテナテンプレートの作成
- プロジェクトにFRRコンテナを追加
- FRRコンテナの起動
FRRコンテナテンプレートの作成
GNS3でFRRコンテナを利用するためには、まず、テンプレートを作成します。[Edit]→[Preference]→[Docker Containers]から[New]をクリックします。
[Run this Docker container on the GNS3 VM]を選択して[Next]をクリックします。
[New Image]を選択して、[Image name]に「frrouting/frr:latest」と入力して[Next]をクリックします。「frrouting/frr」はDocker Hubに登録されているAlpine LinuxベースのFRRコンテナイメージです。
続いて、テンプレートの任意の表示名を入力して[Next]をクリックします。
そして、ネットワークインタフェース(Adapters)の数を決めて、[Next]をクリックします。ルータとして利用するので、2つ以上のネットワークインタフェースにします。
起動時に実行するコマンドを入力します。シェルを起動するように「sh」と入力します。
コンソールタイプを指定します。デフォルトの「telnet」のままで大丈夫です。
必要ならば環境変数を指定できます。[Finish]でテンプレートの作成終了です。
プロジェクトにFRRコンテナを追加
FRRのDockerコンテナテンプレートを作成すると、[End Device]のツールバーに表示されます。
FRRのテンプレートをワークスペースにドラッグ&ドロップします。GNS3 VM上でdocker pullのコマンドでが自動的に実行されて、指定したコンテナイメージがDocker HubからGNS3 VMにダウンロードされます。コンテナイメージのダウンロードは、初回のみです。docker pullコマンドを実行しているログがGNS3のコンソール上に表示されます。
あとは、ルータなどとFRRコンテナとのリンクを設定すればOKです。
FRRコンテナの起動
FRRコンテナをプロジェクトに配置したら起動します。そして、アイコンをダブルクリックするとコンソールに接続できます。そして、シェルから必要なルーティングデーモンを手動で起動します。FRRのライブラリは/usr/lib/frr内にあります。/usr/lib/frrに移動して、必要なルーティングデーモンを起動してください。以下のようなコマンドを入力します。
cd /usr/lib/frr ./watchfrr zebra ospfd &
上記のコマンド例は、3つのデーモンを起動しています。“watchfrr”はFRRの他のデーモンを監視します。”zebra”は基本的なIPルーティングを行います。”ospfd”は、OSPFv2のルーティングを行います。その他、必要なルーティングデーモンがあれば合わせて起動します。”&”でデーモンをバックグラウンドで動作させます。デーモンを起動したら、Enterでシェルに戻ります。
FRR-1 console is now available... Press RETURN to get started. / # cd /usr/lib/frr /usr/lib/frr # ./watchfrr zebra ospfd & /usr/lib/frr # 2022/01/26 02:00:24 WATCHFRR: [ZG9QC-QRCJZ] failed to mkdir "/var/tmp/frr/watchfrr.46": File exists 2022/01/26 02:00:24 WATCHFRR: [M1DC0-ZDNYJ] crashlog and per-thread log buffering unavailable! 2022/01/26 02:00:24 WATCHFRR: [T83RR-8SM5G] watchfrr 8.1_git starting: vty@0 2022/01/26 02:00:24 WATCHFRR: [ZCJ3S-SPH5S] zebra state -> down : initial connection attempt failed 2022/01/26 02:00:24 WATCHFRR: [ZCJ3S-SPH5S] ospfd state -> down : initial connection attempt failed 2022/01/26 02:00:24 WATCHFRR: [YFT0P-5Q5YX] Forked background command [pid 47]: /usr/lib/frr/watchfrr.sh restart all Cannot stop staticd: pid 65 not running Cannot stop zebra: pid 60 not running 2022/01/26 02:00:24 ZEBRA: [ZG9QC-QRCJZ] failed to mkdir "/var/tmp/frr/zebra.59": File exists 2022/01/26 02:00:24 ZEBRA: [M1DC0-ZDNYJ] crashlog and per-thread log buffering unavailable! 2022/01/26 02:00:24 ZEBRA: [NNACN-54BDA][EC 4043309110] Disabling MPLS support (no kernel support) 2022/01/26 02:00:24 STATIC: [ZG9QC-QRCJZ] failed to mkdir "/var/tmp/frr/staticd.64": File exists 2022/01/26 02:00:24 STATIC: [M1DC0-ZDNYJ] crashlog and per-thread log buffering unavailable! 2022/01/26 02:00:24 WATCHFRR: [QDG3Y-BY5TN] zebra state -> up : connect succeeded 2022/01/26 02:00:29 WATCHFRR: [YFT0P-5Q5YX] Forked background command [pid 67]: /usr/lib/frr/watchfrr.sh restart ospfd Cannot stop ospfd: pid 88 not running 2022/01/26 02:00:29 WATCHFRR: [QDG3Y-BY5TN] ospfd state -> up : connect succeeded 2022/01/26 02:00:29 WATCHFRR: [KWE5Q-QNGFC] all daemons up, doing startup-complete notify /usr/lib/frr #
そして、vtyshコマンドでCisco IOSライクなインタラクティブシェルを起動できます。
vtysh
vtyshコマンドを入力した際のログは次のようになります。
/usr/lib/frr # vtysh % Can't open configuration file /etc/frr/vtysh.conf due to 'No such file or directory'. Hello, this is FRRouting (version 8.1_git). Copyright 1996-2005 Kunihiro Ishiguro, et al. FRR-1#
あとは、Cisco IOSと同じようなコマンドでルータの設定が可能です。
リンク
FRRoutingの詳しい設定方法や各デーモンのコマンドは、オフィシャルサイトをご覧ください。
FRRとCisco IOSの相互接続
次のシンプルなネットワーク構成で、FRRとCisco IOSの相互接続を行います。ルーティングプロトコルとしてOSPFv2を利用します。
FRR-1の設定
interface eth0 ip address 192.168.0.1/24 exit ! interface eth1 ip address 192.168.1.254/24 exit ! router ospf network 192.168.0.0/24 area 0 network 192.168.1.0/24 area 0 exit
IOS-1の設定
interface FastEthernet0/0 ip address 192.168.0.2 255.255.255.0 no shutdown ! interface FastEthernet0/1 ip address 192.168.2.254 255.255.255.0 no shutdown ! router ospf 1 log-adjacency-changes network 192.168.0.0 0.0.255.255 area 0
ルーティングテーブルと通信の確認
FRR-1のルーティングテーブルは次のようになります。
FRR-1# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure O 192.168.0.0/24 [110/10000] is directly connected, eth0, weight 1, 00:01:05 C>* 192.168.0.0/24 is directly connected, eth0, 00:01:53 O 192.168.1.0/24 [110/10000] is directly connected, eth1, weight 1, 00:01:48 C>* 192.168.1.0/24 is directly connected, eth1, 00:01:53 O>* 192.168.2.0/24 [110/10010] via 192.168.0.2, eth0, weight 1, 00:01:00
IOS-1のルーティングテーブルは次のようになります。
IOS-1#show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set C 192.168.0.0/24 is directly connected, FastEthernet0/0 O 192.168.1.0/24 [110/10010] via 192.168.0.1, 00:01:44, FastEthernet0/0 C 192.168.2.0/24 is directly connected, FastEthernet0/1
FRR-1とIOS-1のルーティングテーブルに必要なOSPFルートが登録されているので、PC1-PC2間の通信ができます。PC1からPC2へPingを実行すると、応答が返ってきます。
PC1> ping 192.168.2.100 84 bytes from 192.168.2.100 icmp_seq=1 ttl=62 time=31.817 ms 84 bytes from 192.168.2.100 icmp_seq=2 ttl=62 time=32.801 ms 84 bytes from 192.168.2.100 icmp_seq=3 ttl=62 time=31.506 ms 84 bytes from 192.168.2.100 icmp_seq=4 ttl=62 time=31.073 ms 84 bytes from 192.168.2.100 icmp_seq=5 ttl=62 time=30.563 ms
GNS3の使い方
- [GNS3の使い方] GNS3のインストール(Windows10)
- [GNS3の使い方] GNS3バージョンのアップグレード方法
- [GNS3の使い方] 実機ルータのIOSをPCにダウンロードする方法
- [GNS3の使い方] IOSルータテンプレートの作成(ローカルサーバ)
- [GNS3の使い方] GNS3 VMサーバのセットアップ
- [GNS3の使い方] Servers SummaryでGNS3 VMがグリーンにならないときの対処方法
- [GNS3の使い方] IOSルータテンプレートの作成(VMサーバ)
- [GNS3の使い方] IOU(IOS on Unix)の利用方法
- [GNS3の使い方] CSR1000vの利用方法
- [GNS3の使い方] GNS3プロジェクト(検証環境)の作成
- [GNS3の使い方] ホストOSとの接続
- [GNS3の使い方] ホストOSとの接続の例
- [GNS3の使い方] VMwareの仮想マシンをGNS3トポロジに追加する方法
- [GNS3の使い方] VPCSの設定と操作
- [GNS3の使い方] DockerコンテナのLinux(Alpine Linux)ホストの追加方法
- [GNS3の使い方] GNS3でFRR(Free Range Routing)コンテナの利用方法
- [GNS3の使い方] GNS3アプライアンスの利用
- [GNS3の使い方] スナップショットの管理
- [GNS3の使い方] コンフィグのエクスポート/インポート
- [GNS3の使い方] パケットキャプチャ
- [GNS3の使い方] startup-configを直接編集する
- [GNS3の使い方] Solar-PuTTYのフォント、背景色の変更方法
- [GNS3の使い方] GNSプロジェクトが読み込めない! GeForce Experienceとのコンフリクトの対処方法