AI

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 GuacamoleRustDeskXrdp
クライアントアプリ不要✅(ブラウザのみ)❌(専用クライアント)❌(RDPクライアント)
プロトコル対応RDP/VNC/SSH独自プロトコルRDP
スマホ対応✅(iOS/Android)
P2P接続
LDAP/OIDC✅(Pro)
GitHub Stars4k+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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。