GNS3 on GCP

EVE-NGにならってGNS3もGCP上に立てる。
イメージは18.04のbionicを選択。
# 現時点でcosmicだとDockerやiouguiのインストールですんなり行かない。
# 北米より高いけど, 日本リージョンで建てることをおすすめします

>gcloud compute images create nested-ubuntu-1804-lts --source-image-project=ubuntu-os-cloud --source-image=ubuntu-1804-bionic-v20181120  --licenses="https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"

このイメージを使いインスタンスを起動→SSHでログイン。

あとはオフィシャルの手順通りやっていけば完了。
インストール手順(オフィシャル)

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo add-apt-repository ppa:gns3/ppa
$ sudo apt-get update
$ sudo apt-get install gns3-gui
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt install gns3-iou
$ sudo apt install dynamips:i386 #Bug対応

途中, Wiresharkを非ルートユーザでの実行を許可するかどうかを聞かれるので「Yes」を選択。続いてGNS3を非ルートユーザでの実行を許可するかどうかを聞かれるので「Yes」を選択する。(ここはデフォルトでNoが選択されている)

$ sudo apt-get install 
apt-transport-https
ca-certificates
curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ sudo usermod -a -G docker gns3
$ # gns3 はログインユーザ名
$ sudo usermod -a -G docker gns3
$ sudo usermod -a -G ubridge gns3
$ sudo usermod -a -G libvirt gns3
$ sudo usermod -a -G kvm gns3
$ sudo usermod -a -G wireshark gns3
$ gns3 --version

2.1.11

完了。

無事起動

EVE-NGでのキャプチャをtsharkへ変更する

どうにも自分の環境ではWiresharkでのキャプチャがうまくキャプチャできないので, tsharkで代用する手順をメモっておく。

EVE-NGのWinクライアントパッケージを入れると

C:Program FilesEVE-NGwireshark_wrapper.bat

ができる。Wiresharkも同時に入る。
この内容を次のように編集する。

@ECHO OFF
SET USERNAME="root"
SET PASSWORD="eve"

SET S=%1
SET S=%S:capture://=%
FOR /f "tokens=1,2 delims=/ " %%a IN ("%S%") DO SET HOST=%%a&SET INT=%%b
IF "%INT%" == "pnet0" SET FILTER=" not port 22"

ECHO "Connecting to %USERNAME%@%HOST%..."
# ここ
rem "C:Program FilesEVE-NGplink.exe" -ssh -pw %PASSWORD% %USERNAME%@%HOST% "tcpdump -U -i %INT% -s 0 -w -%FILTER%" | "C:Program FilesWiresharkWireshark.exe" -k -i -
"C:Program FilesEVE-NGplink.exe" -ssh -pw %PASSWORD% %USERNAME%@%HOST% "tcpdump -U -i %INT% -s 0 -w -%FILTER%" | "C:Program FilesWiresharktshark.exe" -r -

これで出力がCLIベースのtsharkへ流れ, キャプチャの状態が見れる。

前段が同じでも, wiresharkだとエラーになるので原因はwireshark側にあるのだと思うけれど, さして困らないのでひとまずこれで行く。

ubuntu@WSL でSSH接続でエラーが出る

NW機器へのSSH接続時に暗号化ネゴの失敗でつながらないときの対処法。

ubuntu:~$ ssh -l cisco 192.168.1.200
Unable to negotiate with 192.168.1.200 port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

暗号化方式チェック。

ubuntu:~$ ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
rijndael-cbc@lysator.liu.se
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com

サポートはしている。有効化されていないのか。
ちなみにオプション -c で暗号化指定すると行ける。

Cisco側では以下メッセージが出ていた。

 client chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com 
server aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

やはりクライアントのオファーにcbcが入っていない・・・。

/etc/ssh/ssh_config を編集。

Host *
# ForwardAgent no
# ForwardX11 no
# ForwardX11Trusted yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
# Protocol 2
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc # ここを追記
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes

確認。

ubuntu:~$ ssh -l cisco 192.168.1.200

Password:

これでいけるようになったけど, デフォルトで有効化されているものを確認するにはどうしたらいいのだ。

OpenSSHのリリースノート見たら, 7.5からCBCはデフォルトで無効化されていた。
ubuntuのapt-get upgrade で上げたからかな?