本地部署
在本地或云端自托管您自己的 HopToDesk 网络。
搭建您自己的网络
在 64 位 Linux 或 Windows 服务器上搭建您自己的 HopToDesk 网络。
最快的方式:在仪表板中打开设置、Network Settings、Set up a private network。您会得到现成的 AWS 启动链接或 Docker 命令,新服务器会自动向您的仪表板报告。 打开仪表板
安装教程
分步设置指南
安装程序做了什么、如何检查,以及如何把设备接入您自己的网络。
工作原理
HopToDesk 使用两种服务器。信令服务器帮助设备互相发现并建立会话。TURN 中继只在两台设备无法直接连接时才转发会话流量。
会话是端到端加密的,因此任何一台服务器都无法查看您的屏幕、文件或聊天内容。信令服务器只能看到设备 ID 和连接请求。
本页的安装程序负责部署信令服务器。中继流量默认经由 HopToDesk 中继,如果您提供了自己的 TURN 服务器,则经由它转发。
自托管网络中的设备仍可关联到仪表板进行管理,仪表板也可以把网络设置推送给它们。
还需要把仪表板部署在您自己的服务器上? 与我们交流
开始之前
- 一台带 systemd 的 64 位 Linux 服务器(例如 Ubuntu 或 Debian),或一台 Windows 服务器。
- 该服务器的 root 或 sudo 权限。
- 一个所有设备都能访问的 IP 地址或主机名。如果网络不会离开您的局域网,使用内网地址即可。
- 服务器防火墙上已为您的设备放行 TCP 80 端口。
- 如果您想使用自己的中继:TURN 服务器的主机、端口、用户名和密码。
第 1 步:在 Linux 上安装信令服务器
- 以 root 或具有 sudo 权限的用户登录服务器。
- 在本页顶部选择 LAN + Default Relay 或 Custom TURN Server。安装命令会随您的选择而变化。
- 点击 Copy,把命令粘贴到终端并按回车。
- 等待脚本运行完成。只需不到一分钟。
- 脚本结束时会输出 HopSignal Setup Complete,随后是您的服务器地址和一段可直接使用的网络设置。请保留这段输出,第 3 步会用到。
curl -o hsinstall.sh -sL https://www.hoptodesk.com/hs/hsinstall && sudo sh hsinstall.sh
使用自己的 TURN 服务器时,按以下顺序把四个值追加到命令末尾:主机、端口、用户名、密码。
sudo sh hsinstall.sh turn.example.com 443 myuser mypassword
脚本做了什么
- 按您的处理器(Intel、AMD 或 ARM)把信令服务器下载到 /home/hopsignal 文件夹。
- 将下载的文件与已发布的 SHA256SUMS 列表核对,不匹配时停止且不做任何更改。
- 创建一个名为 hopsignal 的 systemd 服务,并在每次开机时启动它。
- 使用推荐的连接限制和随机的联合密码启动服务器,该密码保存在 /home/hopsignal/hopsignal.env 中,仅 root 可访问。
- 添加一个 cron 看门狗:服务停止响应时自动重启,日志超过 100 MB 时自动轮转。
- 当 ufw 启用时,在 ufw 中放行 TCP 80 端口。
Windows 上的第 1 步:运行信令服务器
- 把本页顶部的 OS 开关切换到 Windows 并点击 Download。您会得到一个名为 hopsignal.exe 的文件。
- 创建一个文件夹,例如 C:\hopsignal,并把 hopsignal.exe 移入其中。
- 在同一文件夹中创建一个名为 fedlist.txt 的空文本文件。
- 以管理员身份打开命令提示符并启动服务器。
cd C:\hopsignal
for /f %i in ('powershell -NoProfile -Command "[guid]::NewGuid().ToString('N')"') do @(setx /M FEDPWD %i >nul & set FEDPWD=%i)
hopsignal.exe --ADDR 0.0.0.0:80 --FEDLIST fedlist.txt --FEDADDR 127.0.0.1:82 --LOGFILE hs.log
第二行将随机的联合密码保存为 Windows 系统设置,因此它不会出现在服务器的命令行中。
在 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 --FEDLIST C:\hopsignal\fedlist.txt --FEDADDR 127.0.0.1:82 --LOGFILE C:\hopsignal\hs.log" schtasks /Run /TN HopSignal
使用 Docker 的第 1 步:在容器中运行信令服务器
镜像 hoptodesk/hopsignal 在 Intel、AMD 和 ARM 主机上运行同一个信令服务器。使用推荐的限制启动它:
docker run -d --name hopsignal --restart unless-stopped -p 80:80 \ -e HS_MAX_MESSAGE_KB=64 -e HS_QUEUE_LIMIT=256 -e HS_MAX_CONNS=20000 \ -e HS_CONNS_PER_IP=100 -e HS_LOOKUPS_PER_IP=20 \ -e HS_IDLE_TIMEOUT=300 -e HS_UPGRADE_TIMEOUT=10 \ hoptodesk/hopsignal
每个 HS_ 值开启一项限制:消息大小(KB)、每个连接的排队消息数、打开的连接数、每个地址每秒的新连接数和查询数、空闲秒数以及握手秒数。省略某个值,该限制就保持关闭。
要将容器自动关联到您的仪表板账户,请使用仪表板中 Set up a private network 提供的 Docker 命令。它会加入 HS_SETUP_TOKEN 和 HS_DASHBOARD_URL,服务器在首次启动时报告一次自己的地址。
第 2 步:确认服务器正在运行
在 Linux 上检查服务和日志:
sudo systemctl status hopsignal tail /home/hopsignal/hs.log
在 Windows 上确认端口正在监听:
netstat -an | find ":80 "
使用 Docker 时,检查容器及其日志:
docker ps --filter name=hopsignal docker logs hopsignal
在任意一台电脑上测试 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 部分就是您的信令服务器。当通过 TLS 访问服务器时,例如 Cloudflare Worker,请使用 rendezvousssl 键代替 rendezvous。turnservers 列表包含一个或多个中继。普通连接把协议设为 turn,TLS 连接设为 turn-tls。版本键保持原样即可。
每个端口号都要加引号,如上例所示。应用会忽略写成普通数字的端口。
把这份文档交给设备有三种方式。请选择适合您环境的一种。
方式 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/.config/hoptodesk 中再放一份副本。在用户登录之前的登录界面,应用会使用这份副本。
方式 B:把文件托管到一个 URL,并在应用中选择它
- 把 api.json 上传到任意一台设备可访问的 Web 服务器。建议使用 HTTPS。
- 在 HopToDesk 中点击齿轮图标打开设置。
- 在 Network 下点击 Choose Network。
- 选择 Custom Network Settings,粘贴您文件的 URL 并确认。
- HopToDesk 会下载该文件,检查其中是否包含有效的 rendezvous 条目和 turnservers 列表,然后通过您的服务器重新连接。
要切回公共网络,再次打开 Choose Network 并选择 HopToDesk Network (Default)。
在 Android 和 iOS 上,打开设置,在网络部分关闭 Use HopToDesk Network,然后输入您文件的 URL。通过 EMM 管理的手机可以通过托管设置 custom_api_url 接收同一个 URL。
方式 C:从仪表板推送设置
如果您的设备已关联到 HopToDesk 仪表板,您可以为整个账户一次性设置网络。从仪表板生成的定制客户端会内置这些设置。
新服务器:在仪表板中打开设置、Network Settings、Set up a private network。选择 In my AWS account 或 On my own server。服务器启动时会报告自己的地址,每台关联设备都会收到设置。无需输入任何内容。
已在运行的服务器:手动输入其设置。
- 以所有者或管理员身份登录仪表板并打开设置。
- 在 Network Settings 下选择 Custom Network。
- 输入信令服务器的主机、端口,协议选择 WS。如果您运行自己的中继,请添加 TURN 服务器;留空则继续使用 HopToDesk 中继。
- 点击 Save Network Settings。每台已关联的设备都会收到新设置并自动应用,无需重新安装。
运行自己的 TURN 中继(可选)
无法直接连接的会话默认通过 HopToDesk 中继转发。要让所有流量都留在您自己的基础设施内,请运行一台 TURN 服务器。任何标准 TURN 服务器都可以,在 Linux 上 coturn 是常见的选择。
- 在中继服务器上安装 coturn。
sudo apt install coturn
- 编辑 /etc/turnserver.conf,至少设置下面这些值。把 realm、凭据和公网 IP 换成您自己的。
listening-port=443 fingerprint lt-cred-mech user=myuser:mypassword realm=example.com external-ip=PUBLIC_IP
- 如果 /etc/default/coturn 中有 TURNSERVER_ENABLED 这一行,请取消注释。然后启用并启动服务。
sudo systemctl enable --now coturn sudo systemctl restart coturn
- 在中继的防火墙上放行监听端口的 TCP 和 UDP,以及 49152 到 65535 的 UDP 中继端口范围。
- 把中继下发给设备:带上四个 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 条目一起删除服务器:
curl -o hsinstall.sh -sL https://www.hoptodesk.com/hs/hsinstall && sudo sh hsinstall.sh remove
故障排除
- ID 一直停留在 Generating,或应用一直在尝试连接网络:设备无法访问信令服务器。请检查服务是否在运行、80 端口是否开放,以及网络设置中的地址是否正确。
- 设备在局域网内能连接但从外部无法连接:中继不可达。使用默认中继时,设备需要能通过 443 端口出站访问 turn.hoptodesk.com。使用自有中继时,请检查其防火墙规则和凭据。
- 应用忽略了 api.json:请确认文件是有效的 JSON 且没有多余的逗号,位于正确的文件夹中,并且您已重启 HopToDesk。文件被读取后,应用日志中会出现 Loaded local api.json 这一行。
- 82 端口是用于联合多台自有信令服务器的端口。请不要对互联网开放。
- 信令服务器不保存任何会话数据。如果看起来卡住了,重启服务即可。设备会在大约一分钟内自行重新连接。
第三方托管
更喜欢托管平台?也可以将您的 HopToDesk 网络部署到 Cloudflare 或 AWS。

Cloudflare 上的 HopToDesk

AWS 上的 HopToDesk
- 在 AWS Marketplace 中订阅 HopToDesk Private Network。该产品免费,AWS 仅收取服务器费用。 AWS Marketplace
- 已登录仪表板?打开设置、Network Settings、Set up a private network,然后选择 In my AWS account。启动链接已填好设置,服务器会自动向您的仪表板报告,接下来的步骤可以跳过。
- 选择 Launch with CloudFormation。一个表单即可在您选择的区域创建服务器、其固定地址和防火墙规则。
- 堆栈创建完成后,打开其 Outputs 选项卡。其中显示供您的应用使用的 api.json。
- 将该 api.json 保存到每台电脑上,或在仪表板的网络设置中将其推送到所有设备。 api.json
注意: 该 Worker 使用 Durable Objects。其费用取决于您的 Cloudflare 方案和用量。 Durable Objects 价格
AWS Marketplace 及 AWS Marketplace 徽标是 Amazon.com, Inc. 或其关联公司的商标。Cloudflare、Cloudflare 徽标和 Cloudflare Workers 是 Cloudflare, Inc. 在美国及其他司法管辖区的商标和/或注册商标。
正在规划自托管部署? 申请报价