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。直接安装的链路更短,排错也更容易。

二、准备工作

开始前确认四件事:

  1. 你知道服务的局域网地址,例如192.168.50.2
  2. 你知道实际管理端口。AdGuard Home 首次安装通常使用3000/TCP,完成初始化后 Web 界面常见为80/TCP,但最终应以自己的AdGuardHome.yamlhttp.address或页面配置为准。
  3. 家里至少有一台设备长期在线。
  4. 手机与家中设备登录同一个 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.x10.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 up

3. 发布子网路由

sudotailscaleset--advertise-routes=192.168.50.0/24

这条命令只是“声明我能带你去这个网段”,还不等于路由已生效。

4. 在管理后台批准路由

进入 Tailscale 管理后台:

  1. 打开Machines
  2. 找到刚才的 Linux 网关。
  3. Subnets中编辑并批准192.168.50.0/24
  4. 保存。

如果你配置了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 和端口映射到底怎么选?

维度TailscaleDDNS + 端口映射
是否要求公网 IP不要求通常要求
是否开放公网入站端口不需要需要
访问者是否安装客户端需要通常不需要
适合对象自己、家人、固定团队面向公开访客的服务
权限控制可按身份、设备、目标和端口细分主要依赖服务自身与防火墙

如果目标只是“我在外面安全管理自己家的设备”,Tailscale 通常更省心;如果目标是对所有访客公开网站,它就不是同一个问题,不能硬套。

总结

没有公网 IP 并不意味着只能把家里的服务困在局域网。正确顺序是:

  1. 能直接安装 Tailscale,就用方案 A;
  2. 不能安装,再用 Subnet Router;
  3. 先打通最小链路,再收紧 Grants;
  4. 最后必须用蜂窝网络做一次真正的外网验收。

这套方法同样适用于 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