Tailscale 全平台部署教程
坑边闲话:WireGuard 作为下一代 VPN 技术,除了面对 ISP UDP QoS 时比较尴尬之外,性能、安全性都是非常有保障的。但是 WireGuard 的配置相对繁琐,需要用户掌握许多密码、网络的知识才能完成。此外,典型 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 是一个使个人和团队能够轻松创建、管理和使用私有网络的工具。其强大、灵活且用户友好的特性使它成为许多网络需求的理想选择。
1.1 Tailscale 的收费策略·
使用 Tailscale 的软件是免费的,但是使用 Tailscale 的服务却有收费的选项。当然,Tailscale 的免费版本服务对个人或者小组来说也够用了。这里针对 Tailscale 付费版本的本地私有托管进行简单介绍。
2. 全平台部署·
2.1 Linux:以 Debian 12 为例·
在 Linux 上通过命令行安装 Tailscale 非常简单,只需执行以下一句命令即可完成:
1 | curl -fsSL https://tailscale.com/install.sh | sh |
偷懒的用户看到这里就够了。总的来说,该脚本给 Debian 系统的包管理器添加了 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 tailscale up |
2.2 Windows:以 Win10 为例·
Windows 部署 Tailscale 非常简单,因此安装过程简单略过。
Windows 上的一大特色就是好用的远程桌面,为此我展示自己常用的配置:
校园网可能因为外线失联而中断,路由器端口转发可能因为路由器宕机而失联,IPv4 可能因为流量用尽而失去控制。但是把所有的连接方式汇总在一起,总有一款适合你。
2.3 路由器:以 OpenWrt 为例·
在 OpenWrt 上安装 Tailscale 也非常简单,只要你的内核支持,即可通过 OPKG 安装。因为 Tailscale 通过 Go 实现,因此可能需要一些 Go 的运行时环境。然而,OpenWrt 上游的 Tailscale 一般比较老,我们推荐类似 Debian 12 的安装方式:
1 | curl -fsSL https://tailscale.com/install.sh | sh |
在通过命令行启动了 Tailscale 之后,设备列表里会多出一个网卡,然后以该网卡为基础创建 Interface 即可。
由于 Tailscale 的 MagicDNS 会影响到 OpenWrt 的 DNS 服务,因此建议关闭 OpenWrt Tailscale 上的 MagicDNS,具体实现方式是在启动 tailscale
时添加以下推荐的参数:
1 | tailscale up --accept-routes --ssh --reset --accept-dns=false |
--accept-routes
,接受来自 Tailscale 的路由规则;--ssh
,允许使用 Tailscale 自带的 ssh 服务器接受连接;--reset
,清理此前可能存在的配置;--accept-dns=false
,拒绝 MagicDNS,防止对本地 DNS 产生负面影响,特别是在使用了 OpenClash 等软件时。
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 的局限性·
时至 2024 年末,此前 Tailscale 存在的许多问题现在已经基本全面解决,尚未发现 Tailscale 有什么严重不便的地方。
然而,Tailscale 频繁的升级可能对网络的可用性有影响,而且有时候升级会带来许多破坏性问题,比如失去对 Tailnet 的控制、新加设备 OAuth 请求失效等。建议不要盲目追新,在没有安全隐患的情况下,尽可能延后 VPN 软件的更新升级是一个明智之选。
总结·
本文详细介绍了 Tailscale 的安装和高级用法,其中 Exit Node、Subnet 等方案在实际应用中极具价值。