2026 没有公网 IP 也能安全回家:Tailscale 远程访问 AdGuard Home / NAS / SSH 完整指南
家里装好了 AdGuard Home、NAS 或一台 Linux 小主机,在局域网里访问很舒服;一离开 Wi-Fi,192.168.x.x就全部失联。
很多人的第一反应是 DDNS + 端口映射。但如果运营商给的是 CGNAT 地址,没有真正的公网 IP,端口映射根本进不来;即使能映射,把管理后台或 SSH 直接暴露到公网,也会增加扫描、撞库和漏洞利用的风险。
这篇文章用 Tailscale 解决这个问题:不申请公网 IP,不在路由器上开放入站端口,也不改变家里原有网络结构。手机、Mac、Windows 在外面仍可访问家里的 AdGuard Home、NAS 和 SSH。
本文只讨论你本人拥有或获授权管理的设备。示例网段和端口必须替换成自己的实际配置,不要原样照抄。
一、先选对方案:不要一上来就配子网路由
Tailscale 可以把已登录的设备放进一个加密的私有网络(tailnet)。实际部署有两条路:
| 你的情况 | 推荐方案 | 远程访问地址 |
|---|---|---|
| AdGuard Home / NAS 所在主机能安装 Tailscale | 方案 A:直接安装,最简单 | Tailscale IP 或 MagicDNS 主机名 |
| 服务设备不能安装,但局域网里有一台长期在线的 Linux / NAS | 方案 B:配置 Subnet Router | 服务原来的局域网 IP |
| 想让任何陌生访客通过公网打开页面 | 本文方案不适合 | 应单独设计反向代理、认证和安全边界 |
能用方案 A 就不要先上方案 B。直接安装的链路更短,排错也更容易。
二、准备工作
开始前确认四件事:
- 你知道服务的局域网地址,例如
192.168.50.2。 - 你知道实际管理端口。AdGuard Home 首次安装通常使用
3000/TCP,完成初始化后 Web 界面常见为80/TCP,但最终应以自己的AdGuardHome.yaml中http.address或页面配置为准。 - 家里至少有一台设备长期在线。
- 手机与家中设备登录同一个 Tailscale 网络。
先在家中局域网验证原地址确实能打开,例如:
http://192.168.50.2:3000如果局域网内都打不开,先解决服务监听、端口或防火墙问题;Tailscale 不会自动修复应用本身。
三、方案 A:直接在服务主机安装 Tailscale
下面以常见 Linux 主机为例。官方安装脚本支持 Debian、Ubuntu、RHEL、CentOS、Fedora、Raspberry Pi OS 等主流发行版:
curl-fsSLhttps://tailscale.com/install.sh|shsudotailscale up如果你不接受curl | sh的安装方式,可以按 Tailscale 官方 Packages 页面为自己的发行版手动添加软件源并安装。
终端会给出一个登录 URL。完成认证后,检查设备是否已经加入 tailnet:
tailscale status tailscaleip-4假设输出的 Tailscale IPv4 是100.x.y.z,手机安装 Tailscale、登录同一账号并开启连接后,就可以尝试:
http://100.x.y.z:你的实际端口如果开启了 MagicDNS,也可以直接使用设备名:
http://adguard-home:你的实际端口MagicDNS 的价值不是“更快”,而是不用记住100.x地址。新建的 tailnet 通常已经默认开启,也可以在管理后台的 DNS 页面检查。
这一步最容易忽略的安全点
- Tailscale 解决的是设备间的私有连通,不替代 AdGuard Home / NAS 自己的登录密码。
- 不要因为用了 Tailscale,就顺手把 Web 管理端口映射到公网。
- 不要为了省事长期关闭所有防火墙。
- 只有可信、长期在线的服务器才考虑关闭密钥到期;设备丢失或替换后要立即撤销。
四、方案 B:服务装不了 Tailscale,就用 Subnet Router
典型场景是:AdGuard Home 跑在路由器插件、旧 NAS 或无法直接安装 Tailscale 的设备上,但家里还有一台长期在线的 Linux 小主机。此时让小主机充当“进家门的网关”。
1. 确认真实网段
在 Linux 网关上执行:
iproute假设局域网是192.168.50.0/24,AdGuard Home 是192.168.50.2。如果你看到的是192.168.1.x、10.0.0.x或其他网段,后面的命令必须同步修改。
2. 开启 IP 转发
仅使用 IPv4 子网时,可以创建一个专用配置:
echo'net.ipv4.ip_forward = 1'|sudotee/etc/sysctl.d/99-tailscale.confsudosysctl-p/etc/sysctl.d/99-tailscale.conf然后安装并登录 Tailscale(如果尚未安装):
curl-fsSLhttps://tailscale.com/install.sh|shsudotailscale up3. 发布子网路由
sudotailscaleset--advertise-routes=192.168.50.0/24这条命令只是“声明我能带你去这个网段”,还不等于路由已生效。
4. 在管理后台批准路由
进入 Tailscale 管理后台:
- 打开Machines。
- 找到刚才的 Linux 网关。
- 在Subnets中编辑并批准
192.168.50.0/24。 - 保存。
如果你配置了autoApprovers,这一步可能会自动完成;普通家庭网络手动批准更直观。
5. 客户端接收路由
iOS、Android、macOS 和 Windows 默认会使用已批准的子网路由。Linux 客户端还需要:
sudotailscaleset--accept-routes此时在手机关闭 Wi-Fi、改用蜂窝网络,再访问原来的局域网地址:
http://192.168.50.2:你的实际端口注意:方案 B 访问的是AdGuard Home 原局域网 IP,不是充当网关那台机器的100.x地址。
五、把权限缩到真正需要的端口
“能连通”不等于“应该全部放开”。Tailscale 当前推荐使用 Grants 做细粒度访问控制,可以把来源、目标和端口限制到最小范围。
下面只是一个结构示例:只允许家庭管理员访问目标主机的 SSH、HTTP、HTTPS 和一个自定义管理端口。请合并进现有策略,不要覆盖整个策略文件;端口也必须按实际情况删改。
{"groups":{"group:home-admins":["your-account@example.com"]},"grants":[{"src":["group:home-admins"],"dst":["192.168.50.2"],"ip":["tcp:22","tcp:80","tcp:443","tcp:3000"]}]}如果只是远程查看 AdGuard Home 后台,就不要顺便开放整段*:*。最小权限往往比“先全开,后面再说”省事。
六、连不上时,按这个顺序排查
1. 设备根本不在线
tailscale status先确认两端都出现在设备列表里,认证没有过期,家中的设备也没有休眠或断电。
2. Tailscale 通,但网页不通
tailscaleping目标设备名或100.x地址tailscale ping可以判断两个 Tailscale 进程是否连得通,并显示最终是直连还是经中继。能 ping 通但网页打不开,通常要回头查服务端口、监听地址和本机防火墙。
Linux 上可以检查监听状态:
sudoss-lntp如果服务只监听127.0.0.1,其他设备当然无法访问。修改监听地址前要同时确认应用认证和防火墙,不要为了省事把所有接口、所有端口一起放开。
3. 子网路由没有真正生效
重点检查:
--advertise-routes的 CIDR 是否写对;- 管理后台是否批准了 Subnet Route;
- Linux 客户端是否启用了
--accept-routes; - 网关是否开启 IP forwarding;
- 家中网段是否和酒店、公司 Wi-Fi 网段重叠。
网段重叠是很隐蔽的坑。例如家里和外面的 Wi-Fi 都是192.168.1.0/24,系统可能把流量发到错误接口。长期方案是给家庭网络换一个不那么常见的网段,或者改用方案 A 的直接节点访问。
4. 开启 Tailscale 后其他 VPN 异常
多个 VPN 客户端可能同时修改路由和 DNS。先暂时断开另一个 VPN 做对照测试,再判断是路由冲突、DNS 冲突还是服务本身不可达。
七、发布前的 6 项验收清单
不要只在家中 Wi-Fi 里点开一次就宣布成功。至少验证:
- 手机关闭 Wi-Fi,使用蜂窝网络仍可访问;
- 路由器没有新增公网端口映射;
- 管理后台仍要求应用自己的账号密码;
- Grants 只允许实际需要的设备和端口;
- 家中网关重启后 Tailscale 与服务会自动恢复;
tailscale ping和实际网页 / SSH 都验证成功。
八、Tailscale 和端口映射到底怎么选?
| 维度 | Tailscale | DDNS + 端口映射 |
|---|---|---|
| 是否要求公网 IP | 不要求 | 通常要求 |
| 是否开放公网入站端口 | 不需要 | 需要 |
| 访问者是否安装客户端 | 需要 | 通常不需要 |
| 适合对象 | 自己、家人、固定团队 | 面向公开访客的服务 |
| 权限控制 | 可按身份、设备、目标和端口细分 | 主要依赖服务自身与防火墙 |
如果目标只是“我在外面安全管理自己家的设备”,Tailscale 通常更省心;如果目标是对所有访客公开网站,它就不是同一个问题,不能硬套。
总结
没有公网 IP 并不意味着只能把家里的服务困在局域网。正确顺序是:
- 能直接安装 Tailscale,就用方案 A;
- 不能安装,再用 Subnet Router;
- 先打通最小链路,再收紧 Grants;
- 最后必须用蜂窝网络做一次真正的外网验收。
这套方法同样适用于 NAS、Home Assistant、个人 Git、Code Server 和 SSH。变化的只是目标 IP 与端口,安全原则不变:不暴露不必要的公网入口、保留应用认证、按最小权限放行。
你是把 Tailscale 直接装在服务主机上,还是通过子网路由访问?如果卡在“能 ping 但打不开页面”,可以把系统、部署方式和实际监听端口写在评论区,排查会快很多。
参考资料
- Tailscale 官方文档:Install Tailscale on Linux
- Tailscale 官方文档:Subnet routers
- Tailscale 官方文档:MagicDNS
- Tailscale 官方文档:Grants
- Tailscale 官方文档:Troubleshoot TCP connection issues
- AdGuard Home 官方 Wiki:Getting Started
- AdGuard Home 官方 Wiki:Configuration