人在外面想打开家里的 NAS,传统做法通常要处理公网 IP、端口转发、动态域名、HTTPS 证书和路由器防火墙。只要其中一环配置不当,管理后台就可能直接暴露在互联网。
Tailscale 提供了另一条路。它以 WireGuard 为基础,把手机、电脑、NAS 和服务器放进一个私有网络。设备之间优先建立点对点连接,无法直连时再经过中继。家庭宽带没有公网 IPv4,也可以使用。
不同系统的安装入口可能不同,命令以 Linux 主机为例。
先弄清要访问哪一类设备
家庭远程访问大致有三种需求。
第一种是 NAS、服务器和电脑本身能安装 Tailscale。安装后可以直接访问它们的 Tailscale IP 和 MagicDNS 名称,这是最简单的方案。
第二种是某个网页服务只监听本机地址。可以使用 Tailscale Serve,把它通过 tailnet 内的 HTTPS 地址提供给自己的设备。
第三种是摄像头、打印机、路由器后台等设备无法安装 Tailscale。可以让一台常开的 Linux 设备充当子网路由器,代为转发家庭局域网流量。
先解决第一种,再按需要增加后两种。不要一开始就把整个家庭网段全部开放。
在 NAS 或 Linux 主机上安装
Tailscale 官方为多种 Linux 发行版提供安装脚本。
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
第二条命令会给出登录链接。在浏览器中登录并批准设备后,检查状态。
tailscale status
tailscale ip -4
status 应列出当前设备和 tailnet 中的其他设备,ip 命令会显示分配给本机的 Tailscale IPv4 地址。
手机和外出使用的电脑也要安装 Tailscale,并登录同一个 tailnet。连接后可以直接访问 NAS 的 Tailscale IP。
https://100.x.y.z:NAS管理端口
如果已开启 MagicDNS,可以改用设备名。
https://nas设备名:NAS管理端口
NAS 后台使用自签名证书时,浏览器仍可能提示证书不受信任。Tailscale 解决的是网络连通和身份范围,不会自动替换 NAS 原来的证书。
用 Serve 暴露一个本地网页服务
假设服务器上的应用只监听本机的 8080 端口,可以运行下面的命令。
sudo tailscale serve --bg http://127.0.0.1:8080
tailscale serve status
Tailscale Serve 会在 tailnet 内提供 HTTPS 地址。只有被访问控制策略允许的 Tailscale 用户和设备能访问。
停止当前 Serve 配置时使用。
sudo tailscale serve reset
Serve 和 Funnel 很容易混淆。
- Serve 只对自己的 tailnet 开放
- Funnel 会把服务公开到互联网
远程打开 NAS、Home Assistant、容器管理后台和路由器界面时,应优先使用 Serve 或直接访问 Tailscale 地址。不要把 Funnel 当成更方便的远程访问按钮。
让无法安装客户端的设备也能访问
打印机、摄像头和部分老旧 NAS 无法安装 Tailscale。这时可以在同一局域网内找一台常开的 Linux 设备做子网路由器。
先开启 IP 转发。
printf 'net.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1\n' \
| sudo tee /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
假设家庭局域网是 192.168.1.0/24,向 tailnet 公告这条路由。
sudo tailscale set --advertise-routes=192.168.1.0/24
然后进入 Tailscale 管理控制台,在设备的 Subnets 或 Edit route settings 中批准该路由。只有命令成功还不够,没有在控制台批准时,其他设备不会使用它。
Linux 客户端默认不会自动接受子网路由,需要执行。
sudo tailscale set --accept-routes=true
Windows、macOS、iOS 和 Android 通常会自动获取批准的子网路由。之后可以尝试访问家庭设备的原局域网地址。
http://192.168.1.50
如果访问失败,依次检查子网路由器能否从局域网访问目标设备、管理控制台是否已批准路由、目标设备防火墙是否只允许本地来源,以及两个网络是否使用了重叠网段。
访问控制不要停留在默认值
刚创建的个人 tailnet 往往允许成员互相访问设备,适合快速测试。家庭设备增加以后,应该在 Tailscale 的访问控制中限制范围。
可以按用途分组。
- 自己的手机和电脑可以访问 NAS 管理端口
- 家人的设备只访问照片、影音和文件服务
- 访客设备不访问家庭局域网
- 自动化服务器只访问它真正依赖的端口
还可以给无人值守设备使用标签,避免设备归属和个人账号混在一起。修改策略后先用 Tailscale 提供的策略测试验证,再保存到正在使用的 tailnet。
账号安全也要跟上。用于登录 Tailscale 的身份提供商应开启多因素认证,设备丢失后及时在管理控制台中禁用或删除。
三种常见方案怎么选
只想远程打开 NAS 文件和管理后台,可以在 NAS 和自己的设备上安装 Tailscale,直接访问 Tailscale IP 或 MagicDNS 名称。
想给本机网页应用加一个 tailnet 内可用的 HTTPS 入口,可以使用 Serve。
想访问无法安装 Tailscale 的摄像头、打印机或老设备,可以增加子网路由器,并只公告需要的家庭网段。
想让任何互联网用户都能访问某个服务,才考虑 Funnel。公开服务还需要单独评估身份验证、日志、限流和应用漏洞,不适合直接套在家庭管理后台上。
如果你正在搭建整套家庭服务,可以结合家庭 NAS 与个人云存储搭建思路和自建私有云部署记录一起规划。应用负责提供功能,Tailscale 负责把授权设备安全地连回来,两者不要混成一套权限。
上线前检查
- NAS 管理端口没有直接转发到公网
- 每台加入 tailnet 的设备名称都能识别
- 丢失设备可以从管理控制台立即禁用
- Serve 只用于 tailnet 内服务
- 子网路由只公告需要访问的网段
- 家人和访客没有获得不必要的管理权限
- 外出网络和家庭网络都做过一次连接验证
远程访问的目标不该只是能打开页面。更重要的是让入口范围足够小,设备丢失后能撤销,家人使用时又不需要记一串复杂地址。
评论区