2022-12-28に投稿

GNS3 に VyOS 仮想ルーターを追加する長い道のり④ 応用編

本記事は 【アットホームな現場です】🎄★☆ネットワーク系エンジニア★☆アレコレアウトプット★☆🎄 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) で通信ができるように構成していく。

相互通信するコンテナの準備

ルーターを跨いだ通信を実際に行うことになるコンテナを準備する。

通信の確認を行う最低限のモジュール(パッケージ)をインストールしたイメージを用意する。

(リスクを自分で評価しつつ)第三者が用意したイメージを使っても良いのだが、今回は自分でビルドしてみよう。

  1. まず、 VM管理ツールや ssh で GNS3 VM の管理画面に入る
  2. メニューから Shell を選択する
  3. 以下のコマンドで、 tmp-net-tools という名前をつけた Docker イメージをビルドする

    •  
      shell gns3@gns3vm:~$ docker build -t tmp-net-tools - FROM alpine:latest RUN apk add --no-cache curl iperf3 net-tools EOF
  4. GNS3 (GUI) の Preferences を開き、 Docker コンテナテンプレートで上記のビルド済み tmp-net-tools でテンプレートを作成する。

    • Console type は telnet で OK.

ここでポイントとなるのは、 GNS3 で動かすコンテナは基本的に(明示的に接続市内限り)外部ネットワークに繋がっていないが、 GNS3 VM で Docker をビルドする際は、外部ネットワークに繋がると言う点だ。
このため、コンテナ内にて追加で必要なパッケージがある場合、このように予めコンテナの 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 コマンドで設定を定義してやると良いかもしれない。

長々となる解説となったが、誰かの役に立てば幸いだ。

Originally published at aquasoftware.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

advanceboy

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント