Tailscale
Tailscale 构建于 WireGuard 之上,并为对等节点提供 OAuth2 (SSO)、OpenID 和 SAML 身份验证,以构建网状网络。它是跨平台的,具有 ACL 设置和内部 DNS。
安装
安装 tailscale。或者,可以使用不稳定版本,通过安装 tailscale-gitAUR 或 tailscale-unstable-binAUR 软件包。
也可以将 tailscale 作为 Docker 容器运行。这样,可以在单台机器上运行多个出口节点,每个节点都有自己的 tailnet。
第三方客户端
- KTailctl — 用于监控和管理 Tailscale 的 GUI。
- trayscale — Tailscale CLI 客户端的非官方 GUI 封装。
- tailscaledesktop — 非官方 Tailscale 桌面应用程序。
- tailscale-systray-git — Tailscale 系统托盘菜单的 Linux 移植。
使用
要使用 tailscale,启用/启动 tailscaled.service
并按如下方式运行服务器
# tailscale up
您可以通过指定 身份验证密钥 来验证无头机器
# tailscale up --authkey=tskey-KEY
注意: 默认情况下,tailscale 会将 日志发送到他们的服务器以进行集中存储。您可能需要通过以下步骤之一选择退出
- 编辑
/etc/default/tailscaled
以包含TS_NO_LOGS_NO_SUPPORT=true
- 编辑
/etc/default/tailscaled
并在FLAGS
中添加--no-logs-no-support
高级用法
使用自定义控制服务器
可以使用自定义控制服务器,例如 headscale。
要登录,请运行
# tailscale up --login-server https://example.com
在无头系统中,可以使用令牌进行非交互式登录。
# tailscale up --login-server https://example.com --authkey your_auth_key
作为 Docker 容器运行
请遵循 本指南,大致了解如何将 tailscale 作为 docker 容器运行。
作为出口节点
为了能够将作为 docker 容器运行的 tailscale 实例用作出口节点,我们需要为容器的网络使用较小的 MTU。这是由于 MTU 相关问题。
如果您还没有自定义网络,请创建一个
# docker network create --opt com.docket.network.driver.mtu=1280 my_custom_network
然后,将该网络用于容器实例
# docker run --detach --name=my_tailscale_container --network=my_custom_network --volume /var/lib/tailscale-exitnode-1:/var/lib/tailscale --env TS_STATE_DIR=/var/lib/tailscale --env TS_USERSPACE=1 --env TS_AUTHKEY=tskey-auth-XXX --env TS_EXTRA_ARGS='--advertise-exit-node' tailscale/tailscale
请注意
- 默认情况下,docker 将创建一个
bridge
类型的网络,因此无需在此处指定它。 - 使用身份验证密钥来验证节点。使用常规 SSO 方法进行身份验证通常需要太长时间,并且该过程可能会在初始身份验证成功之前超时。
- 定义
TS_USERSPACE=1
,以便容器不需要提升的权限(CAP_NET_ADMIN
和CAP_NET_RAW
)。 - 将主机上未使用的目录 (
/var/lib/tailscale-exitnode-1
) 绑定挂载到容器内的/var/lib/tailscale
,并定义TS_STATE_DIR=/var/lib/tailscale
,以便 tailscale 将使用持久状态文件。如果没有这些,出口节点将使用易失性内存来保存状态,因此每次容器重启时都会获得新的 ID 和 tailnet IP 地址 。