Tailscale

出自 ArchWiki

Tailscale 构建于 WireGuard 之上,并为对等节点提供 OAuth2 (SSO)、OpenID 和 SAML 身份验证,以构建网状网络。它是跨平台的,具有 ACL 设置和内部 DNS。

安装

安装 tailscale。或者,可以使用不稳定版本,通过安装 tailscale-gitAURtailscale-unstable-binAUR 软件包。

也可以将 tailscale 作为 Docker 容器运行。这样,可以在单台机器上运行多个出口节点,每个节点都有自己的 tailnet。

第三方客户端

  • KTailctl — 用于监控和管理 Tailscale 的 GUI。
https://github.com/f-koehler/KTailctl || ktailctlAUR
  • trayscale — Tailscale CLI 客户端的非官方 GUI 封装。
https://github.com/DeedleFake/trayscale || trayscaleAUR
  • tailscaledesktop — 非官方 Tailscale 桌面应用程序。
https://gitlab.com/tailscaledesktop/application || tailscaledesktopAUR
  • tailscale-systray-git — Tailscale 系统托盘菜单的 Linux 移植。
https://github.com/mattn/tailscale-systray || tailscale-systray-gitAUR

使用

要使用 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
如果您选择退出集中日志记录,Tailscale 可能无法提供技术支持。

高级用法

使用自定义控制服务器

可以使用自定义控制服务器,例如 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_ADMINCAP_NET_RAW)。
  • 将主机上未使用的目录 (/var/lib/tailscale-exitnode-1) 绑定挂载到容器内的 /var/lib/tailscale,并定义 TS_STATE_DIR=/var/lib/tailscale,以便 tailscale 将使用持久状态文件。如果没有这些,出口节点将使用易失性内存来保存状态,因此每次容器重启时都会获得新的 ID 和 tailnet IP 地址

参见