Guacamoleの1.4.0がリリースされたので、早速入れてみました!
Windows11にRDP接続してみたいと思います。
1. 環境
- OS: CentOS 7.9 (3.10.0-1160.49.1)
- Maven: 3.8.4
- Tomcat: 9.0.56
- Nginx: 1.20.1
- CPU: 4CPU(11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz)
- Mem: 4GB
2. 事前設定
OS最新化
yum update -y
reboot
パッケージインストール/firewalld変更/ipv6無効化
yum install -y git vim wget policycoreutils-python
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
vim /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
:wq
sysctl -p /etc/sysctl.d/disable_ipv6.conf
3. tomcat関連作業
最新のtomcatとmavenをダウンロードします。
cd /opt
wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
tar zxvf apache-maven-3.8.4-bin.tar.gz
mv apache-maven-3.8.4 maven
rm -rf apache-maven-3.8.4-bin.tar.gz
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
tar zxvf apache-tomcat-9.0.56.tar.gz
mv apache-tomcat-9.0.56 tomcat
rm -rf apache-tomcat-9.0.56.tar.gz
java(1.8.0)をインストールします。(なぜか11ではmvn packageが通りませんでした。。)
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
tomcatユーザを作成してダウンロードしたファイルをしかるべき場所に配置します。
groupadd -g 2000 tomcat
useradd -g 2000 -u 2000 -d /usr/share/tomcat -s /sbin/nologin tomcat
chown -R tomcat:tomcat /opt/tomcat
cd /opt/tomcat
cp -pr conf /etc/tomcat
chmod 750 /etc/tomcat
cp -pr bin /usr/libexec/tomcat
cp -pr logs /var/log/tomcat
mkdir /var/cache/tomcat
chown tomcat:tomcat /var/cache/tomcat
cp -pr work /var/cache/tomcat/work
cp -pr temp /var/cache/tomcat/temp
mkdir /var/lib/tomcat
chown tomcat:tomcat /var/lib/tomcat
cp -pr webapps /var/lib/tomcat/
cp -pr lib /usr/share/java/tomcat
cd /usr/share/tomcat
ln -s /usr/libexec/tomcat bin
ln -s /etc/tomcat conf
ln -s /var/log/tomcat logs
ln -s /usr/share/java/tomcat lib
ln -s /var/cache/tomcat/work work
ln -s /var/lib/tomcat/webapps webapps
ln -s /var/cache/tomcat/temp temp
mavenのPATHを通しておきます。
vim ~/.bash_profile
PATH=$PATH:$HOME/bin
↓
PATH=$PATH:$HOME/bin:/opt/maven/bin
:wq
source ~/.bash_profile
4. guacamole-server(guacd)インストール
RDP接続に利用するguacdをインストールします。
# パッケージインストール
yum -y groupinstall "Development Tools"
yum -y install epel-release
cd /opt
wget https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
rpm -ivh rpmfusion-free-release-7.noarch.rpm
# guacamoleに必要なパッケージインストール
yum install ffmpeg ffmpeg-devel openssl openssl-devel vim \
libxkbfile-devel libX11-devel libXrandr-devel libXi-devel libXrender-devel \
libXext-devel libXinerama-devel libXfixes-devel libXcursor-devel libXv-devel \
libXdamage-devel libXtst-devel cups-devel cairo-devel pcsc-lite-devel \
uuid-devel libxml2-devel zlib-devel krb5-devel libtiff-devel libtiff-devel \
libjpeg-turbo-devel.x86_64 giflib-devel.x86_64 wget cmake libusbx-devel.x86_64 \
pulseaudio-libs-devel docbook-style-xsl.noarch pango-devel.x86_64 libvorbis-devel.x86_64 \
libwebsockets-devel.x86_64 libssh2-devel.x86_64 libwebp libwebp-devel freerdp freerdp-devel
# guacamole-server インストール
wget https://github.com/apache/guacamole-server/archive/refs/tags/1.4.0.tar.gz
tar zxvf 1.4.0.tar.gz
mv guacamole-server-1.4.0 guacamole-server
rm -rf 1.4.0.tar.gz
cd guacamole-server
autoreconf -fi
./configure --with-systemd-dir=/usr/lib/systemd/system
make
make install
ldconfig
5. guacamole-clientインストール
guacamole-1.4.0.warファイル生成します。
cd ..
wget https://github.com/apache/guacamole-client/archive/refs/tags/1.4.0.tar.gz
tar zxvf 1.4.0.tar.gz
mv guacamole-client-1.4.0 guacamole-client
rm -rf 1.4.0.tar.gz
cd guacamole-client
mvn package
cd ..
tomcatのconfファイルと起動スクリプトを作成します。
vim /etc/tomcat/tomcat.conf
TOMCAT_CFG_LOADED="1"
TOMCAT_BASE="/var/lib/tomcats"
JAVA_HOME="/usr/lib/jvm/jre"
CATALINA_HOME="/usr/share/tomcat"
CATALINA_TMPDIR="/var/cache/tomcat/temp"
:wq
vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 9
After=network.target
[Service]
User=tomcat
Group=tomcat
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/tomcat/tomcat.conf
ExecStart=/usr/libexec/tomcat/startup.sh
ExecStop=/usr/libexec/tomcat/shutdown.sh
[Install]
WantedBy=multi-user.target
:wq
chmod 755 /etc/systemd/system/tomcat.service
systemctl enable tomcat
6. Nginxインストール
Nginxをパッケージからインストールします。
yum -y install nginx
7. Mariadbインストール
ワカモレで利用するDBとしてMariaDBをインストールします。
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
yum -y install MariaDB-server
8. mysql-connecotr-javaダウンロードおよび各種設定
ワカモレ~DB間で利用するコネクターをダウンロードします。
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.23.tar.gz
tar zxvf mysql-connector-java-8.0.23.tar.gz
rm -rf mysql-connector-java-8.0.23.tar.gz
cd /opt/mysql-connector-java-8.0.23
Guacamole関連ファイルを格納するディレクトリを作成しファイルをコピーします。
mkdir -p /var/lib/guacamole/{lib,extensions}
cp mysql-connector-java-8.0.23.jar /var/lib/guacamole/lib/
cp /opt/guacamole-client/guacamole/target/guacamole-1.4.0.war /var/lib/guacamole/guacamole-1.4.0.war
cp /opt/guacamole-client/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/target/guacamole-auth-jdbc-mysql-1.4.0.jar /var/lib/guacamole/extensions/
9. SeLinux/権限変更
SeLinuxおよび権限を変更します。
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_relay 1
setsebool -P httpd_can_network_connect_db 1
semanage fcontext -a -t tomcat_exec_t /var/lib/guacamole/guacamole-1.4.0.war
restorecon -v /var/lib/guacamole/guacamole-1.4.0.war
semanage fcontext -a -t tomcat_exec_t /var/lib/guacamole/lib/mysql-connector-java-8.0.23.jar
restorecon -v /var/lib/guacamole/lib/mysql-connector-java-8.0.23.jar
semanage fcontext -a -t tomcat_exec_t /var/lib/guacamole/extensions/guacamole-auth-jdbc-mysql-1.4.0.jar
restorecon -v /var/lib/guacamole/extensions/guacamole-auth-jdbc-mysql-1.4.0.jar
# 権限変更
chown tomcat:tomcat /var/lib/guacamole/guacamole-1.4.0.war
chown -R tomcat:tomcat /var/lib/guacamole/extensions
chown -R tomcat:tomcat /var/lib/guacamole/lib
10. ワカモレ用設定
# ディレクトリ作成 & リンク作成
mkdir /etc/guacamole
cd /etc/guacamole
ln -s /var/lib/guacamole/lib lib
ln -s /var/lib/guacamole/extensions extensions
# warファイル配置
cd /usr/share/tomcat/webapps/
ln -s /var/lib/guacamole/guacamole-1.4.0.war guacamole.war
rm -rf ROOT docs examples manager host-manager
# MariaDB起動
systemctl enable mariadb
systemctl start mariadb
systemctl status mariadb
# パスワード設定
mysql -u root
set password for root@localhost = password('XXXXXXXX');
# DB作成
create database guacamole;
grant select,insert,update,delete on guacamole.* to 'guacamole'@'localhost' identified by 'abcd1234';
flush privileges;
# sql実行
cd /opt/guacamole-client/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql
cat schema/*.sql | mysql -u root -p guacamole
# guacamole.propertiesファイル作成
vi /etc/guacamole/guacamole.properties
guacd-hostname: localhost
guacd-port: 4822
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole
mysql-username: guacamole
mysql-password: abcd1234
:wq
chown tomcat:tomcat /etc/guacamole/guacamole.properties
11. ワカモレ起動
systemctl start tomcat
systemctl start guacd
systemctl enable guacd
12. Nginx設定変更
vim /etc/nginx/nginx.conf
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8080/guacamole/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
:wq
nginx -t
systemctl restart nginx
13. Nginx 自己証明書設定
Chromeなどでマイクを利用する場合はhttpだとブロックされてしまうので、こちらは必要に応じて。
mkdir /etc/nginx/ssl
openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/nginx.pem -keyout /etc/nginx/ssl/nginx.key
chown nginx:nginx -R /etc/nginx/ssl/
chmod 600 /etc/nginx/ssl/*
chmod 700 /etc/nginx/ssl
vim /etc/nginx/nginx.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
root /usr/share/nginx/html;
ssl_certificate /etc/nginx/ssl/nginx.pem;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8080/guacamole/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
:wq
14. ワカモレアクセス
ブラウザからワカモレにアクセスします。
https://ipaddress/
管理ユーザのguacadminでログインします。(パスワードもguacadmin)
接続設定の項目などは増えていましたが、UIはあまり変更なしですね。下記画面はすでにWindows11に接続設定を保存した状態です。
なぜかWindows11ではNLAでの認証が成功しなかったため、TLSに変更しています。
15. その他
体感でしかありませんが、1.2.0まではZoomなど音声のやり取りは実用に耐えがたいものがありましたが、かなり改善されています。Zoomでの利用でしたが全くストレスを感じませんでした。下記リリースノートに修正点の記載がある通りといった感じですかね。
※ Major fixes to RDP audio input support
また、1.2.0でもありましたが初回アクセス時に/usr/sbinへの書き込み権がないとRDP接続ができないため、一時的書き込み権限を付与する必要があります。※2回目以降は必要になりませんので、もとに戻しておくことをお忘れなく。
1/4 追記
年末に騒ぎになったLog4jですが、ワカモレはMybatis3を利用しており、そのなかでLog4jを利用していますが2.17.1が利用されるよう修正さているようです。
guacamole-client-1.4.0/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
mybatis-3/pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
<optional>true</optional>
</dependency>