Tailscale 全平台部署教程
坑边闲话:WireGuard 作为下一代 VPN 技术,除了面对 ISP UDP QoS 时比较尴尬之外,性能、安全性都是非常有保障的。但是 WireGuard 的配置相对繁琐,需要用户掌握许多密码、网络的知识才能完成。Full-Mesh 的结构也让设备的增添、移除变得非常复杂。Tailscale 通过引入管理节点,让配置变得自动化,同时 Tailscale 也支持自定义管理平面。
1. Tailscale 简介·
Tailscale 是一个基于 WireGuard 的网络技术,用于创建安全、简单、私有的虚拟网络。
- 基于 WireGuard: WireGuard 是一个新的、高性能的 VPN 协议,旨在提供安全、简单、快速的网络连接。Tailscale 使用 WireGuard 作为其底层协议,但对其进行了封装,以提供更加用户友好和企业友好的功能。
- 简单性: 传统的 VPN 和私有网络解决方案通常需要复杂的配置和维护。Tailscale 的目标是简化这个过程,使任何人都可以在几分钟内设置自己的私有网络。
- 跨平台: Tailscale 支持多种操作系统和平台,包括 Linux、Windows、macOS、iOS、Android 和其他设备。
- 安全性: 利用 WireGuard 的强大加密功能,Tailscale 提供了高度的安全性,确保数据传输的隐私和完整性。
- 访问控制: 用户可以轻松地控制哪些设备和应用可以访问其网络资源,提供了细致的权限管理。
Tailscale 是一个使个人和团队能够轻松创建、管理和使用私有网络的工具。其强大、灵活且用户友好的特性使它成为许多网络需求的理想选择。
曾经我以为异地组网是个简单的工作,但是在使用 WireGuard 相当长一段时间之后,我发现 WireGuard 的配置太过繁琐。如果把 WireGuard 作为底层,再外套一层管理平面,应该会让整套服务更加人性化。Tailscale 就是这样的产品。
1.1 Tailscale 的收费策略·
使用 Tailscale 的软件是免费的,但是使用 Tailscale 的服务却有收费的选项。当然,Tailscale 的免费版本服务对个人或者小组来说也够用了。这里针对 Tailscale 付费版本的本地私有托管进行简单介绍。
2. 全平台部署·
2.1 Linux:以 Debian 12 为例·
在 Linux 上通过命令行安装 Tailscale 非常简单
添加 Tailscale 官方维护的上游库,其中包括添加 gpg
密钥和添加 DPKG
源两步。
1 | curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null |
安装 Tailscale:
1 | sudo apt-get update |
启动 Tailscale:
1 | sudo tailscale up |
2.2 Windows:以 Win10 为例·
Windows 部署 Tailscale 非常简单,因此安装过程简单略过。
Windows 上的一大特色就是好用的远程桌面,为此我展示自己常用的配置:
校园网可能因为外线失联而中断,路由器端口转发可能因为路由器宕机而失联,IPv4 可能因为流量用尽而失去控制。但是把所有的连接方式汇总在一起,总有一款适合你。
2.3 路由器:以 OpenWrt 为例·
在 OpenWrt 上安装 Tailscale 也非常简单,只要你的内核支持,即可通过 OPKG 安装。因为 Tailscale 通过 Go 实现,因此可能需要一些 Go 的运行时环境。
通过命令行启动了 Tailscale 之后,设备列表里会多出一个网卡,然后以该网卡为基础创建 Interface 即可。
2.4 macOS·
macOS 作为一个非常易用且人性化的个人电脑操作系统,安装 Tailscale 有多种方式:
- 通过 Mac App Store. 通常 Mac 应用商店的程序限制多、版本更新满,所以笔者很少使用它下载程序,这里也不做推荐;
- Standalone 独立安装:除了不能启用 Tailscale SSH 和不能在运行在 unattended 模式之外,可谓是功能最全的;
- 直接安装
tailscaled
,以 utun 接口的形式提供服务,不推荐。
具体区别可通过在线表格查阅。
此外,在 macOS 上使用 Standalone 模式安装后,需要手动打开 tailscale
命令行支持。
3. Tailscale 高级教程·
3.1 子网·
子网功能一般在路由器上部署,当然,如果有一台内网设备,也可以利用其内网转发能力设置子网宣告,这一点要比 OpenWrt 稍微方便一些。
3.2 MagicDNS·
设备加入 Tailscale 网络之后,Tailscale 软件会在本地设置一个 VPN 虚拟网络接口,带宽显示 100Gbps,即无上限。通过该接口发送出去的流量,会被 Tailscale 软件截获,二次处理、打包后通过默认路由发送出去。
Tailscale VPN 网络中的所有设备都有这样的一个虚拟网络接口,他们的 IP 均是 100.x.x.x/32
的格式。只要设备的 Tailscale 可用,就可以通过这种 IP 地址联系到对应的其他设备。
然而,这种 IP 地址是不可自定义的,所以准确记忆这些地址非常麻烦。好在 Tailscale daemon 程序提供了一个名为 MagicDNS 的功能,我们可以直接使用 Tailscale 配发的域名解析到该 IP 地址。
- 运行 Tailscale daemon 之后,程序会在机器的 DNS 缓存里插入一些解析记录,格式为
<host_name>.xxx-xxx.ts.net
,其中<host_name>
是 Tailscale Admin 界面看到的设备名,一般是设备的主机名;xxx-xxx
是 Tailscale 为该用户分配的唯一的二级域名。可以通过摇号的方式再次获取;ts.net
是该 FQDN 的一级域名,属于 Tailscale 公司所有。
- 通过访问该地址,用户即可访问到对应设备。
- 关闭 Tailscale 服务,该解析记录缓存自动被移除,MagicDNS 将变得不再可用。
因此,推荐使用 MagicDNS 而非 IP 地址。此外,MagicDNS 搭配 HTTPS,能实现更方便、更合规的 VPN 网络。
3.3 Tailscale HTTPS·
一般我们认为内网中的服务是可信的,零信任网络的应用范围毕竟有限。因此,在内网里使用 HTTPS 貌似没有必要,仅在 NGINX ingress 流量上套一层 HTTPS 就够了。然而,在某些场景中,内网 HTTPS 还是很有必要的,单就避免浏览器警告就很值得使用。
- 浏览器不安全警告
- 某些服务仅提供 HTTPS 访问,如 ESXi 控制面板、vSphere 控制面板、Cocipit 控制面板等。
Tailscale 提供了 acme 功能,可以自动申请 Let’s Encrypt 证书。
为此,我们首先要在 Tailscale 配置页面打开 HTTPS 证书服务:
随后,执行下列命令
1 | tailscale cert t630-win10.cat-silverside.ts.net |
即可在当前目录得到私钥和对应的证书:
1 | t630-debian.cat-silverside.ts.net.crt |
将这两个文件拷贝至合适的目录,重启对应服务即可使用。我们以 cockpit 为例:
1 | sudo cp t630-debian.cat-silverside.ts.net.key t630-debian.cat-silverside.ts.net.crt /etc/cockpit/ws-certs.d/ |
现在,即可使用 MagicDNS 域名 https://t630-debian.cat-silverside.ts.net:9090/
打开 HTTPS 服务页面。
3.4 Exit node·
Exit-Node 功能非常有用,它可以让我们方便地实现流量伪装、IP 隐藏,甚至是全局流量转发。如果在 WireGuard 上将 Allowded-IPs 设置为 0.0.0.0/0
也能实现相同效果,但是 WireGuard 修改配置文件比较麻烦。
Exit 一般指的是出口,比如楼道里、消防门上方都会表示 Exit,表示从这里可以走出这个现代建筑物。一般来说,符合消防标准的大楼一定会配置 Exit 标识。在 Tailnet (即 Tailscale 网络)中,一般认为 Exit Node 是这样的设备:
- 它宣告自己可以帮你代理,你可以将自己所有的流量发给它,它会做一层 SNAT,随后即可以它的名义对外发起访问。原则上它就变成了你的逻辑网关
- 在 Tailnet 中,如果有一台设备想隐藏自己的 IP,就可以将某个 Exit 节点选中,随后自己的公网流量均由该节点代理。
举例说了,我人在北京,山东老家的台式机宣告自己为 Exit Node,那么我在北京即可使用山东 IP 进行上网。抖音、微博等均认为我人在山东,我评论、发内容也会显示我在山东。这个功能非常有用。
4. Tailscale 的局限性·
Tailscale 的 Windows 客户端在升级的时候不够稳定,曾数次出现使用 .msi 安装包更新完无法连接的情况,需要重启才能完成升级操作。如果是通过 Tailscale 隧道远程桌面控制 Windows,这一个问题可谓是非常致命!不过,后来的升级过程比较顺利,可能 Tailscale 团队修复了这一问题。
其次,OpenWrt 23.05 RC3 的 Tailscale 依旧存在版本落后问题,其距离最新版有两三个大版本的代差。虽说仍能建立连接,但是看到 login.tailscale.com 界面的升级按钮,就是很让人心烦意乱。
总体来看,Tailscale 瑕不掩瑜,可以作为笔者此前 WireGuard 大内网方案的扩充。
总结·
本文详细介绍了 Tailscale 的安装和高级用法,其中 Exit Node、Subnet 等方案在实际应用中极具价值。