跳转至内容

Tailscale

来自 ArchWiki

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

安装

安装 tailscale 并重新启动您的系统。

也可以将 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 并将 --no-logs-no-support 添加到 FLAGS
如果您选择退出集中式日志记录,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 地址

技巧与提示

与 NetworkManager 一起使用

如果您使用 NetworkManager,您可能会注意到您的 tailnet 中与其他设备连接出现问题。这是由于 NetworkManager 和 tailscaled 之间发生了管理冲突。

要解决此问题,我们需要 NetworkManager 来取消管理 tailscale 网络设备(例如 tailscale0)。

为此,只需创建一个类似 /etc/NetworkManager/conf.d/99-tailscale.conf 的配置文件,其中包含以下内容

[keyfile]
unmanaged-devices=interface-name:tailscale0

然后 重新启动 NetworkManager.servicetailscaled.service

您可能还需要重新启动 tailscale

# tailscale down
# tailscale up

之后,您应该能够 ping 到 tailnet 中的其他设备。

Magic DNS

Tailscale 期望系统具有工作的 systemd-resolved 来设置 DNS 服务器和来自 tailnet 配置的搜索后缀,否则它会 尝试覆盖 /etc/resolv.conf

故障排除

Tailscale 启动时崩溃

启动 tailscaled.service 后,它可能会崩溃并陷入重启循环。这可能是由于缺少 tun 内核模块。要验证这是否确实是这种情况,请通过 systemd 查看 tailscaled.service 的日志

# systemctl status tailscaled.service

或者,在您的终端中以 root 用户身份运行二进制文件

# /usr/sbin/tailscaled

systemctl status 中或通过运行二进制文件可能会出现以下或类似的错误

...is CONFIG_TUN enabled in your kernel? modprobe tun failed with: modprobe: FATAL: Module tun not found in directory /lib/modules/5.17.4-arch1-1 kernel/drivers/net/tun.ko found on disk, but not for current kernel; are you in middle of a system update and haven't rebooted? found: /lib/modules/5.17.8-arch1-1/kernel/drivers/net/tun.ko.zst wgengine.NewUserspaceEngine(tun "tailscale0") error: tstun.New("tailscale0"): no such device

如果是这样,只需重新启动系统,然后观察 tailscaled.service 是否处于活动状态,而不是通过 systemctl status 加载。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.