guacamoleで作るリモートゲートウェイ

JPOUG Advent Calendar 2019

Oracle Cloud Infrastructure Advent Calendar 2019

Oracle Cloud always free Advent Calendar 2019

の5日目です。


今日はリモートゲートウェイ用のソフトウェア(apache guacamole)をalways freeのComputeインスタンスに導入しようと思います。

guacamoleはWEBベースのソフトウェアなので、今回はポート58443(SSL)で公開しようと思います。guacamoleの構築が終わったら、起動済みのOracle Cloud上のWindowsインスタンス★に接続します。

 

★always freeではないので、あくまで動作確認用です。


まずは、Oracle Cloud側のセキュリティポートの設定です。

〇セキュリティリストの追加
oracle cloudコンソールから
ネットワーキング-仮想クラウド・ネットワーク-VirtualCloudNetwork-XXXXXXXを選択
パブリック・パブリックサブネットをクリック
Default Security List for VirtualCloudNetwork-XXXXXXXXXをクリック

イングレス・ルールに以下を追加
ソース 0.0.0.0/0
IPプロトコル TCP
宛先ポート範囲 58443


イングレス・ルールに以下を追加
ソース 10.0.0.0/24
IPプロトコル TCP

 

次にOracle Linux側でも同様にポート58443 を公開します。

#firewalld設定ファイルのコピー
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/nginx-58443.xml
sudo vi /etc/firewalld/services/nginx-58443.xml

#設定ファイルの編集
#<port protocol="tcp" port="22"/>
<port protocol="tcp" port="58443"/>

sudo firewall-cmd --permanent --add-service=nginx-58443
#設定のリロード
sudo firewall-cmd --reload

#変更の状態確認
sudo firewall-cmd --list-all

#servicesにnginx-58443があればOK

 

公開ポートの設定が終わったら、guacamoleを導入します。
guacamoleはdocker上で動作させることができます。
SSL化するにあたり、nginxをguacamoleのproxyサーバとして動作させます。
(guacamoleのproxyとして動作するようnginxのdockerイメージを用意しました)

 

最初にDB初期化用のsqlファイルを出力します。

sudo docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

次にdocker-compose用のymlファイルを作成します。

cat <<EOF > docker-compose.yml
version: '3'
services:
nginx:
image: s4ragent/nginx:latest
container_name: nginx
hostname: nginx
ports:
- '58443:443'
guacd:
image: guacamole/guacd:latest
container_name: guacd
hostname: guacd
expose:
- '4822'
guacamole:
image: guacamole/guacamole:latest
container_name: guacamole
hostname: guacamole
ports:
- '8080:8080'
environment:
MYSQL_HOSTNAME: 'mysql'
GUACD_HOSTNAME: 'guacd'
MYSQL_DATABASE: 'guachamole'
MYSQL_USER: 'guachamole'
MYSQL_PASSWORD: 'guachamole'
mysql:
image: mysql:5.7
container_name: mysql
hostname: mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: 'guachamole'
MYSQL_USER: 'guachamole'
MYSQL_PASSWORD: 'guachamole'
volumes:
- './initdb.sql:/docker-entrypoint-initdb.d/initdb.sql:z'
EOF

docker-compose.ymlファイルが用意できたら、コンテナを起動します。

sudo /usr/local/bin/docker-compose up -d
Creating network "opc_default" with the default driver
Creating mysql ... done
Creating nginx ... done
Creating guacd ... done
Creating guacamole ... done

 

作成が完了したら以下のURLにアクセスします。
https://computeインスタンスのIP:58443/guacamole/

f:id:KNOPP:20191115235516p:plain

gucamoleログイン画面

初期パスワードはguacadmin/guacadminです。

 

Settings-> Preferences でまずはパスワードを変更しましょう。

f:id:KNOPP:20191115235611p:plain

パスワード変更

 

パスワードを変更したらWindowsインスタンスに接続する設定を作成します。

Settings-> connectionから作成します。

f:id:KNOPP:20191115235953p:plain

RDP設定その1

f:id:KNOPP:20191116000019p:plain

RDP設定その2

 

設定が終わったらHomeから接続します。

 

f:id:KNOPP:20191116000106p:plain

Home画面

画面上の10.0.0.6をクリックするとWindowsインスタンスへの接続が始まります。

 

f:id:KNOPP:20191116000210p:plain

Winsowsその1

f:id:KNOPP:20191116000236p:plain

Winosws Desktop

 

今回はRDP接続を紹介しましたが、SSHVNC,TELNETなども使用できます。

非常に便利なので、ぜひ使ってみてください。

 

<参考文献>

ブラウザ経由で Windows Server にリモート接続ができる「Apache Guacamole」を Docker Compose で起動する - kakakakakku blog

docker-composeで作成されるものの名前を明示的に指定する方法 - Qiita