$ cat post.md

Tailscale 异地组网:随时随地安全访问家里服务器

家宽没有公网 IP 不是绝症。Tailscale 基于 WireGuard 给所有设备组一个虚拟内网,零配置穿透 NAT,人在外面也能 SSH 回家,顺便把管理端口从公网全部撤下来。

折腾家庭服务器的人迟早撞上这堵墙:家里宽带没有公网 IP。想在外面访问家里的服务器,传统方案要么求运营商给公网 IP,要么折腾 frp 内网穿透(需要一台有公网 IP 的 VPS 中转),要么把端口映射出去裸奔——每条路都有明显的痛。

Tailscale 是这几年最优雅的解法:给你的所有设备组一个虚拟内网,每台设备分配一个固定的内网 IP(100.x.x.x 段),无论设备在哪、隔着几层 NAT,都能像在同一个局域网里一样直连。

原理一句话

Tailscale 底层是 WireGuard(现代 VPN 协议,快且省流量),它帮你把最麻烦的部分全自动化了:密钥交换、NAT 穿透、IP 分配。设备之间能直连就走 P2P 直连(流量不过服务器,跑满带宽),实在穿不透才走 DERP 中继。Tailscale 官方的协调服务器只负责牵线,看不到你的流量内容。

对个人用户免费额度是 100 台设备、3 个用户——绰绰有余。

第一步:服务器安装并上线

在 Ubuntu 服务器上:

# 官方一键安装脚本
curl -fsSL https://tailscale.com/install.sh | sh

# 启动并登录
sudo tailscale up

执行 tailscale up 后会输出一个登录链接,复制到浏览器打开,用 Google / Microsoft / GitHub 账号登录授权,这台服务器就入网了。查看分配到的虚拟 IP:

tailscale ip -4
# 100.x.x.x
tailscale status
# 能看到 tailnet 里所有设备

服务器没人值守,浏览器授权那步是在你自己的电脑上完成的——链接在任何浏览器打开都行,授权的是设备,不是浏览器所在的位置。

第二步:其他设备入网

  • Windows / macOS:官网下载客户端,登录同一账号,自动入网。
  • iOS / Android:应用商店搜 Tailscale,登录后开关一连即可。
  • 另一台 Linux:同第一条的命令。

所有设备登录同一个账号后,打开 Tailscale 管理后台(login.tailscale.com)的 Machines 页面,能看到每台设备的虚拟 IP 和在线状态。

第三步:享受虚拟内网

现在无论你身在何处,只要设备开着 Tailscale:

# 在外面用笔记本 SSH 回家里服务器,用的是虚拟 IP,和公网完全无关
ssh cyril@100.x.x.x

# 访问家里服务器上的 Web 服务
curl http://100.x.x.x:8080

手机上装个 Termius 也能随时 SSH 回家。Tailscale 默认还给每台机器分配了 MagicDNS 域名(机器名.你的tailnet.ts.net),记不住 IP 就用域名。

第四步:安全收紧——这才是重点

虚拟内网打通了,就可以把暴露在公网的管理入口全部收回来:

1. SSH 只监听 Tailscale 网卡

编辑 /etc/ssh/sshd_config:

ListenAddress 100.x.x.x

sudo systemctl restart ssh 后,SSH 只在虚拟内网可达。公网上的扫描器对着 22 端口敲到死也连不上——它根本不在公网监听。

⚠️ 改之前确认 Tailscale 连接稳定,并且保留当前会话测试新连接,别把自己锁门外。

2. 管理类 Web 服务同理

Uptime Kuma、Portainer 这类管理面板,绑定到虚拟 IP 或加防火墙规则,只允许 tailscale0 网卡访问:

# ufw 示例:只允许 tailnet 访问 3001 端口
sudo ufw allow in on tailscale0 to any port 3001

这样即使服务有漏洞,攻击面也缩小到「只有你自己的设备」。

进阶玩法

  • Exit Node:把家里服务器设为出口节点(sudo tailscale up --advertise-exit-node,管理后台批准),在外面连公共 WiFi 时让手机流量从家里宽带出去,相当于自带安全 VPN 回家。
  • Subnet Router:让 Tailscale 转发家里整个内网网段(--advertise-routes=192.168.1.0/24),连家里没装 Tailscale 的设备(NAS、打印机)也能访问。
  • Headscale:不想依赖 Tailscale 官方协调服务器的话,可以自建开源的控制端 Headscale,完全自主可控——这是另一个大坑,以后单独写。

常见问题

现象 原因与解决
设备间延迟高 没打通 P2P 直连,走了中继。tailscale ping 对端IP 看是 direct 还是 relay;开 UPnP 或放行 UDP 41641 端口有助直连
装完 tailscale up 没反应 网络受限环境;检查 UDP 出站是否被防火墙拦
重启服务器后连不上 tailscaled 服务没自启,sudo systemctl enable --now tailscaled
设备改名/密钥过期 管理后台 Machines 页可禁用密钥过期(服务器建议关掉,否则 180 天后要重新认证)

小结

Tailscale 的用法归纳成一条思路:公网只留必须公开的服务(比如博客 443 端口),其余一切管理入口收进虚拟内网。这是个人服务器安全模型的最佳实践——不是把门锁得更结实,而是让门在地图上消失。

下一篇回到应用层:用 Docker 部署 Uptime Kuma 监控面板,盯着你的所有服务,宕机秒级推送 Telegram。