トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

WSL/Guacamole

INDEX

Apache Guacamole on Windows Subsystem for Linux

Apache Guacamole を Windows Subsystem for Linux で動かして、自身のRDP接続をウェブブラウザからアクセスする。

Windows 10 ver.2004 以降で、KB5004296 が適用済みの環境(これ以前・未適用の場合は、WSLの有効化・Microsoft Store からのディストリビューションのインストールが必要になる)。

ただ、WSL2 は、アイドル状態になると自動的に停止されてしまう。そのため、動かしたままにするために Windows にログインした状態で、WSLのターミナルを開いた状態にしておく必要がある(何かしらのサービスを再起動させればよい というのも見かけたけど、試した限りでは止まってしまう)。

Apache Guacamole の構築

 Ubuntu on WSL2 のインストール

管理者でコマンドプロンプトを開き、wsl コマンドで作業する。

--list --online で利用可能なディストリビューションが確認でき、 --install でインストールする。-d オプションで、ディストリビューションを指定する。デフォルトは Ubuntu なので、指定なしでも Ubuntu になる。

C:\> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
 'wsl --install -d <Distro>'を使用してインストールします。

  NAME               FRIENDLY NAME
* Ubuntu             Ubuntu
  Debian             Debian GNU/Linux
  kali-linux         Kali Linux Rolling
  SLES-12            SUSE Linux Enterprise Server v12
  SLES-15            SUSE Linux Enterprise Server v15
  Ubuntu-18.04       Ubuntu 18.04 LTS
  Ubuntu-20.04       Ubuntu 20.04 LTS
  OracleLinux_8_5    Oracle Linux 8.5
  OracleLinux_7_9    Oracle Linux 7.9

C:\>
C:\> wsl --install -d Ubuntu
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Ubuntu
Ubuntu はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。

C:\>
C:\> shutdown /r /t 0

再起動すると、Ubuntu のコンソールが表示され、Ubuntu 用のユーザ作成が求められる。ディストリビューションごとの既定のユーザとなり、Linux 管理者と見なされ sudo コマンドが実行できる。ちなみに、インストールする Linux ディストリビューションごとに固有で、Windows のユーザとは関係ない。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
Enter new UNIX username: username
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.79.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This message is shown once a day. To disable it please create the
/home/username/.hushlogin file.
username@hostname:~$

 systemctl を利用する

Ubuntu 22.04 で、systemctl コマンドを実行しようとすると、下記のようなエラーメッセージが表示される。

$ sudo systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
$

Ubuntu で、/etc/wsl.conf に下記の内容を記載して、WSL を再起動する。

[boot]
systemd=true

コマンド

$ ls -l  /etc/wsl.conf
-rw-r--r-- 1 root root 21 Jan 22 12:38 /etc/wsl.conf
$ cat  /etc/wsl.conf
[boot]
systemd=true

$
C:\> wsl.exe --shutdown
$ ps -ae
    PID TTY          TIME CMD
      1 ?        00:00:00 systemd
      2 ?        00:00:00 init
  :中略
$ systemctl list-unit-files --type=service
UNIT FILE                                              STATE           VENDOR PRESET
apparmor.service                                       enabled         enabled
apport-autoreport.service                              static          -
  :中略
$

 Apache Guacamole のインストール

GitHub - MysticRyuujin/guac-install: Script for installing Guacamole on Ubuntu インストールスクリプトを利用する。

$ wget https://git.io/fxZq5 -O guac-install.sh
--2023-01-22 13:10:51--  https://git.io/fxZq5
Resolving git.io (git.io)... 140.82.114.22
Connecting to git.io (git.io)|140.82.114.22|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install.sh [following]
--2023-01-22 13:10:52--  https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24966 (24K) [text/plain]
Saving to: ‘guac-install.sh’

guac-install.sh            100%[========================================>]  24.38K  --.-KB/s    in 0.001s

2023-01-22 13:10:52 (39.5 MB/s) - ‘guac-install.sh’ saved [24966/24966]

$ chmod +x guac-install.sh
$ ls -l guac-install.sh
-rwxr-xr-x 1 username username 24966 Jan 22 13:10 guac-install.sh
$

取得したインストールスクリプトを実行する。

必要なことは対話形式で聞いてくるが、オプションで指定して実行する。MFA(多要素認証)を使用しない ( -o | --nomfa )、MySQL をインストールする ( -i | --installmysql )。また、MySQL と Guacamole のパスワードを指定する ( -r | --mysqlpwd-gp | --guacpwd )。

さらに、systemctl コマンドが使えない状態だと、Tomcat, MySQL の制御(再起動)に失敗して、インストールに失敗する。

$ sudo ./guac-install.sh --nomfa  --installmysql --mysqlpwd <MySQLのパスワード> --guacpwd <Guacamoleのパスワード>

Read MySQL root's password from command line argument

Read MySQL guacamole_user's password from command line argument

Adding component(s) 'universe' to all repositories.
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [831 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [566 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [785 kB]
Fetched 2507 kB in 4s (645 kB/s)
Reading package lists... Done
Updating apt...
Found libmariadb-java package (known issues). Will download libmysql-java 8.0.27 and install manually
Found tomcat9 package...
Installing packages. This might take a few minutes...
OK

Downloading files...
guacamole-server-1.4.0.tar 100%[========================================>]   1.05M  --.-KB/s    in 0.03s
Downloaded guacamole-server-1.4.0.tar.gz
guacamole-1.4.0.war        100%[========================================>]  12.41M  57.3MB/s    in 0.2s
Downloaded guacamole-1.4.0.war
guacamole-auth-jdbc-1.4.0. 100%[========================================>]  15.72M  59.5MB/s    in 0.3s
Downloaded guacamole-auth-jdbc-1.4.0.tar.gz
mysql-connector-java-8.0.2 100%[========================================>]   4.02M  5.91MB/s    in 0.7s
Downloaded mysql-connector-java-8.0.27.tar.gz
Downloading complete.

Building Guacamole-Server with GCC 11.3.0
Configuring Guacamole-Server. This might take a minute...
OK
Running Make on Guacamole-Server. This might take a few minutes...
OK
Running Make Install on Guacamole-Server...
OK

Moving mysql-connector-java-8.0.27.jar (/etc/guacamole/lib/mysql-connector-java.jar)...

Restarting Tomcat service & enable at boot...
OK

Restarting MySQL service & enable at boot...
OK
Synchronizing state of mysql.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mysql

Setting timezone as Asia/Tokyo

Checking MySQL for existing database (guacamole_db)
OK
Checking MySQL for existing user (guacamole_user)
OK
Adding database tables...
OK

Create guacd.conf file...
Starting guacd service & enable at boot...
Created symlink /etc/systemd/system/multi-user.target.wants/guacd.service → /etc/systemd/system/guacd.service.

Cleanup install files...

Installation Complete
- Visit: http://localhost:8080/guacamole/
- Default login (username/password): guacadmin/guacadmin
***Be sure to change the password***.
$

Guacamole のインストールが完了したら、 http://localhost:8080/guacamole/ にアクセスして、管理者ユーザ guacadmin でログインする。

 サーバログ

Guacamole Server

systemd ジャーナル参照 journalctl で確認できる

journalctl -u guacd -f

Guacamole Client as Tomcat

Guacamole Client というか、WEBサービスの Tomcat のログ /var/log/tomcat9 に出力される。

 ユーザと接続先の作成

自身のRDP接続

ホスト名は、接続先のIPアドレスかホスト名を指定する。localhost は、WSL 側になるので注意。自己証明書を使っている場合、サーバ証明書を無視する にチェックする。

  • 接続の編集
      • 名前: localhost (任意)
      • ロケーション:ROOT (任意)
      • プロトコル: RDP
  • 同時接続制限
      • 最大接続数: 1 (規定値)
      • ユーザ毎の最大接続数: 1 (規定値)
  • ロードバラシング
  • プロキシパラメータ
  • パラメータ
    • ネットワーク
      • ホスト名: 192.168.0.1 ※接続先のIPアドレス
      • ポート: 3389
    • 認証
      • ユーザ名:接続先のユーザ
      • パスワード:接続先のパスワード
      • ドメイン:接続先のドメイン
      • セキュリティモード:未選択
      • 認証の無効化:チェックしない
      • サーバ証明書を無視する: チェックする
    • リモートデスクトップゲートウェイ
    • 基本設定
      • キーボードレイアウト:Japanese (Qwert) ※接続元に合わせる
      • タイムゾーン:Asia/Tokyo ※接続元に合わせる?
    • ディスプレイ
      • 幅:1920 ※規定は
      • 高さ:1080 ※規定は
      • 解像度(DPI): ※規定は
      • カラー深度:Trueカラー (32ビット) ※規定は
    • クリップボード
    • ディバイスリダイレクト
    • パフォーマンス
    • リモートアプリケーション
    • 事前接続 PUD/Hyper-V
    • ロードバラシング
    • スクリーンレコーディング
    • SFTP
    • Wake-on-LAN (WoL)

 ネットワーク設定

稼働させているPC以外からアクセスできる様に、ポートフォワードとファイアウォールの設定を行う。

WSL2 は、稼働させている Linux は、仮想環境で動いている状態であるため、ホストの Windows とは異なるBクラスのローカルアドレスで稼働している。ただ、起動するたびに割り当てられるIPアドレスが変更されてしまう。

WSL2 のIPアドレスを確認する

$ ip r
default via 172.29.32.1 dev eth0 proto kernel
172.29.32.0/20 dev eth0 proto kernel scope link src 172.29.37.xxx
$ hostname -I
172.29.37.xxx
$

WSL2 へポートフォワードする

管理者で下記コマンドを実行し、指定のポートのアクセスを WSL へ送る

netsh interface portproxy add v4tov4 listenport=<ポート番号> listenaddress=0.0.0.0 connectport=<ポート番号> connectaddress=<WSLゲストのIPアドレス>

ファイアウォール

Windows ファイアウォールで、ポート番号を許可する。

C:\> netsh advfirewall firewall add rule name="WSL Guacamole" dir=in action=allow protocol=TCP localport=8080 description="Guacamole on WSL"
OK

C:\> netsh advfirewall firewall show rule name="WSL Guacamole"

規則名:                               WSL Guacamole
----------------------------------------------------------------------
有効:                                 はい
方向:                                 入力
プロファイル:                         ドメイン,プライベート,パブリック
グループ:
ローカル IP:                          任意
リモート IP:                          任意
プロトコル:                           TCP
ローカル ポート:                      8080
リモート ポート:                      任意
エッジ トラバーサル:                  いいえ
操作:                                 許可
OK

C:\> 

 自動起動

自動的に WSL および、Guacamole を起動して、ポートフォワードの設定を行うようにする。

接続先ごとの設定

  RDP

最終更新時間:2023年02月03日 11時10分29秒 指摘や意見などあればSandBoxのBBSへ。