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