摘要:在使用 Docker 部署 Tailscale 网络时,常会遭遇“节点 IP 频繁变动”、“宿主机网络隔离”以及“P2P 打洞失败被迫走高延迟中继”等痛点。本文将从底层架构出发,提供一套生产环境可用、状态持久化的 Docker 部署方案。并实战演示如何利用该架构实现“海外免备案网关 + 国内内网隐藏源站”的终极业务形态。
〇、 架构解析:我们用它解决什么业务痛点?
这套架构特别适合国内业务出海、规避繁琐备案或保护本地家庭服务(NAS)。我们将海外服务器(Server A)作为公网入口网关,国内服务器/内网设备(Server B)作为实际业务源站。
核心优势:
- 完美绕过域名备案:用户只访问海外入口 A,彻底免除国内服务器绑域名的繁琐 ICP 备案限制。
- 源站彻底隐身与极简部署:国内服务器 B 可以是纯内网设备(如家庭 NAS、公司内网虚拟机),不需要公网 IP,也完全不需要在它上面搭建任何 DERP 服务。 它只作为纯客户端接入,对公网完全隐身,免疫一切扫描与 DDoS 攻击。
- 极低延迟的 P2P 直连:利用 Tailscale 的 STUN 打洞技术,A 与 B 之间通过 UDP 加密隧道直连,流量无视 NAT 隔离,不经过任何第三方服务器转发。
业务流转拓扑图

一、 核心前置准备:Tailscale 控制台授权
在操作服务器之前,必须先获取入网凭证,以保证节点的身份固化。
- 登录 Tailscale 网页控制台。
- 进入
Settings->Keys->Generate auth key。
- ⚠️ 关键避坑:
- 绝不勾选
Ephemeral(临时节点):否则节点断开后会被系统自动删除,导致下次启动 IP 变更,反代规则直接失效。 - 建议勾选
Reusable(可复用):防止调试期间重建容器导致 Key 立即失效。
- 复制生成的
tskey-auth-xxxxx备用。
二、 部署海外网关(Tailscale + 自建 DERP 中继)
此节点(Server A)既是 Tailscale 局域网的公网引流节点,同时兼任专属 DERP 中继,在极端网络环境下为整个虚拟网络提供兜底转发。
1. 编写高可用 Dockerfile
直接使用 Tailscale 官方镜像作为底层,配合健康检查脚本平滑拉起双进程,彻底杜绝服务启动时序导致的崩溃。
2. 配置 docker-compose.yml
前置动作:必须在宿主机执行
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf && sysctl -p 开启系统内核流量转发。执行
docker compose up -d --build 启动容器。3. 下发中继路由 (ACL 配置)
中继搭建后,必须在官方控制台登记,否则其他节点无法识别。进入控制台 Access Controls (ACLs),在 JSON 文件内添加
derpMap 路由:三、 部署国内内网源站(纯 Tailscale 客户端)
源站(Server B)不需要做任何中继配置。无论它是云服务器,还是藏在路由器后的家用 NAS,只要能联网,它就能悄无声息地挂载宿主机网络,等待入口网关把流量精准送达。
docker-compose.yml执行
docker compose up -d 启动。此时,该设备已获得一个固定的内网 100.x.x.x IP。四、 避坑与排错指南(核心诊断)
组网的终极目标是实现 STUN 打洞(建立 P2P 直连),以跑满物理带宽并降低延迟。一旦打洞失败,流量就会绕行中继,导致体验大幅下降。
诊断 1:检查 UDP 穿透能力(警惕双层防火墙陷阱)
在客户端容器(如 Server B)执行网络体检命令:
- 绝佳状态:看到
* UDP: true并且扫描出你的自建中继。
- 致命阻断:看到
* UDP: false或IPv4: (no addr found)。这说明机器的底层 UDP 流量被防火墙死死拦截。
🛠️ 修复 UDP 阻断:必须双端放行 41641 端口
- 云厂商层:登录阿里云/腾讯云/AWS 等控制台,在安全组入站规则中放行 UDP 41641。
- 本地面板层(极高发坑点):如果你的服务器安装了 1Panel、宝塔等运维面板,面板会强行接管本地系统的
ufw/firewalld。必须在面板的网页防火墙设置中,再次手动放行UDP 41641。云端和本地漏掉任何一层,都会导致打洞失败。
诊断 2:验证端到端真直连
修复防火墙后,在客户端执行底层 Ping 测试:
- 失败状态(走中继绕路):
pong from ... via DERP(custom-derp) in 150ms。
- 完美状态(P2P 直连):
pong from ... via x.x.x.x:49408 in 3ms。只要日志里直接显示了对方的公网/NAT IP,且没有出现 DERP 字样,说明数据包已经成功突破物理阻碍,你的零损耗异地局域网已全面贯通!
- 作者:Cheng
- 链接:https://0rz.li/%E7%BB%84%E7%BD%91%E4%B8%8E%20VPN/docker-tailscale-gateway-guide
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


