オンプレミス

独自の HopToDesk ネットワークをオンプレミスまたはクラウドで運用できます。

独自のネットワークを構築

独自の HopToDesk ネットワークを構築します。Ubuntu 18 - 24 と Windows に対応。

OS:
Linux
LinuxWindows
この構成では、LAN 内のデバイスは直接接続し、外部との接続には HopToDesk の既定のリレーサーバーを使用します。
独自の TURN サーバーを設定すると、リレー接続を完全に制御できます。すべての項目が必須です。

セットアップ手順

HopToDesk のセルフホスティング

ステップバイステップのセットアップガイド

インストーラーの動作、確認方法、そしてデバイスを自分のネットワークに接続する方法。

仕組み

HopToDesk は 2 種類のサーバーを使います。シグナルサーバーはデバイス同士が互いを見つけてセッションを確立するのを助けます。TURN リレーは、2 台のデバイス間で直接接続できない場合にのみセッションのトラフィックを中継します。

セッションはエンドツーエンドで暗号化されているため、どちらのサーバーも画面、ファイル、チャットを読むことはできません。シグナルサーバーが見えるのはデバイス ID と接続要求だけです。

このページのインストーラーはシグナルサーバーをセットアップします。リレーのトラフィックは既定では HopToDesk のリレーを通り、指定すれば独自の TURN サーバーを通ります。

ダッシュボードはホスト型サービスのままです。セルフホストのネットワーク上のデバイスも管理のためにダッシュボードへリンクでき、ダッシュボードからネットワーク設定を配信できます。

始める前に

  • Ubuntu 18.04 から 24.04 を実行するサーバー、または Windows サーバー。
  • そのサーバーの root または sudo アクセス。
  • すべてのデバイスから到達できる IP アドレスまたはホスト名。LAN の外に出ないネットワークであれば、プライベートアドレスで十分です。
  • デバイス向けにサーバーのファイアウォールで TCP ポート 80 を開いていること。
  • 独自のリレーを使いたい場合: TURN サーバーのホスト、ポート、ユーザー名、パスワード。

手順 1: Linux にシグナルサーバーをインストールする

  1. root、または sudo 権限を持つユーザーとしてサーバーにログインします。
  2. このページの上部で LAN + Default Relay または Custom TURN Server を選びます。インストールコマンドは選択によって変わります。
  3. Copy をクリックし、コマンドをターミナルに貼り付けて Enter を押します。
  4. スクリプトが終わるまで待ちます。新しいサーバーではパッケージのインストールに数分かかることがあります。
  5. 最後にスクリプトは HopSignal Setup Complete と表示し、続けてサーバーのアドレスと、すぐに使えるネットワーク設定ブロックを表示します。この出力は手順 3 で必要になるので保存しておいてください。
cd /home && curl -o hsinstall.sh -sL https://www.hoptodesk.com/hs/hsinstall && sh hsinstall.sh

独自の TURN サーバーを使う場合は、コマンドの末尾に 4 つの値をこの順序で追加します: ホスト、ポート、ユーザー名、パスワード。

sh hsinstall.sh turn.example.com 443 myuser mypassword

スクリプトの動作

  • 必要なビルドツールと OpenSSL ライブラリを apt でインストールします。
  • シグナルサーバーのバイナリを /home/hopsignal フォルダーにダウンロードします。
  • hopsignal という名前の systemd サービスを作成し、起動のたびに開始します。
  • サービスが応答しなくなった場合に再起動し、ログが 100 MB を超えたらローテーションする cron のウォッチドッグを追加します。
  • ufw が有効な場合、ufw で TCP ポート 80 を開きます。

Windows での手順 1: シグナルサーバーを起動する

  1. このページ上部の OS スイッチを Windows に切り替え、Download をクリックします。hopsignal.exe という 1 つのファイルが得られます。
  2. C:\hopsignal のようなフォルダーを作成し、hopsignal.exe をその中に移動します。
  3. 同じフォルダーに fedlist.txt という名前の空のテキストファイルを作成します。
  4. Windows 版は PEM 形式の TLS 証明書とその秘密鍵も必要とします。自己署名を含め、どのペアでも構いません。同じフォルダーに cert.pem と key.pem として保存してください。
  5. 管理者としてコマンドプロンプトを開き、サーバーを起動します。
cd C:\hopsignal
hopsignal.exe --ADDR 0.0.0.0:80 --WSS_ADDR 0.0.0.0:443 --CERT cert.pem --KEY key.pem --FEDLIST fedlist.txt --FEDADDR 127.0.0.1:82 --FEDPWD 123456789 --LOGFILE hs.log

OpenSSL がある場合、次のコマンドで自己署名証明書のペアを作成できます:

openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650 -subj "/CN=hopsignal"

Windows ファイアウォールでポートを許可します:

netsh advfirewall firewall add rule name="HopSignal" dir=in action=allow protocol=TCP localport=80

再起動後もサーバーを動かし続けるには、SYSTEM アカウントで起動時に開始するスケジュールタスクとして登録します:

schtasks /Create /TN HopSignal /SC ONSTART /RU SYSTEM /TR "C:\hopsignal\hopsignal.exe --ADDR 0.0.0.0:80 --WSS_ADDR 0.0.0.0:443 --CERT C:\hopsignal\cert.pem --KEY C:\hopsignal\key.pem --FEDLIST C:\hopsignal\fedlist.txt --FEDADDR 127.0.0.1:82 --FEDPWD 123456789 --LOGFILE C:\hopsignal\hs.log"
schtasks /Run /TN HopSignal

手順 2: サーバーが動作していることを確認する

Linux では、サービスとログを確認します:

sudo systemctl status hopsignal
tail /home/hopsignal/hs.log

Windows では、ポートが待ち受けていることを確認します:

netstat -an | find ":80 "

任意のコンピューターから WebSocket ポートをテストします。SERVER_IP をサーバーのアドレスに置き換えてください。正常なサーバーは HTTP/1.1 101 Switching Protocols と応答します。

curl -i -N -m 5 -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" http://SERVER_IP:80/

手順 3: デバイスをサーバーに向ける

各デバイスは小さな JSON ドキュメントからネットワーク設定を読み取ります。これは手順 1 の最後にインストーラーが表示したブロックです。SERVER_IP をサーバーのアドレスに置き換え、独自のリレーを運用する場合は TURN ブロックを記入してください。

{
  "turnservers": [
    {
      "protocol": "turn",
      "host": "turn.hoptodesk.com",
      "port": "443",
      "username": "hoptodesk",
      "password": "hoptodesk1234"
    }
  ],
  "rendezvous": {
    "host": "SERVER_IP",
    "port": "80"
  },
  "winversion": "1.0.0",
  "macversion": "1.0.0",
  "linuxversion": "1.0.0",
  "none": "none"
}

rendezvous ブロックがシグナルサーバーです。Cloudflare Worker や AWS 上の展開など、サーバーに TLS で接続する場合は rendezvous の代わりに rendezvousssl キーを使います。turnservers リストには 1 つ以上のリレーを記載します。通常の接続ではプロトコルを turn に、TLS 接続では turn-tls に設定します。バージョンのキーはそのままにしてください。

このドキュメントをデバイスに渡す方法は 3 つあります。環境に合うものを選んでください。

方法 A: 各デバイスに api.json ファイルを置く

このドキュメントを api.json という名前のファイルとして HopToDesk の設定フォルダーに保存し、HopToDesk を再起動します。アプリは起動時にこのファイルを読み込み、以後 HopToDesk の API には接続しません。

プラットフォームパス
Windows、すべてのユーザーとサービスC:\ProgramData\HopToDesk\config\api.json
Windows、現在のユーザーのみ%APPDATA%\HopToDesk\config\api.json
macOS~/Library/Preferences/com.hoptodesk.HopToDesk/api.json
Linux~/.config/hoptodesk/api.json

Linux ではバックグラウンドサービスが root として動作し /root 配下のファイルを読み込みますが、あなたが開くアプリは自分のホームフォルダーのファイルを読み込みます。両方の場所にコピーを置いてください。

方法 B: ファイルを URL で公開し、アプリで選択する

  1. デバイスから到達できる任意の Web サーバーに api.json をアップロードします。HTTPS を推奨します。
  2. HopToDesk で歯車アイコンをクリックして設定を開きます。
  3. Network で Choose Network をクリックします。
  4. Custom Network Settings を選択し、ファイルの URL を貼り付けて確定します。
  5. HopToDesk はファイルをダウンロードし、有効な rendezvous エントリと turnservers リストが含まれているか確認してから、あなたのサーバー経由で再接続します。

公開ネットワークに戻すには、Choose Network をもう一度開いて HopToDesk Network を選択します。

方法 C: ダッシュボードから設定を配信する

デバイスが HopToDesk ダッシュボードにリンクされている場合、アカウント全体に対してネットワークを一度で設定できます。ダッシュボードから作成したカスタムクライアントには、この設定があらかじめ組み込まれています。

  1. オーナーまたは管理者としてダッシュボードにサインインし、設定を開きます。
  2. Network Settings で Custom Network を選択します。
  3. シグナルサーバーのホスト、ポート、プロトコルとして WS を入力します。独自のリレーを運用する場合は TURN サーバーを追加し、HopToDesk のリレーを使い続ける場合は空欄のままにします。
  4. Save Network Settings をクリックします。リンクされた各デバイスは新しい設定を受け取り、再インストールなしで適用します。

独自の TURN リレーを運用する (任意)

直接接続できないセッションは、既定では HopToDesk のリレーを経由します。すべてのトラフィックを自社のインフラ内にとどめるには、TURN サーバーを運用します。標準的な TURN サーバーならどれでも使え、Linux では coturn が一般的な選択肢です。

  1. リレーサーバーに coturn をインストールします。
sudo apt install coturn
  1. /etc/turnserver.conf を編集し、少なくとも以下の値を設定します。realm、認証情報、パブリック IP は自分のものに置き換えてください。
listening-port=443
fingerprint
lt-cred-mech
user=myuser:mypassword
realm=example.com
external-ip=PUBLIC_IP
  1. /etc/default/coturn に TURNSERVER_ENABLED の行がある場合は、コメントを外します。その後サービスを有効化して開始します。
sudo systemctl enable --now coturn
sudo systemctl restart coturn
  1. リレーのファイアウォールで、待ち受けポートを TCP と UDP の両方で開き、さらに UDP リレー範囲 49152 から 65535 を開きます。
  2. リレーをデバイスに配布します: 4 つの TURN 値を付けてインストーラーを再実行するか、ネットワーク設定の turnservers ブロックを編集します。リレーが TLS を終端する場合はプロトコルに turn-tls を使ってください。

Linux でサーバーを管理する

sudo systemctl status hopsignal
sudo systemctl restart hopsignal
sudo systemctl stop hopsignal
tail -f /home/hopsignal/hs.log

サーバーを更新するには、サービスを停止してインストールコマンドを再実行します。最新のバイナリをダウンロードし、サービスを書き直します。

サービスと cron エントリごとサーバーを削除するには:

cd /home && curl -o hsinstall.sh -sL https://www.hoptodesk.com/hs/hsinstall && sh hsinstall.sh remove

トラブルシューティング

  • ID が Generating のままになる、またはアプリがネットワークへの接続を試み続ける場合: デバイスがシグナルサーバーに到達できていません。サービスが動作しているか、ポート 80 が開いているか、ネットワーク設定のアドレスが正しいかを確認してください。
  • デバイスが LAN 内では接続できるが外部からは接続できない場合: リレーに到達できていません。既定のリレーを使う場合、デバイスから turn.hoptodesk.com のポート 443 への送信アクセスが必要です。独自のリレーを使う場合は、そのファイアウォール規則と認証情報を確認してください。
  • アプリが api.json を無視する場合: ファイルが末尾のカンマのない有効な JSON であること、正しいフォルダーにあること、HopToDesk を再起動したことを確認してください。ファイルが読み込まれると、アプリのログに Loaded local api.json という行が記録されます。
  • ポート 82 は複数の自前シグナルサーバーを連携させるためのフェデレーションポートです。インターネットに対しては閉じておいてください。
  • シグナルサーバーはセッションデータを保存しません。何かが止まっているように見える場合はサービスを再起動してください。デバイスは約 1 分以内に自動的に再接続します。

サードパーティホスティング

マネージドプラットフォームをご希望ですか?HopToDesk ネットワークを Cloudflare または AWS に展開できます。

Cloudflare 上の HopToDesk

  1. Cloudflare アカウントにログインし、使用したいドメインゾーンを開きます。
  2. ファイル名 index.js で新しい Worker を作成します。
  3. Worker のコードを index.js にコピーし、保存してデプロイします。 Worker のコード
  4. Cloudflare Worker の URL が準備できました。"rendezvousssl" の値として使用します。 api.json カスタム API

AWS 上の HopToDesk

  1. AWS アカウントをお持ちでない場合は登録してください。
  2. AWS Marketplace の HopToDesk のページでサブスクライブします。 AWS Marketplace
  3. Amazon がサービスをプロビジョニングしたら、必要に応じて設定し、インスタンスを起動します。
  4. HopToDesk ネットワークが AWS 上に展開されました。その https URL を "rendezvousssl" の値に設定します。 api.json カスタム API

注: この Worker は Durable Objects を利用するため、月額 5 ドルからの Cloudflare 有料プランが必要です。 Durable Objects の料金

AWS Marketplace および AWS Marketplace ロゴは、Amazon.com, Inc. またはその関連会社の商標です。
Cloudflare、Cloudflare ロゴ、および Cloudflare Workers は、米国およびその他の法域における Cloudflare, Inc. の商標または登録商標です。