neo3016.log

好きなことをまとめた備忘録的なそれ。

LXD(コンテナ)を作成して外部からSSH,FTPで接続を試みる。

Proxmoxで遊びまくっていて、Linuxコンテナ(以下LXD)に興味を持った。
Proxmox内部のバーチャルマシン(以下VM)の内部に手動でLXDを作成、Proxmox外部のPCから直接LXDにSSHで接続を行ってみた記録。

外部PCからProxmox内部のVMSSHで接続時の操作ログを備忘録と示しておく。

登場人物

neo3016@neo3016-prox = Proxmox内のVM(ubuntu)
root@ubuntu18 = neo3016@neo3016-prox内で作成したLXDのroot
neo3017@ubuntu18:/root$ = root@ubuntu18内で作成したsudoユーザ

※snapについて

「Snap」は、Ubuntu Linuxディストリビューションを開発している英Canoincal社によって提供されているパッケージ管理のシステムです。「Snap」パッケージは、ソフトウェアの実行に必要なライブラリなどのすべてのソフト(環境)が含まれれており、自己完結型パッケージとも呼ばれています。このため、追加で依存関係をインストールする必要はなく、どのLinuxバージョンでも同じバイナリーをそのまま駆動できるユニバーサルパッケージとも呼ばれています。ある意味、ディストリビューション固有のパッケージ管理(deb, rpm, aptなど)に代わるものです。

追記:UFWをいじくったらホストOSにSSH接続が出来なくなった
sudo ufw allow ssh  で解消

操作ログ

※LXCをインストールする。
neo3016@neo3016-prox:~$ sudo snap install lxd 

※LXC の初期化←これがないとスペースがないとはじかれる←基本的にデフォルト(enter連打)でおk
neo3016@neo3016-prox:~$ sudo lxd init

※ubuntu:18.04でubuntu18というコンテナを作成する。
neo3016@neo3016-prox:~$ sudo lxc init ubuntu:18.04 ubuntu18
Creating ubuntu18
Retrieving image: Unpack: 100% (1.72GB/s)   Retrieving image: Unpack: 100% (1.72GB/s)      

※コンテナを確認する(ubuntu20は以前に作成済)
neo3016@neo3016-prox:~$ sudo lxc ls
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|   NAME   |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| ubuntu18 | STOPPED |                     |                                               | CONTAINER | 0         |
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| ubuntu20 | RUNNING |  *.*.*.*     (eth0) |                                               | CONTAINER | 0         |
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+

※コンテナを起動する
neo3016@neo3016-prox:~$ sudo lxc start ubuntu18

※コンテナのbashを起動する → プロンプトが起動する。
neo3016@neo3016-prox:~$ sudo lxc exec ubuntu18 -- /bin/bash

※コンテナの内部に潜入
root@ubuntu18:~# 
※とりま、apt-get updateやってみる。
root@ubuntu18:~# sudo apt-get update
 ※疎通不可などのエラーは無
※sshの設定する。
root@ubuntu18:~# sudo vim /etc/ssh/sshd_config 
 →PasswordAuthentication yes にする。

※sshを再起動する。
root@ubuntu18:~# sudo systemctl restart ssh

※sshでログインするユーザーを作成する。
root@ubuntu18:~# sudo adduser neo3017
Adding user `neo3017' ...
Adding new group `neo3017' (1001) ...
Adding new user `neo3017' (1001) with group `neo3017' ...
Creating home directory `/home/neo3017' ...
Copying files from `/etc/skel' ...

Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for neo3017
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] 

※作成したユーザーをsudoのグループに入れる。
root@ubuntu18:~# su sudo gpasswd -a neo3017 sudo
Adding user neo3017 to group sudo

※作成したユーザーに切り替え
root@ubuntu18:~# su neo3017
※とりま、sudo が使えるか apt-get updateしてみる。
neo3017@ubuntu18:/root$ sudo apt-get update
 ※疎通不可などのエラーは無
※rootユーザに一旦戻る
neo3017@ubuntu18:/root$  exit

※vsftpdをコンテナ内にインストールする。
root@ubuntu18:~# sudo apt-get install -y vsftpd

※vsftpdの設定ファイルを編集する。
root@ubuntu18:~# sudo vim /etc/vsftpd.conf 
ーーーーーーーーーーーーーーーーーーーーーーーーーー
※ 書き込み許可(コメント解除)
write_enable=YES

※ chroot許可(コメント解除)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES  ←追記
ーーーーーーーーーーーーーーーーーーーーーーーーーー
※chroot_listを新規作成する(touch(タイムスタンプをいじるコマンド)で未指定ファイル指定=新規作成)
root@ubuntu18:~# sudo touch /etc/vsftpd.chroot_list

※vsftpdを再起動する。
root@ubuntu18:~# sudo systemctl restart vsftpd

※vsftpdの状況を確認する。
root@ubuntu18:~# sudo systemctl  status vsftpd
● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: e
   Active: <span style="color: #ff0000">active</span> (running) since Fri 2023-11-10 12:13:18 UTC; 26s ago

※sshの状況を確認する。
root@ubuntu18:~# sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enab
   Active:<span style="color: #ff0000"> active </span>(running) since Fri 2023-11-10 12:08:42 UTC; 5min ago

root@ubuntu18:~# 

結び(読まなくてよい)

コンテナの作成~SSH,FTPの設定をしたわけだけど、躓いたのは、コンテナの作成だった。
lxc-createのコマンドからのコンテナ作成は、コンテナの作成はできたけど、ネットワーク周りの上手くいかなくて諦めてしまった。 lxc コマンドで行う方法は、あっさり外部NWと繋がったので拍子抜けした。
わざわざbridgeを作る必要もなかった。 SSH接続するためにsudoユーザーを作るところも躓きポイントだった。 コンテナ作成,SSH,FTPが自在にできるようになったので、コンテナくしゃくしゃポイができるようになった。いい感じの砂場を手に入れた気分。

追記:VMware内部のVM内にLXDを作成した場合にPingが通らない問題の解決法

UFWとか色々設定をしたけど、一向にホストPC(VMwareと同一NW)からVMware内のVM内部のコンテナに
Pingが通らなかった。その解決方法
VMware内のVM内部でlxcのネットワーク周りの設定をする。→具体的にはipv4のnatをture→falseに変えた。

ちな、確認コマンドは sudo lxc network show lxdbr0(←設定されているインターフェース名前)
ちな、ブロードバンドルーターにコンテナ向きのスタティックルートを追加しているよ。
コンテナ向きネットワーク→VMwareVMのIPをデフォルトゲートウェイ
これを解決するために数時間、時間食った。

※追記 sudo lxc network set lxdbr0 ipv4.nat false にすると、コンテナ内部から外部のNWに接続が出来なくなった(apt-get updateが出来なくなってしまった。)。ので sudo lxc network set lxdbr0 ipv4.nat trueにしたところ、接続ができた。 trueに戻しても内部NWから各コンテナにpingが通っていた。 上記設定は不要なのか・・・・。 わからなくなってきた。