ObsiBlog即将为您展现精彩内容
929 字
5 分钟
在学校高墙内网穿透连接家里RustDesk的踩坑与折腾记录

起因#

最近想在学校机房通过自建的 RustDesk 服务器远程连接家里的高性能台式机

本以为也就是跑个 Docker 的事,结果因为学校严格的内网环境和家里宽带的限制,硬是把“简单部署”玩成了“网络攻防”

第一关:配置文件的“格式陷阱”#

一开始我使用了 lejianwen/rustdesk-server-s6 这个全合一镜像

部署好 Docker 后,客户端疯狂报错 os error 11001,监控里还莫名其妙出现连接 80 端口的记录

排查后发现,这是个非常低级的格式错误

❌ 错误的填写: ID/中继服务器填了:http://rd.hiyun.top:21116

✅ 正确的填写: ID/中继服务器应该是:rd.hiyun.top:21116(千万别加 http://!)

原理: ID 和中继走的是 TCP/UDP 协议,不是 HTTP 网页。客户端看到 http:// 就会把它当成 URL 解析,解析失败后甚至会回退去连默认的 80 端口,导致连接彻底跑偏

第二关:学校代理的“407”拦截#

修正格式后,我在学校电脑上尝试连接,结果出现了 Connection Error: TimeoutHTTP code 407

这时候我才意识到学校网络环境的特殊性:

  1. 强制代理:上网必须走学校的 zgcproxy 代理
  2. 端口封锁:代理服务器只放行标准的 Web 端口(80/443),RustDesk 默认的 21116(ID服务)和 21117(中继服务)直接被墙

这导致了一个死局(三明治夹击):

  • 学校:非 80/443 不让出
  • 家里云:运营商把家庭宽带的 80/443 入口封了
  • RustDesk:夹在中间瑟瑟发抖,两头不讨好

第三关:端口伪装与“破局”方案#

既然标准路走不通,就只能走“野路子”

1. 端口大挪移#

既然家里不能开 443,学校又只认 Web 流量,我选择折中方案:使用备用 Web 端口(8443 / 8080)

通常学校代理为了兼容性,会对 8443 (HTTPS Alt) 和 8080 (HTTP Alt) 网开一面

修改 compose.yml,把容器端口映射到宿主机的常用端口:

services:
rustdesk:
ports:
- 21114:21114 # API
- 8443:21116 # ID服务伪装成 HTTPS Alt
- 8080:21117 # 中继服务伪装成 HTTP Alt
- 21116:21116/udp
# ...其他配置...

2. 开启 WebSocket#

在客户端网络设置中,勾选 [x] 使用 WebSocket

这能把流量伪装成网页数据包,骗过学校单纯的代理检查

总结:一套针对不同环境的“混合战术”#

经过这一通折腾,我总结出了一套在不同网络环境下连接家里服务器的最优解:

  1. 🏫 在学校(地狱模式)
  • 地址填写域名:8443
  • 策略:利用 WebSocket + 非标准 Web 端口穿透代理。如果还不行,就只能上 Cloudflare Tunnel 这种大杀器了
  1. 🏠 在家里(内网模式)
  • 地址填写192.168.x.x (局域网IP)
  • 策略千万别填域名! 很多家用路由器不支持 NAT 回环(Hairpin NAT),填域名反而连不上。直接填内网 IP,速度最快,直通网线
  1. 🌍 在其他外网(普通模式)
  • 地址填写域名:端口
  • 策略:依赖家里路由器的端口映射

最后的教训#

排查网络问题时,永远不要用“自己连自己”来测试

我在排查初期一直用学校电脑连学校电脑(通过家里的服务器中转),导致路由死循环,报错报得怀疑人生

正确的测试姿势:掏出手机,断开 WiFi,用 4G/5G 流量测试

只要手机能连上,说明服务器端没问题,剩下的就是单纯的“怎么翻越学校防火墙”的问题了

在学校高墙内网穿透连接家里RustDesk的踩坑与折腾记录
https://blog.hiyun.top/posts/rustdesk-折腾记/
作者
𝑶𝒃𝒔𝒊𝒅𝒊𝒂𝒏
发布于
2026-01-13
许可协议
CC BY-NC-SA 4.0

这篇文章是否对你有帮助?