GNS3サーバ1台を複数人で利用する

GNS3サーバを1台立てて, チームメンバー数人で利用する場合の環境を構築する方法のメモ。

イメージ

手順は以下の通り。

  1. GNS3サーバを建てる
    • ユーザ作成
    • 必要なパッケージ準備
  2. GNS3サーバをデーモンモードで起動
  3. 各人のPCにGNS3をインストール
  4. 接続先をサーバに指定する
1. GNS3 サーバ準備
インストール方法(公式)
ubuntu 18.04LTS で試したが, この公式の手順だとパッケージが見つからずインストールできなかった。

ということで, Discussionにあったpipを使えばいけるという情報を参考にセットアップする。

Unable to install GNS3 on Ubuntu 19.04

ubuntu@gns3:~$ sudo adduser gns3
ubuntu@gns3:~$ sudo apt install python3-pip
ubuntu@gns3:~$ sudo pip3 install gns3-gui gns3-server

2. デーモンモードで起動

ubuntu@gns3:~$ git clone https://github.com/GNS3/gns3-server.git
ubuntu@gns3:~$ cd gns3-server/init/
ubuntu@gns3:~/gns3-server/init$ sudo cp gns3.service.systemd /lib/systemd/system/gns3.service
ubuntu@gns3:~/gns3-server/init$ sudo chown root /lib/systemd/system/gns3.service
ubuntu@gns3:~/gns3-server/init$ sudo systemctl start gns3

3. クライアントセットアップ

オフィシャルページからGNS3をダウンロードしてインストール。

4. GNS3起動, 接続設定
起動後, 接続先サーバを「remote server」とする。

「Run application on a remote server」を選択

接続先のIPアドレス, 認証情報を入力。
今回はgns3ユーザで接続。
FirewallでTCP3080を開けておく。

無事接続できると, サーバ稼働状況がいつものように表示される。

以降, いつものように使いたいイメージを登録していけばOK。

ただし, 1つのユーザを複数人でシェアする環境となるため, イメージの作成・削除やプロジェクトの扱いは要注意。(うっかり人のプロジェクトを使ってしまったり, 削除してしまったりすると悲惨)
※ 共有フォルダと同じ感覚で取り扱うとよいと思われる。

なお, 同一プロジェクトを同時に利用しているとそれぞれの変更がリアルタイムで反映されるので, 検証を一緒にやりたいときなど便利かもしれない。

CentOS7にpyenv

そろそろ真面目にPythonに取り掛かろうと、環境準備の一貫で異なるバージョンのPython環境を揃えることができるpyenvをインストールする。

公式サイト(GITHUB)

依存関係準備

$ sudo yum install @development zlib-devel bzip2 bzip2-devel readline-devel sqlite 
sqlite-devel openssl-devel xz xz-devel libffi-devel findutils

インストール

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

pyenvのPATH設定

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
# Add pyenv init to your shell to enable shims and autocompletion. Please make sure eval "$(pyenv init -)" is placed toward the end of the shell configuration file since it manipulates PATH during the initialization.
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; thenn eval "$(pyenv init -)"nfi' >> ~/.bash_profile
$ source ./.bash_profile

完了。

確認

現状チェック。

$ python -V
Python 2.7.5

pyenv で3.7.0をインストール。

$ pyenv install 3.7.0
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
Installed Python-3.7.0 to /home/centos/.pyenv/versions/3.7.0
$ pyenv versions
* system (set by /home/centos/.pyenv/version)
3.7.0

script directoryだけをversion 3.7.0 にする。

$ pwd
/home/centos/script
$ pyenv local 3.7.0
$ pyenv versions
system
* 3.7.0 (set by /home/centos/script/.python-version)
$ cd
$ pyenv versions
* system (set by /home/centos/.pyenv/version)
3.7.0

へー面白い。

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*

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

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のパスワードは変更しておく。

以上。

dockerでファイルサーバ立てる

背景

今まではOpenStackにCentOSでファイルサーバ立てていたけれど, OpenStack再構築ややらかしちゃったときに退避データが被害受けるのは辛い。
ということで, せめてホストOS直でファイルサーバを立てようかと思ったが, せっかくKollaでOpenStack立てて, dockerが入っているのだからコンテナでファイルサーバ立ててみようと思った。

コンテナでsambaを立てる

参考情報

Docker上 で samba を動かしてファイル共有する
dperson/samba
docs.docker.com
Docker道場「Dockerの基本概念」0825インフラ勉強会資料

手順

  1. ファイルマウント用のディレクトリ作成
  2. アカウントにdocker権限付与
  3. sambaコンテナデプロイ
  4. smb.conf編集
  5. コンテナ再起動

1.共有ディレクトリ準備

/share/NAS という場所にする。

mkdir /share/NAS
chmod 777 /share/NAS

2.dockerグループ追加

root以外のアカウントでコンテナ実行したいのでdockerグループに追加。(セキュリティ的に好ましくないそう)

sudo usermod -aG docker user

コンテナデプロイ

$ docker run --name NAS             # コンテナ名
-p 139:139 -p 445:445 # ポート139と445を開放
-v /share/NAS:/mnt/nas # /share/NAS を /mnt/nas にバインド
-d dperson/samba # dperson/samba をデプロイ
-u "samba;sambapass" # dperson option) samba ユーザを作成(パスワードも一緒に)
-s "nas:/mnt/nas;no;no;no;samba" # dperson option) /mnt/nasを nas という名前で, 公開せず, ROせず, ゲストも拒否, sambaユーザ限定

3.smb.conf編集

デフォルトだとsmbuserに作成者とか上書きされるので, コンテナにログインしてsmb.confを編集。

$ docker exec -it NAS /bin/bash
bash-4.4#

vi /etc/samba/smb.conf

   pam password change = yes
map to guest = bad user
usershare allow guests = yes
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
# force user = smbuser #コメントアウト
# force group = users #コメントアウト
follow symlinks = yes
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
socket options = TCP_NODELAY
strict locking = no
vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
min protocol = SMB2

4.コンテナ再起動

$ docker restart NAS

完成。確認。

アクセスできてファイルも置けた

$ ls /share/NAS/
test test2

ファイルも置けている。確かに早い!