环境: 腾讯云服务器(出口节点)、iPhone(客户端)、5G 移动网络。 症状: 在家里 Wi-Fi 环境下代理正常;切换到 5G 后,开启 Exit Node 导致手机无法上网,甚至无法访问服务器内网 IP。 根因: 5G 运营商对 UDP 协议 进行了严格限制或阻断(Tailscale 默认走 UDP),且官方海外中继节点延迟过高。
通过 Docker 部署私有 DERP 节点,强制流量走 TCP (443端口) 转发,绕过运营商的 UDP 干扰。
部署方式: Docker 容器。 证书方案: 自签名证书 (Self-signed Certificate)。 关键端口:
TCP 443: DERP 流量传输。 如果使用非433,需要保证腾讯服务器的防火墙配置打开了对应的端口 UDP 3478: STUN 服务(协助打洞)。
A. 服务端 (Docker 启动参考): 使用 Docker 部署时,需挂载证书目录并指定域名。
services:
derper:
image: ghcr.io/yangchuansheng/ip_derper:latest
container_name: derper
restart: always
ports:
- "12345:12345" # 这里的12345请改成你自己想要的10000以上的高位端口,或者就443
- "3478:3478/udp" # 3478 为stun端口,如果不冲突请勿修改
volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # 映射本地 tailscale 客户端验证连接,用来验证是否被偷
environment:
- DERP_ADDR=:12345 # 此处需要与上面的ports同步修改
- DERP_CERTS=/app/certs
- DERP_VERIFY_CLIENTS=true # 启动客户端验证,这是防偷的最重要的参数
docker-compose up起来就可以了。用托管的session启动就可以了
B. Tailscale 控制台配置 (ACL Edit): 在 derpMap 中必须手动指定 InsecureForTests: true,否则 Tailscale 客户端会因为证书不合法而拒绝连接。
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"901": {
"RegionID": 901,
"RegionCode": "tencent-derp",
"Nodes": [
{
"Name": "1",
"RegionID": 901,
"HostName": "你的域名或IP",
"DERPPort": 443,
"InsecureForTests": true, // 关键:允许自签名证书
"STUNPort": 3478,
"IPv4": "腾讯云公网IP"
}
]
}
}
}
如果未来遇到“能连接但大网页打不开”的情况,需检查:
MSS Clamping (服务器执行): 解决 5G 网络 MTU 限制。 sudo iptables -t mangle -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
IP 转发: 确保服务器 net.ipv4.ip_forward = 1。 iPhone 设置: 关闭“iCloud 私密转送”和“限制 IP 地址跟踪”。
手机保持5G无WIFI,此时tailscale开启 Exit Node,流量将稳定通过腾讯云中继转发。
备忘记录时间: 2026年 状态: 已解决 :white_check_mark: