引言
对于很多开发者和数码玩家来说,家里或公司内网那台性能强悍的服务器(或 NAS)总是让人又爱又恨:爱它的高性能和超大空间,恨它没有公网 IP,空有一身本领却无法在校外、家外轻松访问。
传统的 FRP、Ngrok 配置繁琐且安全性难以保障。今天,我将分享一套“黄金组合”方案:利用 Tailscale (WireGuard) 的加密隧道,配合一台低配 公网 VPS 和 宝塔面板,实现既安全、又稳定、且具备自动 SSL 证书续期的公有 Web 服务架构。
一、 架构设计:为什么选择这个方案?
传统的内网穿透是直接把内网端口暴露在公网,而我们的方案采用“流量中转 + 边缘卸载”的思路:
- 安全隐患低:内网服务器无需开启任何公网端口,仅与 VPS 建立点对点加密隧道。
- 配置极简:利用 Tailscale 自动打洞,无需操心复杂的 NAT 类型。
- 性能可控:通过自建 DERP 中继服务器,解决跨境传输延迟,实现毫秒级响应。
- 管理方便:在 VPS 上使用宝塔面板,图形化管理反向代理和 SSL 证书。
二、 实战步骤:从零开始搭建
1. 基础环境铺设
首先,在你的 Ubuntu VPS 和 内网服务器 上分别安装 Tailscale。
# 一键安装脚本
curl -fsSL https://tailscale.com/install.sh | sh
# 启动并完成身份验证
tailscale up
安装完成后,在 Tailscale 控制台你会看到两台设备都分配到了 100.x.x.x 段的内部 IP。
2. 进阶:在 VPS 上部署私有 DERP 中继节点
为了保证在任何网络环境下(如公司严格的防火墙)都能秒连,我们需要利用 VPS 的公网 IP 自建中继。
使用 Docker 快速部署:
docker run -d \
--name derper \
--restart always \
-p 443:443 \
-p 3478:3478/udp \
-e DERP_DOMAIN=derp.yourdomain.com \
-v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
fredliang/derper
注意:需在云服务器安全组开放 TCP 443 和 UDP 3478 端口。
在 Tailscale 控制台配置 ACL:
在 derpMap 中填入你的域名和端口信息,确保流量优先走你的私有节点。
3. 公网入口:宝塔面板的反向代理设置
这是实现“公有 Web 服务”的关键一步。
- 创建站点:在宝塔面板添加你的公网域名站点。
- 配置 SSL:在站点设置中申请 Let's Encrypt 证书,开启“强制 HTTPS”。
- 设置反向代理:
- 目标 URL:填写内网服务器的 Tailscale IP。例如
http://100.123.45.67:8080。 - 发送域名:使用变量
$host。
- 优化配置文件:如果是长连接服务(如 WebSSH 或 Home Assistant),记得在反代配置中加入以下代码支持 WebSocket:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
三、 避坑指南:确保系统长期稳定
1. 设备上线提醒
Tailscale 原生不支持下线提醒,为了防止内网服务宕机而不知情,建议在内网服务器部署 Uptime Kuma。
- 监控逻辑:定时 Ping 内网服务器的 Tailscale IP。
- 报警渠道:对接 Telegram、钉钉或 Server 酱,一旦断连秒发通知。
2. 性能瓶颈分析
- 带宽:服务的上限取决于你的 VPS 公网带宽和家庭上行带宽的“最小值”。
- 直连 vs 中继:通过
tailscale status检查状态。如果显示direct则是最理想的 P2P 连接;如果显示relay,则确保它走的是你自建的 DERP 节点。
四、 总结
这套方案完美解决了“高性能内网资源”与“公网访问便利性”之间的矛盾。通过 Tailscale 构建安全的底层连接,通过宝塔面板简化前端的运维工作,即便是新手也能在半小时内搭建出一套企业级的私有云服务入口。
下一步建议:
如果你有多个内网服务(如 OpenWrt、NAS、私有云盘),可以考虑在内网服务器上开启 Subnet Router(子网路由) 功能,这样你甚至可以直接通过内网原始 IP 访问整个家庭网络的所有设备。
如果你在搭建过程中遇到证书申请冲突或 UDP 打洞失败的问题,欢迎在评论区留言讨论!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/899.html
转载时须注明出处及本声明。