Edited at

GNS3 でバックエンド開発を便利に(後編)

前編はこちら

CentOS8 へのGNS3 インストール手順(2019/10/03 投稿)


はじめに

後編では自分で作成した仮想マシーンをGNS3 に取り込んでいきます。


  • Linux 仮想マシーン

  • cisco CSR1000v

  • Docker コンテナ

の3つを取り込む例を書きます。


8. Linux 仮想マシーンの作成と取り込み

物理マシーンのKVM でディスクイメージファイルを作成して、それをGNS3 マシーンに送って取り込む。

下記は最小構成のCentOS7 の仮想マシーンを作成する例。目的に合わせてks ファイルを編集して構成を変える。Ubuntu などの他のディストリビューションでも良い。


8-1. 作成

[物理マシーン]

ks ファイルの作成。


CentOS7.ks

cmdline

install
lang ja_JP.UTF-8
keyboard jp106

network --device eth0 --onboot yes --bootproto=static --ip=192.168.205.231 --netmask=255.255.255.0 --gateway=192.168.205.254 --nameserver=8.8.8.8 --noipv6
network --hostname=CentOS7

zerombr
bootloader --location=mbr --append="crashkernel=auto biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8"

clearpart --linux --drives=vda
part /boot --fstype xfs --size=1024 --ondisk=vda
part pv.1 --size=1024 --grow --ondisk=vda
volgroup centos pv.1
logvol / --fstype xfs --name=root --vgname=centos --size=1024 --grow

rootpw --plaintext rootpassword
user --groups=wheel --name=user-01 --password=user-01password --plaintext
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
firstboot --disabled
timezone --utc Asia/Tokyo
reboot

%packages --nobase
%end


ディスクイメージファイルの作成。

sudo qemu-img create -f qcow2 /var/lib/libvirt/images/CentOS7.qcow2 8G

仮想マシーンの作成。

sudo virt-install --connect=qemu:///system \

--name=CentOS7 \
--vcpus=1 \
--ram=1024 \
--accelerate \
--hvm \
--disk /var/lib/libvirt/images/CentOS7.qcow2,size=8,format=qcow2,bus=virtio \
--location='/opt/Linux/CentOS-7-x86_64-DVD-1804.iso' \
--network bridge=br205,model=virtio \
--nographics \
--initrd-inject=./CentOS7.ks \
--extra-args='ks=file:/CentOS7.ks biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8' \
--os-type=linux \
--os-variant=centos7.0 \
--arch=x86_64

[Linux 仮想マシーン]

作りたい仮想マシーンに沿って共通設定をセットアップする。

ifcfg-ethX のHWADDR, UUID の行は必ず削除またはコメントアウトしておく。

ディスクイメージファイルの容量が小さい方がGNS3 の動作が軽くなるので、余分なファイルは削除しておくと良い。

sudo sed -i -e "/HWADDR/s/^/#/" /etc/sysconfig/network-scripts/ifcfg-eth0

sudo sed -i -e "/UUID/s/^/#/" /etc/sysconfig/network-scripts/ifcfg-eth0
sudo yum -y update
sudo yum -y install telnet traceroute tcpdump wget zip unzip mlocate git
---snip---
共通のセットアップ
---snip---
sudo yum clean all
sudo shutdown -h now

[物理マシーン]

ディスクイメージファイルを圧縮する。

先に述べたように、ディスクイメージファイルの容量が小さい方がGNS3 の動作が軽くなる。

sudo qemu-img convert -c -f qcow2 -O qcow2 /var/lib/libvirt/images/CentOS7.qcow2 ~/CentOS7.qcow2

ディスクイメージファイルをGNS3 マシーンにscp.

scp ~/CentOS7.qcow2 192.168.205.230:./

sudo rm ~/CentOS7.qcow2

[CentOS7-GNS3-01]

ディスクイメージファイル保存場所を適当に作成してそこに保存する。

以下は/opt/Linux に保存する場合。

sudo mkdir /opt/Linux

sudo mv ~/CentOS7.qcow2 /opt/Linux
sudo chown -R root:root /opt/Linux


8-2. GNS3 への取り込み

[CentOS7-GNS3-01]

Edit → Preferences



Qemu → Qemu VMs → New

qemu-new.png

適当に名前を付ける。

qemu-name.png

割り当てメモリーサイズ。後からでも変更できる。

qemu-memory.png

Console type はデフォルトのtelnet のまま。

qemu-console.png

/opt/Linux に保存したディスクイメージファイルを指定。

このとき、自分のホームディレクトリにコピーするかどうか聞かれるが、コピーする必要は全く無くディスク容量を無駄に消費するだけなので必ずNo を選ぶ。

マップ上に何台配置してもこの大元のディスクイメージファイルに変更はかからないのでご安心を。

qemu-image.png

qemu-copy-no.png

続いて、

Qemu → Qemu VMs → Edit

で細かい設定をする。

qemu-edit.png

Symbol で好みのアイコンを選ぶ。

ここで割り当てメモリー容量やCPU 数も変更できる。

linux-edit-general-settings.png

マップ上のEthernet アダプター表示名のフォーマットをeth{0} にする。

デフォルトのアダプター数も変更できる。(画像では1 のまま)

linux-wdit-network.png

ここまでできたら

File → New blank project

でプロジェクトを新規作成してマップに配置していく。

gns3-new-project.png

取り込んだLinux 仮想マシーンとCloud を配置する。

gns3-linux-cloud.png

デフォルトで備わっているEthernet Switch を挟んでLinux 仮想マシーンとCloud を結線する。

gns3-connection.png

開始ボタンを押して仮想マシーンを起動し、アイコンをダブルクリックか右クリックからのConsole でコンソール画面を出す。

尚、停止状態なら右クリックのConfigure で個別にスペックを変更できる。

gns3-start.png

ログインできるようになったら外部と通信できるか確認してみる。

linux-console.png

[GNS3 上Linux 仮想マシーン]

ホスト名もIP Address も最初に作成したときのままなので個別に変更する。

ホスト名の変更。

sudo hostnamectl set-hostname <hostname>

IP Address の変更。

コマンドだけで変更できる人はそうする。

コマンドに不慣れな人は以下のようにnmtui で変更した方がわかりやすいと思われる。

sudo nmtui

15.png

設定できたら再起動。

起動してきたら外部からssh できるか確認する。


9. cisco CSR1000v の作成と取り込み


9-1. インストールメディアイメージファイルの入手

CSR1000v のインストールメディアイメージファイルをcisco のサイトからダウンロードするわけだが、古いバージョンのものなら無料アカウントで誰でもダウンロードできる。

例えば、Cloud Services Router 1000V からバージョン3.15.0S のiso ファイルをダウンロードする。

CSR1000v_Download.png

ログインを求められるのでアカウントを作成してダウンロードする。

途中、利用規約への同意を求められたりするが臆すること無く同意して進める。

csr1000v-universalk9.03.15.00.S.155-2.S-std.iso というファイルがダウンロードされるはずである。

CSR1000v のディスクイメージ作成にはGUI が必要になるので、今回は物理マシーンではなくGNS3 マシーンにダウンロードしたファイルをscp する。


9-2. 作成

[CentOS7-GNS3-01]

ディスクイメージファイルを作成。

qemu-img create -f qcow2 ~/CSR1000v.qcow2 8G

CSR1000v インストールメディアを読み込んで起動。

この時にGUI が必要になるので、このコマンドは必ずリモートデスクトップしてGUI 上で実行する。

qemu-system-x86_64 -boot d ~/CSR1000v.qcow2 -enable-kvm -cpu host -m 2560M -cdrom ~/csr1000v-universalk9.03.15.00.S.155-2.S-std.iso

cisco-install.png

QEMU という新しい窓が起動する。

色々表示されるが一切キー入力する必要は無く放置する。

操作可能になるまでだいたい20分くらいかかる。

cisco-installing.png

最後にyes / no を聞かれるのでno と入力。

cisco-dialog-no.png

ログが流れ始める。

止まったあたりでEnter を数回入力するとプロンプトが返ってくる。

cisco-start.png

ここで共通の設定をするわけだが、platform console serial の設定だけは必ず入れる。この設定を入れないとテキストコンソールできない。

以下は、platform console serial の設定とホスト名とユーザーID, password, enable password を全てcisco で設定する例。

最後は必ずcopy コマンドで設定を保存する。

終ったらX 切り。

enable

configure terminal
platform console serial
hostname CSR1000v-XX
username cisco password 0 cisco
enable secret cisco
line vty 0 4
password cisco
login local
---snip---
共通設定
---snip---
end
copy system:running-config nvram:startup-config

cisco-cofiguration.png

作成したディスクイメージファイルを適当な保存ディレクトリを作成して保存する。

以下は圧縮して/opt/cisco に保存する例。

sudo mkdir /opt/cisco

sudo qemu-img convert -c -f qcow2 -O qcow2 ~/CSR1000v.qcow2 /opt/cisco/CSR1000v.qcow2
rm ~/CSR1000v.qcow2

Linux 仮想マシーンの時と同様の手順でGNS3 に取り込む。異なる所や注意する所のみ書いていく。

割り当てメモリーは2560MB (2.5 GB)

cisco-memory.png

繰り返しになるが、ディスクイメージファイルのコピーは必要無いので必ずNo.

cisco-image-copy-no.png

シンボルを好みのものに変更してCategory をRouters にする。

cisco-edit-general-settings.png

Ethernet アダプターのマップ上の表示フォーマットをGigabitEthernet{port1} に変更。

アダプター数も好きなように変更する。

cisco-edit-network.png

追加オプションに-cpu host を追記する。

cisco-edit-advanced-settings.png

ここまでできたら同様にマップに取り込み、起動して接続したインターフェースにアドレスを設定してno shutdown をかけて外部からtelnet できるか確認する。

(起動に15分くらいかかるので気長に待つ。)

cisco-map.png


10. Docker コンテナ

Docker コンテナもGNS3 上に配置して他のノードと通信させられる。

ここではcentos:7 のコンテナを取り込む例を書く。

Edit → Preferences



Docker → Docker Containers → New

docker-new.png

pull するイメージの名前を指定。

既にpull 済ならExisting image を選択する。

docker-image.png

適当に名前を付ける。

docker-name.png

マップ上のEthernet アダプター数。

docker-adapter.png

コンテナで実行するコマンド。

ここでは/bin/bashとする。

docker-command.png

コンソールタイプを選ぶ。デフォルトのtelnet で良い。

docker-console.png

環境変数を定義する必要がある場合はここで定義する。

docker-env.png

マップ上に配置する。

pull が必要な場合はここで自動でpull が開始される。

docker-map.png

配置したコンテナにIP Address を割り当てる。

アイコン右クリック → configure → Network configuration → Edit

docker-edit.png

コメントアウトを外してアドレスの設定を書く。

docker-interface.png

結線して動作開始させる。

外部と疎通できるか確認する。

docker-ping.png


まとめ

KVM で動作する仮想マシーンなら基本何でもGNS3 で動くはずである。Docker コンテナも動かすことができることを確認できた。サーバーを動作させるだけでなく、その周りのネットワークもマウス操作のみで簡単に構築できるので、これを開発環境に取り入れれば開発がもっと便利になる。

CSR1000v の起動が遅くメモリー消費量が多いのが難点だが、VyOS という軽量なソフトウェアルーターがあるのでこれを取り入れてみるのも良い。イメージファイルの作り方は検索すれば出てくる。

前編はこちら