検証用にtinycore linuxのイメージを準備する

GNS3やEVE-NG上での検証に軽量Linuxが欲しかったので, Tiny Core Linuxを使うことにした。

デフォルトではsshdやhttpd, keyboard mapなどまいどまいど設定し直す必要があるので, セットアップ済みのイメージを作成する。

その手順のメモ。

1. イメージ入手

オフィシャルからisoをDL。

2. OpenStackにイメージ登録して起動

手順は以下。カスタマイズするためにややこしい手順になってしまう。(もっと簡単な手順があるのかもしれないけれど・・・(^_^; )

2.1. iso のイメージにブータブルのボリュームをアタッチして起動
2.2. アタッチしたボリュームにtinycoreをインストール
2.3. ボリュームをデタッチ
2.4. ボリュームをイメージとして登録
2.5. そのイメージで再度起動

3. ターミナルを立ち上げてカスタマイズ

3.1. sshd インストール

tc@box:~$ tce-load -wi openssh
tc@box:~$ sudo /usr/local/etc/init.d/openssh start

3.2. Pass設定

tc@box:~$ sudo su
root@box:/home/tc# passwd tc

3.3. httpd インストール

tc@box:~$ tce-load -wi apache2
tc@box:~$ sudo /usr/local/apache2/bin/apachectl start

3.4. キーボードレイアウトを日本語キーボードへ変更

tc@box:~$ tce-load -wi kmaps.tcz
tc@box:~$ loadkmap < /usr/share/kmap/qwerty/jp106.kmap

3.5. 設定保存対応
メモリ上で起動しているOSのため, 再起動すると初期状態に戻る仕様。
以下を編集してバックアップするようにする。

tc@box:~$ cat /opt/.filetool.lst
opt
home
usr/local/etc/ssh #追加
etc/shadow #追加
usr/local/apache2/htdocs #追加
usr/local/apache2/conf/httpd.conf #追加

反映。

tc@box:~$ filetool.sh -b

3.6. 起動時対応
OS起動時にsshdを起動し, キーボードレイアウトもJPにするように起動スクリプトに登録。

tc@box:~$ cat /opt/bootlocal.sh
#!/bin/sh
# put other system startup commands here
/usr/local/etc/init.d/openssh start
loadkmap < /usr/share/kmap/qwerty/jp106.kmap

4. qcow2取り出し

4.1. 当該インスタンスのイメージをスナップショット
4.2. 当該スナップショットをファイル落とす
4.3. EVE-NGへ登録

試しにEVE-NGへ登録してみたら, 無事に起動した。

Tunnel over Tunnel のときのMTUについて

あまり無いとは思いますが, Tunnelを張った先で更にTunnelを張るような構成(Tunnel over Tunnel)のとき, エンド間でのDFビットを立てたpingではMTU値を正しく測定できません。

例えば以下の図の構成を考えた時, PC1とPC2との通信においてGREのカプセル化が2回かかります。

その時、PC1~PC2間の通信で最適なMTU値は

1500 – 24 – 24 = 1452

となります。

Gre over Gre 構成の一例

しかし, Pingで確認しようとすると, ICMPが2回カプセル化されてしまい, 2つ目のトンネルではDFビットが認識されずフラグメントされてしまいます。
そのため, MTUが判定されるのは1つ目のGREトンネルのみとなり, 正しくMTUを計測されることができません。

例えばPC1からのpingの結果が以下のようになったとしても, 2本目のGREトンネルの中ではフラグメント化されています。

$ /bin/ping 192.168.2.12 -s 1448 -M do
PING 192.168.2.12 (192.168.2.12) 1448(1476) bytes of data.
1456 bytes from 192.168.2.12: icmp_seq=1 ttl=62 time=1.70 ms
1456 bytes from 192.168.2.12: icmp_seq=2 ttl=62 time=1.81 ms
1456 bytes from 192.168.2.12: icmp_seq=3 ttl=62 time=6.20 ms
^C
--- 192.168.2.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.700/3.239/6.204/2.097 ms

$ /bin/ping 192.168.2.12 -s 1449 -M do
PING 192.168.2.12 (192.168.2.12) 1449(1477) bytes of data.
ping: local error: Message too long, mtu=1476
ping: local error: Message too long, mtu=1476
ping: local error: Message too long, mtu=1476
^C
--- 192.168.2.12 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2110ms

ICMPがフラグメント化されている様子

こういった構成では, しっかりMTU値を計算し, 最初のルータにおいて適切なMTU値(今回の構成では1452バイト)を設定しておく必要があります。

CiscoルータのConfigをnetconfで取得する

CiscoルータのConfigをnetconfを使って取得しようという試み。
対象機器はCisco841M。IOSのバージョンは15.8。

netconf とは

ネットワーク機器をリモートで設定変更・更新・情報取得するためのプロトコル。
制御内容をXMLで記述する。RFC6241で規定。

CiscoではSSH(v2)でルータとセッションを張って, その中でやりとりを行う。

こちら「知ったかぶりしない NETCONF」でわかりやすくまとめられています。

ルータの設定

手順

1. SSH設定
2. netconf設定
3. netconf用ユーザ作成
4. 試行

1. SSH設定

(config)#ip domain name example.com
(config)#crypto key generate rsa
(config)#ip ssh version 2

2. netconf設定

(config)#netconf ssh

3. netconf ユーザ作成

(config)#username netconf privilege 15    !権限は15
(config)#ip ssh pubkey-chain
(conf-ssh-pubkey)#username netconf
(conf-ssh-pubkey-user)#key-string !pubkey 貼り付け
(conf-ssh-pubkey-user)#exit
(conf-ssh-pubkey)#end

もろもろ設定確認

#show ip ssh
SSH Enabled - version 2.0
#show netconf session
Netconf Sessions: 0 open, maximum is 4

4. 試行

SSHでルータへ接続する。netconf over SSHv2ということで-s オプションでnetconfを呼び出す。

$ssh -s -l netconf -i netconf_key 192.168.1.2 netconf

直ぐにルータからのhelloが届く。

# ルータからのhello
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:capability:writeable-running:1.0</capability>
<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
<capability>urn:ietf:params:netconf:capability:url:1.0</capability>
<capability>urn:cisco:params:netconf:capability:pi-data-model:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities>
<session-id>49242144</session-id>
</hello>
]]>]]>

session-idを消して応答を返せば, ここから制御が可能になる。

# ルータへの応答
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:capability:writeable-running:1.0</capability>
<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
<capability>urn:ietf:params:netconf:capability:url:1.0</capability>
<capability>urn:cisco:params:netconf:capability:pi-data-model:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities>
</hello>
]]>]]>

show runを取得してみる。

#送付するリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get-config>
<source>
<running/>
</source>
</get-config>
</rpc>]]>]]>
#受け取った結果
<?xml version="1.0" encoding="UTF-8"?><rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><data><cli-config-data-block>!
! Last configuration change at 14:42:05 JST Fri Jan 18 2019 by netconf
! NVRAM config last updated at 12:22:11 JST Fri Jan 18 2019 by netconf
!
version 15.8
service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
no service password-encryption
service internal
!
~略~
ntp server ntp.nict.jp prefer
netconf ssh
!
</cli-config-data-block></data></rpc-reply>]]>]]>

XML形式で出力を得る場合は以下のようなリクエストを投げる。

<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get-config>
<source>
<running/>
</source>
<filter>
<config-format-xml/>
</filter>
</get-config>
</rpc>
]]>]]>

終了するときはCtrl-cで終了。

次はsshコマンドではなくncclientを使って見よう。

余談

ちなみに, Configの出力をXML形式で取得したい場合は

show run | format

で取得できる。

また, Config取得でall オプションを使いたいときはGetメソッドを使うとできる。

<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get>
<filter>
<oper-data-format-text-block>
<show>
run all
</show>
</oper-data-format-text-block>
</filter>
</get>
</rpc>
]]>]]>

この出力をXMLで取りたいなと思ったのだが, どうやらC841Mでは対応していないっぽい。specファイルを準備しないと駄目なのかな。

#show format
The following CLI are supported in built-in
show inventory
show ip interface brief
show waas token
show waas statistics peer
show waas statistics pass-through
show waas statistics lz
show waas statistics global
show waas statistics dre
show waas statistics dre peer
show waas statistics class*
show waas statistics aoim
show waas statistics auto-discovery
show waas statistics auto-discovery blacklist
show waas statistics application*
show waas alarms
show waas status extended
show waas status
show waas connection*
show waas auto-discovery list
show parameter-map type waas*
show class-map type waas*
show policy-map type waas*
show waas auto-discovery blacklist
show waas statistics errors
show waas accelerator
show waas accelerator detail
show waas accelerator ssl-express
show waas statistics accelerator ssl-express ciphers
show waas statistics accelerator ssl-express
show waas statistics accelerator ssl-express peering
show waas accelerator cifs-express
show waas statistics accelerator cifs-express
show waas statistics accelerator cifs-express detail
show waas accelerator http-express
show waas statistics accelerator http-express
show waas statistics accelerator http-express detail
show waas statistics accelerator http-express https
show waas cache http-express metadatacache*
show waas statistics accelerator http-express debug
show waas cache http metadatacache*

NW機器も公開鍵認証でSSH

NW機器もそろそろSSHでアクセスするときは公開鍵認証でやるべきかと思い, 主に触るであろうNW機器の設定をまとめた。

– 鍵準備

SSHで必要となる公開鍵を準備する。

$ ssh-keygen -t rsa -C user01 -f ./rsa_id
$ ls rsa*
rsa_id.pub #公開鍵
rsa_id #秘密鍵

– Cisco IOS

参考: SSH using public key authentication to IOS and big outputs.

1. SSH設定

# conf t
(config)# ip ssh version 2
(config)# line vty 0 4
(config-line)# login local
(config-line)# transport input ssh
(config-line)# hostname R1
(config)# ip domain name test.local
(config)# crypto key gen rsa

2. ユーザと公開鍵紐付け

(config)# ip ssh pubkey-chain
(conf-ssh-pubkey)# username cisco
(conf-ssh-pubkey-user)# key-string
(conf-ssh-pubkey-data)#
※ 最大で貼り付けられる文字数が256字ということで複数行に分けてペーストする。
(conf-ssh-pubkey-data)# exit
(conf-ssh-pubkey-user)# end
#

テスト

$ ssh -l cisco -i ./rsa.id 172.16.1.1
R1>


– VyOS

参考:Remote access

1. SSH設定

set service ssh port '22'

2. ユーザと公開鍵の紐付け認証設定

set system login user user1 authentication public-keys '鍵の識別子' key 'public key内の文字列のみ入力'  #ssh-rsa と ユーザは抜く

3. パスワード認証無効化

set service ssh disable-password-authentication

4. ホストバリデーション無効化(オプション)

set service ssh disable-host-validation

テスト

$ ssh -l user1 -i ./rsa_id 172.16.1.2
Welcome to VyOS

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login:
user1@vyos:~$

– Cisco ASA(9.x)

参考:Cisco ASA シリーズ 9.8 CLI コンフィギュレーション ガイド(一般的な操作)

1. SSH設定

ひとまずOutsideから全許可。

(config)# ssh 0.0.0.0 0.0.0.0 outside

2. 公開鍵のフォーマット変更

公開鍵をRFC4716形式で出力。

$ ssh-keygen  -e -m rfc4716 -f ./rsa_id.pub  # この出力結果を控えておく

3. ユーザと公開鍵の紐付け

(config)# aaa authentication ssh console LOCAL
(config)# username user1 attributes
(config-username)# service-type admin
(config-username) ssh authentication pkf

Enter an SSH public key formatted file.
End with the word "quit" on a line by itself:
### 2で変換したPublic Keyを貼り付ける ###
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by ubuntu@HOST from OpenSSH"
~~~
---- END SSH2 PUBLIC KEY ----
quit

テスト

$ ssh -l user1 -i ./rsa_id 172.16.1.3
User user1 logged in to ASA
Logins over the last 1 days: 2. Last login: 06:54:33 UTC Dec 8 2018 from 192.168.1.10
Failed logins since the last login: 0.
Type help or '?' for a list of available commands.
ASA>

– Cumulus linux

0. NCLU(Network Command Line Utility)インストール

参考:Network Command Line Utility – NCLU
※ ここは省略

1. LinuxのSSH公開鍵認証設定

ホームの.ssh配下のauthorized_keysに公開鍵を登録。

テスト

$ ssh -l cumulus -i ./rsa_id 172.16.1.4

Welcome to Cumulus VX (TM)

Cumulus VX (TM) is a community supported virtual appliance designed for
experiencing, testing and prototyping Cumulus Networks' latest technology.
For any questions or technical support, visit our community site at:
http://community.cumulusnetworks.com

The registered trademark Linux (R) is used pursuant to a sublicense from LMI,
the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide
basis.
Last login: Sat Dec 8 04:45:53 2018 from 192.168.1.10
cumulus@cumulus:~$

– JUNOS

参考:authentication (Login)

1. SSH設定

 set system services ssh protocol-version v2

2. ユーザと公開鍵紐付け

set system login user admin authentication ssh-rsa "ssh-rsa 省略 user01"

テスト

$ ssh -l admin -i ./user2_rsa 172.16.1.5
Last login: Thu Dec 6 18:07:53 2018 from 192.168.1.10
--- JUNOS 15.1X49-D140.2 built 2018-05-25 18:23:50 UTC
admin>

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 で上げたからかな?

expectコマンドでteraterm macroのようなことをする

Win10にWSLのUbuntu 18.0.4入れ, bashからシリアルコンソールに接続することができた。
Linux OSでシリアルコンソール接続
次は一連のコマンド処理をスクリプトで自動化させる。

「expect」 コマンドでスクリプトを書いていく。
前提条件は
ー Cisco機器はユーザ名/パスワード等基本設定は完了済み
ー シリアルポートは /dev/ttyS2 を利用
ー 接続コマンドは cu コマンドを利用

#!/bin/sh

expect -c "
set timeout 10 # タイムアウト設定:10秒
spawn cu -l /dev/ttyS2 # 実行コマンド記述
sleep 2 # 2秒待ちを入れる。これを入れないとうまくコンソールが開始しない
send "n" # EnterキーでCiscoのターミナルを表示させる
expect "Username:" # ユーザ名入力メッセージ待ち
send "usernamen" # ユーザ名を入力
expect "Password:" # パスワード入力メッセージ待ち
send "passwordn" # パスワードを入力
expect ">" # プロンプト待ち
send "enn" # enableコマンド入力
expect "Password:" # パスワード入力メッセージ待ち
send "enablen" # enableパスワード入力
expect "#" # 特権モードプロンプト待ち
send "term leng 0 n" # 処理1 (今回は terminal length 0)
expect "#" # 特権モードプロンプト待ち
send "show run n" # 処理2 (今回は show run)
expect "#" # 特権モードプロンプト待ち
send "exit n" # 処理終了
expect "Press RETURN to get started." # ログアウトメッセージ待ち
exit 0 # スクリプト終了
"

このスクリプトでshow running-configを出力することができる。
# screenコマンドでやる場合はroot権限が必要なのでスクリプトを実行するときはsudo でやる。
teraterm macro でやることとほぼ同じことをスクリプトでやっているだけだけれど, これができると次にやっとAnsibleを絡めたコンソール経由での処理自動化に進める。

Linux OSでシリアルコンソール接続

Windows10にWSLが実装され, Ubuntuが利用できるようになったのでbashをつかったルータ等にシリアルコンソールで接続するにはどうしたらよいのか調べたところ, すごく簡単だった。

Windows上でコンソールポートが「Com1」だった場合,

$ sudo screen /dev/ttyS1

で接続できる。Comポートの番号とttySXの「X」が紐ついている。

Ctrl-A -> k

でターミナル終了。デフォルトで9600になっているからオプションなくて大丈夫なはず。

なお, screenは標準でインストールされているが, MSのページではcu コマンドで紹介している。
Serial Support on the Windows Subsystem for Linux

cu コマンドでやる場合は, ターミナル設定のFlow controlを無効にしないと反応が返ってこない。
/etc/uucp/port を新規作成する。

port      ttyS2       # Port name
type direct # Direct connection to other system
device /dev/ttyS2 # Port device node
hardflow false # No hardware flow control
speed 9600 # Line speedつd

/dev/ttyS1 のアクセス権がroot/dialout となっている。ユーザをdialoutグループに参加させる必要がる。

$ sudo gpasswd ubuntu dialout

上記設定後に

$ cu -l /dev/ttyS1

で接続できる。終了するときは「~.」。

EVE-NG on GCP

GCPでネストを有効化する。(Google Cloud SDK shell を使う)
ネストが利用できるのはHaswell以降のCPUが実装されているリージョン。
EVE-NGはベアメタルのデプロイを参考にする。
http://www.eve-ng.net/documentation/installation/bare-install

1. インスタンス作成

まず最初にUbuntu 1604.ltsをベースにNestedのイメージを作る。

GoogleCloud SDK>gcloud compute images create nested-ubuntu-1604-lts --source-image-project=ubuntu-os-cloud --source-image=ubuntu-1604-xenial-v20181004  --licenses="https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
Created [https://www.googleapis.com/compute/v1/projects/propane-passkey-xxxxx/global/images/nested-ubuntu-1604-lts].
NAME PROJECT FAMILY DEPRECATED STATUS
nested-ubuntu-1604-lts propane-passkey-xxxxx READY

このイメージを使い仮想マシンを立てる

EVE-NGのシステム要件
http://www.eve-ng.net/documentation/installation/system-requirement

インスタンス作成

作成したイメージからインスタンスを作成する
項目編集。ひとまずvCPU 2 メモリ 8G。
シリアルポートへのアクセスを許可する。

ログインして仮想化に対応しているか念の為確認。

~$ grep vmx /proc/cpuinfo 
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti tpr_shadow flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arch_capabilities
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti tpr_shadow flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arch_capabilities

OK。

2. EVE-NG インストール事前準備

ログイン後, ベアメタルインストールの手順に従って設定の修正を行っていく。
・/etc/hosts 修正
・sshd設定 修正
・Grub設定 修正
・インタフェース名をethへ変更

# cat /etc/udev/rules.d/70-persistent-net.rules 
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="42:01:0a:8e:00:02", NAME="ens4"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="42:01:0a:8e:00:02", NAME="eth0"

・適用のため一度再起動

root@eve-ng:~# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1460 qdisc mq state UP group default qlen 1000
link/ether 42:01:0a:8e:00:02 brd ff:ff:ff:ff:ff:ff
inet 10.142.0.2/32 brd 10.142.0.2 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::4001:aff:fe8e:2/64 scope link
valid_lft forever preferred_lft forever

OK。

3. EVE-NG インストール

# wget -O - http://www.eve-ng.net/repo/install-eve.sh | bash -i
# reboot

ここに従って初期設定をする。
http://www.eve-ng.net/index.php/documentation/howto-s/65-howto-configure-eve-during-first-boot

・アップデート

# apt-get update
# apt-get upgrade

・HTTPS化
https://zassoul.blogspot.com/2018/06/eve-nghttps.html

完了。
4. お試しアクセス
https://<インスタンスの外部IP>/ にアクセス。

初期ID・パス入力

無事成功

5. Firewall 設定

開放が必要なポートを開ける。
FAQには「ポッド(アカウント)数によって変わる」とあった。
Community版はAdminのみなので, 32769~32896まで開放する。

新規ルール作成

送信元IPは指定したほうが良いが, ひとまずANYで開放

最低限, adminのパスワードは変更しておく。

以上。