見出し画像

開発日誌:LXD デスクトップRDP

今日の成果!

無事Ubuntu20サーバー(CLI)環境のLXD GUIコンテナにRDP接続出来ました。

クライアント側は、Macになります。

画像1

まじで感動です。

Cloud-initでプロファイル作成

まずは、今回の環境を構築するためのcloud-initファイルを作成

lxc config edit vm-mana << EOF
config:                                                                                                                                                                                                                                     
 security.nesting: "true"
 security.privileged: "true"
 user.user-data: |
   #cloud-config
   timezone: Asia/Tokyo
   locale: ja_JP.utf8
   package_upgrade: true
   users:
     - name: smith
       uid: 1001
       sudo: ALL=(ALL) NOPASSWD:ALL
       shell: /bin/bash
       ssh_authorized_keys:
         - <ホストの公開鍵の中身全部(ファイルパスではないです。)>
     - openssh-server
     - gnupg
     - wget
     - tightvncserver
     - ubuntu-desktop
     - xrdp
     - tigervnc-standalone-server
     - language-pack-ja-base
     - language-pack-ja
   runcmd:
     - wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | apt-key add -
     - wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | apt-key add -
     - wget https://www.ubuntulinux.jp/sources.list.d/focal.list -O /etc/apt/sources.list.d/ubuntu-ja.list
     - apt update -y
     - apt upgrade -y
description: ""
devices: {}
name: myProfile
used_by: []
EOF

このプロファイルとデフォルトプロファイルを使いコンテナを構成

コンテナインストール

Ubuntu20.04のコンテナイメージを使ってVMmanaというコンテナを作成します。

lxc launch ubuntu:20.04 VMmana -p default -p vm-mana

cloud-initで構成管理がされるので、実行状態を確認する場合は次のコマンドを打ちます。

lxc exec VMmana -- cloud-init status --wait

ダウンロードしたコンテナを確認

lxc list

作成されたコンテナを確認

+--------+---------+---------------------+------+-----------+-----------+
|  NAME  |  STATE  |        IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+--------+---------+---------------------+------+-----------+-----------+
| VMmana | RUNNING | 10.200.0.209 (eth0) |      | CONTAINER | 0         |
+--------+---------+---------------------+------+-----------+-----------+

コンテナが稼働してIPも振られているのがわかります。

SSH接続設定

プロファイルでホスト側のSSH公開鍵は設定済みなのでSSH公開鍵接続でコンテナないに接続します。

ssh -i id_key 10.200.0.209

 RDPポートの接続

コンテナのネットワークからホストへアクセスできるよにProxy設定をします。

lxc config device add VMmana xrdp1 proxy listen=tcp:0.0.0.0:3389 connect=tcp:127.0.0.1:3389 bind=host
lxc config device add VMmana xrdp2 proxy listen=udp:0.0.0.0:3389 connect=udp:127.0.0.1:3389 bind=host
​

コンテナの外側(ホスト側)からの接続ネットワークが無制限になっていますが実際に使う場合は、きっちり絞って設定します。

設定を確認

lxc config device show VMmana
xrdp1:
 bind: host
 connect: tcp:127.0.0.1:3389
 listen: tcp:0.0.0.0:3389
 type: proxy
xrdp2:
 bind: host
 connect: udp:127.0.0.1:3389
 listen: udp:0.0.0.0:3389
 type: proxy


ファイヤーウォール設定

xrdp用のUFWアプリケーションファイルを作成

echo '
[xrdp]
title=X Window System Remote Desktop
description=XRDPサーバー
ports=3389/udp|3389/tcp
' |sudo tee /etc/ufw/applications.d/xrdp

UFWのアプリケーションとして読み込まれているかを確認

sudo ufw app list

# こんな感じで追加されています。
利用可能なアプリケーション:
OpenSSH
xrdp

UFWに設定を読み込み確認

sudo ufw app update xrdp
sudo ufw app info xrdp

ファイヤーウォールを許可する。

sudo ufw allow from 192.168.99.70 to any app "xrdp"
sudo ufw reload
sudo ufw status

あとはクライアントからRDP接続すると最初のスクリーンショットのようになります。

いやはや、ついにここまで来ました。

感無量です!

あとは、細かい設定を見直してVMのコントローラーをインストールしてVM制御できるようにしたいと思います。

あとは、ホスト側のNVIDIAのGPUを共有できるようにもしておきたいです。

以上です。それではまた明日ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?