本記事は 【アットホームな現場です】🎄★☆ネットワーク系エンジニア★☆アレコレアウトプット★☆🎄 Advent Calendar 2022 25日目の記事だ。
ごめんなさい、色々書いてたら結局分量が多くなって期限内に書き切れなかった。
GNS3 という OSS のネットワークエミュレータを、 Cisco の IOS などの取得なしに、無料のライセンス内で利用できるようにしようという話。
今回は最終回の応用編。
以前の投稿はこちら。
https://crieit.net/posts/GNS3-VyOS (① 環境導入編)
https://crieit.net/posts/GNS3-VyOS-63ac561ed5a75 (② イメージ準備編)
https://crieit.net/posts/GNS3-VyOS-63ac5693838af (③ 実践編)
今回は、上記の図のように、 ルーターを 2台 置いて、 ルーターを跨いだ端末間 (tmp-net-tools-1
, -2
) で通信ができるように構成していく。
ルーターを跨いだ通信を実際に行うことになるコンテナを準備する。
通信の確認を行う最低限のモジュール(パッケージ)をインストールしたイメージを用意する。
(リスクを自分で評価しつつ)第三者が用意したイメージを使っても良いのだが、今回は自分でビルドしてみよう。
以下のコマンドで、 tmp-net-tools
という名前をつけた Docker イメージをビルドする
shell
[email protected]:~$ docker build -t tmp-net-tools -
FROM alpine:latest
RUN apk add --no-cache curl iperf3 net-tools
EOF
GNS3 (GUI) の Preferences を開き、 Docker コンテナテンプレートで上記のビルド済み tmp-net-tools
でテンプレートを作成する。
ここでポイントとなるのは、 GNS3 で動かすコンテナは基本的に(明示的に接続市内限り)外部ネットワークに繋がっていないが、 GNS3 VM で Docker をビルドする際は、外部ネットワークに繋がると言う点だ。
このため、コンテナ内にて追加で必要なパッケージがある場合、このように予めコンテナの build 段階でインストールしておく必要がある。
コンテナテンプレートの準備ができたら、ペタペタとデバイスを貼って結線していく。
2つの VyOS とも、 eth0 を端末のコンテナ側に、 eth1 をルーター同士を繋ぐ Switch に繋いでいこう。
本来 VyControl は、 1サービスで複数の VyOS を管理できるはずなのだが、 試した感じどうも管理対象の切り替えでエラーになってしまうので、 素直に VyOS と VyControl を 1対1 で作成している。
ただ、そうするとホストPCからそれぞれの VyControl にアクセスする際に同じ IP アドレスとなって Cookie が衝突するため、片方にログインするともう一方からログアウトされてしまう問題があるので注意。
また、 vycontrol-host や tmp-net-tools の各コンテナにて、 Edit config からの /etc/network/interfaces
の編集で、 eth0 を DHCP から IP アドレスを取得するよう設定することを忘れずに。
VyOS は前回の設定に加えて eth1 の IP アドレスを静的に決めるため、それぞれ以下のように設定する。
VyOS1.3.2-1
:
[email protected]:~$ configure
[email protected]# set interfaces ethernet eth0 address '192.168.11.254/24'
[email protected]# set interfaces ethernet eth1 address '192.168.1.1/24'
[email protected]# set service dhcp-server shared-network-name 'subnet01'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' default-router '192.168.11.254'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' name-server '192.168.11.254'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' range 0 start '192.168.11.17'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' range 0 stop '192.168.11.126'
[email protected]# set service https api keys id my_id key 'my_secret_key'
[email protected]# set service https certificates system-generated-certificate lifetime '65535'
[email protected]# set service https virtual-host vyos1 listen-address '192.168.11.254'
[email protected]# set service https virtual-host vyos1 listen-port '6443'
[email protected]# set service https virtual-host vyos1 server-name 'vyos1.example.com'
[email protected]# commit
[email protected]# save
[email protected]# exit
VyOS1.3.2-2
:
[email protected]:~$ configure
[email protected]# set interfaces ethernet eth0 address '192.168.21.254/24'
[email protected]# set interfaces ethernet eth1 address '192.168.1.2/24'
[email protected]# set service dhcp-server shared-network-name 'subnet01'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.21.0/24' default-router '192.168.21.254'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.21.0/24' name-server '192.168.21.254'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.21.0/24' range 0 start '192.168.21.17'
[email protected]# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.21.0/24' range 0 stop '192.168.21.126'
[email protected]# set service https api keys id my_id key 'my_secret_key'
[email protected]# set service https certificates system-generated-certificate lifetime '65535'
[email protected]# set service https virtual-host vyos1 listen-address '192.168.21.254'
[email protected]# set service https virtual-host vyos1 listen-port '6443'
[email protected]# set service https virtual-host vyos1 server-name 'vyos1.example.com'
[email protected]# commit
[email protected]# save
[email protected]# exit
ちなみに、 VyOS の仮想デバイスは、 一通り設定を完了させてから、仮想デバイスを複製できる。
VyOS のインストールなどの作業が 1回 で済む点は便利なのだが、 コピー後 MAC アドレスが変更になるため、仮想デバイス内のインターフェース名が、 eth0, eth1, eth2 から eth3, eth4, eth4 へと名前を変えてしまうことが多く、 GNS3 UI 上の NIC のインターフェース名と、 仮想デバイス内の名前が一致しなくなってややこしい事になるので、ご注意を。
さて、ここで各端末 (tmp-net-tools-1
, -2
) が DHCP サーバーに割り当てられた IP アドレスを使って、お互いに ping を打っても、当然届かず失敗する。
ここで VyControl を使って、 それぞれの VyOS に静的ルーティングを定義する。
その後改めてお互いに ping を打つと、無事疎通ができるようになった。
さらなる応用として、 "Cloud" デバイスを使って外部機器との接続もできる。
まず、適当な物理NIC (USB LAN アダプタ) を、仮想マシン管理ツール側で GNS3 VM のネットワークアダプタに割り当てる。
その後、 GNS3 内で "Cloud" デバイスをその物理NIC に割り当ててやれば、物理ルーターと仮想ルーターとの間で、論理的なネットワークの接続を構成できる。
…とまあ、こんなところが GNS3 の基本的な使い方となる。
慣れてきたら、不完全な VyControl なんか使わず、 直接 VyOS に CUI コマンドで設定を定義してやると良いかもしれない。
長々となる解説となったが、誰かの役に立てば幸いだ。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント