OSSリモートデスクトップ比較:Apache Guacamole vs RustDesk vs Xrdp でVPN不要のリモートアクセスを構築する
オープンソースラボ編集部 ・ 2026年6月13日
OSSリモートデスクトップ比較:Apache Guacamole vs RustDesk vs Xrdp でVPN不要のリモートアクセスを構築する
TeamViewer(月4,900円〜)・Zoom Remote Control(有料プラン)・AnyDesk(月3,960円〜)に対して、Apache Guacamole(ブラウザベースのOSSゲートウェイ)・RustDesk(Rust製のAnyDesk代替)・Xrdp(LinuxへのRDP接続)はSaaS費用なしでリモートアクセス環境を構築できます。
OSSリモートデスクトップを選ぶ理由
- コスト: TeamViewer Business(月24,000円〜/5端末)をセルフホストで0円に
- VPN不要: Guacamoleはブラウザ(HTML5)経由でRDP/VNC/SSHを提供。VPNクライアント不要
- セキュリティ: 通信ログ・接続記録を社内で完全管理。外部SaaSにセッション情報が流れない
- 大規模展開: RustDesk ServerをセルフホストしてIDaaS(LDAP/OIDC)と統合できる
主要ツールの概要
Apache Guacamole
Apache Software Foundationが開発するJava/TypeScript製のOSSリモートデスクトップゲートウェイです。GitHubスター4k+。ブラウザだけでRDP・VNC・SSHに接続できるため、クライアント端末へのソフトウェアインストールが不要です。Kubernetesや踏み台サーバーへのゼロトラストアクセスゲートウェイとして広く使われています。
# docker-compose.yml - Apache Guacamole セルフホスト
version: '3.8'
services:
guacd:
image: guacamole/guacd:1.5.5
restart: unless-stopped
networks:
- guac-net
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: guacamole_db
POSTGRES_USER: guacamole_user
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql # 初期スキーマ
networks:
- guac-net
guacamole:
image: guacamole/guacamole:1.5.5
restart: unless-stopped
ports:
- "8080:8080"
environment:
GUACD_HOSTNAME: guacd
POSTGRESQL_HOSTNAME: postgres
POSTGRESQL_DATABASE: guacamole_db
POSTGRESQL_USERNAME: guacamole_user
POSTGRESQL_PASSWORD: ${POSTGRES_PASSWORD}
# OIDC認証(Keycloak/Oktaと連携)
OPENID_AUTHORIZATION_ENDPOINT: https://auth.yourcompany.com/realms/main/protocol/openid-connect/auth
OPENID_JWKS_ENDPOINT: https://auth.yourcompany.com/realms/main/protocol/openid-connect/certs
OPENID_ISSUER: https://auth.yourcompany.com/realms/main
OPENID_CLIENT_ID: guacamole
OPENID_REDIRECT_URI: https://remote.yourcompany.com/guacamole
depends_on:
- guacd
- postgres
networks:
- guac-net
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt:/etc/letsencrypt
depends_on:
- guacamole
networks:
- guac-net
networks:
guac-net:
volumes:
postgres_data:
# Guacamole DBの初期スキーマを生成
docker run --rm guacamole/guacamole:1.5.5 /opt/guacamole/bin/initdb.sh --postgresql > initdb.sql
# 管理UIにアクセス(デフォルト認証: guacadmin / guacadmin)
# https://remote.yourcompany.com/guacamole
# 初回ログイン後に必ずパスワードを変更すること
# RDPターゲット(Windows Server)を追加する手順
# 管理画面 → Connections → New Connection
# Protocol: RDP
# Hostname: 192.168.1.100
# Port: 3389
# Username/Password: Windowsのローカル管理者アカウント
# Security: NLA(ネットワークレベル認証を推奨)
# Guacamole REST APIで接続を自動作成(Python)
import requests
import base64
GUAC_URL = 'https://remote.yourcompany.com/guacamole'
def get_auth_token(username: str, password: str) -> str:
resp = requests.post(
f'{GUAC_URL}/api/tokens',
data={'username': username, 'password': password},
)
resp.raise_for_status()
return resp.json()['authToken']
def create_rdp_connection(token: str, name: str, host: str, username: str, password: str) -> str:
'''RDP接続を作成してconnection_idを返す'''
payload = {
'name': name,
'protocol': 'rdp',
'parameters': {
'hostname': host,
'port': '3389',
'username': username,
'password': password,
'security': 'nla',
'ignore-cert': 'true',
'enable-wallpaper': 'false',
'width': '1920',
'height': '1080',
},
'attributes': {
'max-connections': '2',
'max-connections-per-user': '1',
},
}
resp = requests.post(
f'{GUAC_URL}/api/session/data/postgresql/connections',
headers={'Guacamole-Token': token, 'Content-Type': 'application/json'},
json=payload,
)
resp.raise_for_status()
return resp.json()['identifier']
# 使用例: 新しいWindows Serverを接続一覧に追加
token = get_auth_token('guacadmin', 'new-admin-password')
conn_id = create_rdp_connection(
token=token,
name='Windows-Dev-01',
host='192.168.10.50',
username='Administrator',
password='server-password',
)
print(f'接続作成完了: ID={conn_id}')
RustDesk
2021年公開、Rust製のOSSリモートデスクトップです。GitHubスター83k+。AnyDeskのOSS代替で、Windows・macOS・Linux・Android・iOSで動作するクロスプラットフォームクライアントを提供。ID/パスワード方式でP2P接続ができ、セルフホストサーバーで企業内専用環境を構築できます。
# RustDesk Server をDockerで構築
docker run --rm -d --name rustdesk-server -p 21115:21115 -p 21116:21116/tcp -p 21116:21116/udp -p 21117:21117 -p 21118:21118 -p 21119:21119 -v ./data:/root --net=host rustdesk/rustdesk-server-s6:latest
# または docker-compose で
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
rustdesk-hbbs: # IDサーバー
image: rustdesk/rustdesk-server:latest
command: hbbs
restart: unless-stopped
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
volumes:
- ./data:/root
depends_on:
- rustdesk-hbbr
rustdesk-hbbr: # リレーサーバー
image: rustdesk/rustdesk-server:latest
command: hbbr
restart: unless-stopped
ports:
- "21117:21117"
volumes:
- ./data:/root
EOF
docker compose up -d
# クライアント設定(カスタムサーバーを指定)
# RustDesk クライアントアプリ → Settings → Network
# ID Server: your-server.com:21116
# Relay Server: your-server.com:21117
# API Server: https://your-server.com
# Key: (サーバー起動後に data/id_ed25519.pub の内容を貼り付け)
機能比較表
| 比較項目 | Apache Guacamole | RustDesk | Xrdp |
|---|---|---|---|
| クライアントアプリ不要 | ✅(ブラウザのみ) | ❌(専用クライアント) | ❌(RDPクライアント) |
| プロトコル対応 | RDP/VNC/SSH | 独自プロトコル | RDP |
| スマホ対応 | ✅ | ✅(iOS/Android) | △ |
| P2P接続 | ❌ | ✅ | ❌ |
| LDAP/OIDC | ✅ | ✅(Pro) | ❌ |
| GitHub Stars | 4k+ | 83k+ | 1k+ |
OSSリモートデスクトップはDevOpsカテゴリ/categories/devopsのGitLab CI・Kubernetesと組み合わせてCI/CDパイプラインのリモート監視・デバッグ環境として活用できます。セキュリティカテゴリ/categories/securityのVault・WireGuardとGuacamoleを組み合わせてゼロトラストアクセスゲートウェイを構築する構成も一般的です。
FAQ
Q. TeamViewerから Apache Guacamoleへの移行手順は?
A. ①既存のリモート対象マシンにRDPまたはVNCを有効化(Windows: [システムのプロパティ]→[リモート]→[リモートデスクトップを許可]。Linux/Ubuntu: apt install xrdp && systemctl enable xrdp)②GuacamoleサーバーをDocker Composeで構築(上記手順参照)③Guacamole管理画面で各マシンへの接続を作成④ユーザーをLDAPまたはGuacamoleのローカルユーザーとして追加⑤既存TeamViewerクライアントを徐々にブラウザ(Guacamole URL)に切り替え。注意: Guacamoleは「パス越え」(NAT環境での直接P2P)は苦手で、通常はGuacamoleサーバーが対象マシンにネットワーク到達できる必要があります。社外からのアクセスにはGuacamoleをDMZに置くかVPNと組み合わせます。
Q. RustDesk セルフホストサーバーの通信はどのように暗号化されますか?
A. RustDesk はEd25519公開鍵暗号(鍵交換)+ AES-256-GCM(セッション暗号化)を使用します。①サーバー起動時にid_ed25519(秘密鍵)とid_ed25519.pub(公開鍵)を生成②クライアントはサーバーの公開鍵でセッションを認証(中間者攻撃を防止)③P2P接続時はピア間で直接暗号化チャンネルを確立(サーバーはトラフィックを見られない)④リレー経由の場合もコンテンツは暗号化されてサーバーは復号不能。クライアントの「Key」フィールドにサーバーの公開鍵を設定することで、なりすましサーバーへの接続を防止できます。
Q. Guacamoleでセッション録画(監査ログ)を有効化するには?
A. Guacamole 1.1.0以降はセッション録画機能が標準搭載です。設定方法: Guacamoleの接続設定 → 「Screen Recording」セクション → Recording Path に録画ディレクトリを指定(例: /var/lib/guacamole/recordings/%{GUAC_USERNAME}/%{GUAC_DATE})。録画形式: Guacamoleの独自バイナリ形式(.guac)で、後からguacencコマンドでMP4に変換できます(guacenc -f video/mp4 session.guac)。コンプライアンス用途(SOX・PCI-DSS・ISO27001)でのアクセス監査にも使えます。
Q. XrdpでUbuntu 24.04にWindowsのRDPクライアントから接続するには?
A. ①Xrdpのインストール: sudo apt update && sudo apt install xrdp && sudo systemctl enable xrdp --now②ファイアウォールでRDPポートを開放: sudo ufw allow 3389/tcp③Ubuntuのデスクトップ環境を確認(Gnome/XFCE): XFCEはRDPで安定動作しやすい(sudo apt install xfce4 xfce4-goodies)④Windows側: スタートメニュー→「リモートデスクトップ接続」→UbuntuのIPアドレスを入力→ログイン。注意: Gnome 42以降はRDP経由のセッションで黒画面になる場合があります。.xsessionファイルにstartxfce4と書いてXFCEを指定することで解決します。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| ブラウザのみでRDP/VNC/SSH・社内ゲートウェイ | Apache Guacamole |
| AnyDesk代替・個人〜中小規模・クロスプラットフォーム | RustDesk |
| Linux(Ubuntu)へのWindows RDPクライアント接続 | Xrdp |