Tailscale 是一种基于 WireGuard 的虚拟组网工具,提供了出色的功能和易用性。尽管在性能上相较于内核态 WireGuard 略有损失,但其功能和使用便利性使得它非常适合用户使用。以下是 Tailscale 的主要特点:
开箱即用
- 无需配置防火墙
- 没有额外的配置
高安全性/私密性
- 自动密钥轮换
- 点对点连接
- 支持用户审查端到端的访问记录
高级 NAT 穿透
- 除了传统的 ICE、STUN 外,还实现了 DERP TCP 协议
动态配置管理
- 基于公网的控制服务器下发 ACL 和配置,实现节点动态更新
身份认证
- 通过第三方(如 Google)SSO 服务生成用户和私钥
简而言之,Tailscale 是一个更易用、功能更完善的 WireGuard 版本。
Tailscale 对个人用户免费开放,最多支持 20 台设备。除 Windows 和 macOS 的图形应用程序外,其他 Tailscale 客户端组件均在 BSD 许可下开源。可以在 GitHub 仓库中找到各个操作系统的客户端源码。
对于大部分用户来说,免费版 Tailscale 足以满足需求。如果需要更高的功能,可以选择付费版本。
Headscale 是什么
Tailscale 的控制服务器是不开源的,并对免费用户有诸多限制。好在有一款开源的实现叫 Headscale。Headscale 是由欧洲航天局的 Juan Font 使用 Go 语言开发的开源控制服务器,实现了 Tailscale 的主要功能,且没有设备数量限制,所有网络流量都由自己控制。
Headscale 部署
使用 Sealos 一键部署
如果你嫌下面太长不看,可以选择直接使用 Sealos 应用模板一键部署。
复制以下链接到浏览器打开 Sealos 的应用模板部署界面:
如果您是第一次使用 Sealos,需要先注册登录账号。
点击「部署应用」按钮开始部署。部署完成后,你会看到两个应用,一个是 Headscale,另一个是 Headscale 可视化界面。
点击 Headscale 应用的「详情」进入详情页面。内网端口 8080 对应的外网地址就是 Headscale 的公网域名。
Headscale 公网域名后面跟上路径 /admin/
即可打开可视化界面。
在 Linux 上部署
在 Linux 上的部署步骤稍微复杂一些。
首先需要从其 GitHub 仓库的 Release 页面下载最新版的二进制文件。
wget --output-document=/usr/local/bin/headscale \
https://github.com/juanfont/headscale/releases/download/v<HEADSCALE VERSION>/headscale_<HEADSCALE VERSION>_linux_<ARCH>
chmod +x /usr/local/bin/headscale
创建配置目录和存储数据与证书的目录:
mkdir -p /etc/headscale
mkdir -p /var/lib/headscale
touch /var/lib/headscale/db.sqlite
下载并修改配置文件:
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
将 server_url
改为公网 IP 或域名。以下是建议的配置修改:
server_url
设置为http://<PUBLIC_ENDPOINT>:8080
magic_dns
设为 false(如果暂时用不到 DNS 功能)- 建议打开随机端口,将
randomize_client_port
设为 true 自定义私有网段,也可同时开启 IPv4 和 IPv6
ip_prefixes: - 100.64.0.0/16
创建 SystemD service 配置文件:
# /etc/systemd/system/headscale.service
[Unit]
Description=headscale controller
After=syslog.target
After=network.target
[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale
[Install]
WantedBy=multi-user.target
创建 headscale 用户并修改权限:
useradd headscale -d /home/headscale -m
chown -R headscale:headscale /var/lib/headscale
修改配置文件中的 unix_socket
:
unix_socket: /var/run/headscale/headscale.sock
启动服务:
systemctl daemon-reload
systemctl enable --now headscale
查看服务状态:
systemctl status headscale
创建用户
命令行
创建用户:
headscale user create default
查看命名空间:
headscale user list
如果你是通过 Sealos 一键部署的 Headscale,可以在 Headscale 应用的详情页面点击右侧的「终端」按钮进入 Headscale 容器的终端。
可视化界面
Headscale-Admin 需要通过 API Key 来接入 Headscale。首先需要创建 API key:
headscale apikey create
将 Headscale 公网域名和 API Key 填入 Headscale-Admin 的设置页面,取消勾选 Legacy API,然后点击「Save」。
接入成功后,点击左边侧栏的「Users」,然后点击「Create」开始创建用户。
Tailscale 客户端接入
目前除了 iOS 客户端,其他平台的客户端都可以自定义 Tailscale 的控制服务器。
Linux
下载 Tailscale 二进制文件:
wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz
tar zxvf tailscale_1.22.2_amd64.tgz
cp tailscale_1.22.2_amd64/tailscaled /usr/sbin/tailscaled
cp tailscale_1.22.2_amd64/tailscale /usr/bin/tailscale
cp tailscale_1.22.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service
cp tailscale_1.22.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled
启动 tailscaled 服务并设置开机自启:
systemctl enable --now tailscaled
Tailscale 接入 Headscale:
tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false
在 Headscale-Admin 的 Deploy 界面获取接入命令:
根据提示在浏览器中打开注册链接,并将其中的命令复制粘贴到 headscale 所在机器的终端中,替换 USERNAME 为前面所创建的 user。
macOS
macOS 有三种安装方法:
具体操作步骤可以参考 Headscale 提供的详细指南。长按「ALT」键,点击顶部菜单栏的 Tailscale 图标,然后
在「Debug」菜单下选择「Add Account...」,填入 Headscale 的公网域名。
Android
Android 客户端从 1.30.0 版本开始支持自定义控制服务器。在 Tailscale App 中点开右上角的“三个点”,选择 Change server
,填入 Headscale 控制服务器的地址。
Windows
Windows Tailscale 客户端可以通过浏览器打开 URL:https://<HEADSCALE_PUB_ENDPOINT>/windows
,按照步骤操作即可。
iOS
iOS 系统直接从应用商店安装,然后在「设置」中找到「Tailscale」,输入 Headscale 公网域名。重新打开 Tailscale,选择「Log in」。
通过 Pre-Authkeys 接入
首先在服务端生成 pre-authkey 的 token:
headscale preauthkeys create -e 24h --user default
在 Headscale-Admin 中生成 pre-authkey,设置过期时间并勾选 Reusable
。
新节点通过以下命令直接接入:
tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false --authkey $KEY
打通局域网
为了让各个节点能够访问其他节点的局域网 IP,需要进行以下配置:
设置 IPv4 与 IPv6 路由转发:
echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf
sysctl -p /etc/sysctl.d/ipforwarding.conf
客户端修改注册节点的命令,添加 --advertise-routes=192.168.100.0/24
:
tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.100.0/24 --reset
在 Headscale 端开启路由:
headscale routes enable -i 6 -r "192.168.100.0/24"
其他节点启动时增加 --accept-routes=true
选项。
总结
Tailscale 以其高安全性、易用性和出色的 NAT 穿透能力,成为了基于 WireGuard 的组网工具中的佼佼者。无论是个人用户还是企业用户,都能通过 Tailscale 轻松实现高效、安全的网络连接。Headscale 作为 Tailscale 的开源控制服务器,实现了对设备数量和功能的无限制支持,使用户可以完全掌控自己的网络。