一、环境说明

理论上,本教程的核心思想适用于所有可以使用 docker 的场景。但本人只有一个绿联NAS设备,因此只能以此作为实验环境。

UGOS Pro 版本:1.0.0.0980

Docker Compose 版本:UGOS Pro 默认已经安装 Docker Compose。

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaleUGOS Pro 自带docker compose

二、申请 Tailscale Auth key

为了后续方便 tailscale ​认证登录,使用 Auth key ​认证的方法。

登录 tailscale ​官网,依次点击 Settings - Keys - Generate auth key...​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaletailscale官网申请Auth key_1

在弹出的界面,Description ​填写自己喜欢的名字,然后点击 Generate key​,Auth key ​只会显示一次,复制保存后可以关闭

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaletailscale官网申请Auth key_2

三、拉取 docker 镜像

在镜像仓库输入 tailscale​,选择 tailscale/tailscale ​下载,默认 latest ​镜像即可

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale拉取tailscale镜像

四、创建 tailscale 文件夹,并获取 docker 真实目录

UGOS Pro 开启 docker 功能后,会自动创建 docker ​文件夹。在共享文件夹里找到 docker ​文件夹,在其里面创建一个 tailscale ​文件夹。

然后我们创建的 tailscale ​里再创建一个 state ​文件夹,后续用于存储 tailscaled​ 的状态,确保在 tailscale 容器重新启动时,之前配置好的状态保持不变

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale创建tailscale容器相关文件夹

下面获取 docker ​目录的真实路径。右键我们创建的 tailscale ​文件夹,查看 属性​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale获取 docker ​目录的真实路径_1

在 属性 - 常规 - 位置 ​末,点击复制按钮,然后随便找个地方粘贴,可以看到 tailscale ​真实路径类似 /volume[x]/docker/tailscale​。

如图,所以我的 docker ​真实路径是 /volume1/docker​。

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale获取 docker ​目录的真实路径_2

五、使用 root 用户登录 SSH

在 UGOS Pro 的控制面板打开 SSH 登录后,用自己的用户名和密码登录 SSH 后,输入 sudo -i​,然后输入自己的用户密码,切换 root ​权限。

更多有关内容 key 参考矿神教程 : https://imnks.com/10101.html。

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale使用 root 用户登录 SSH

六、通过 Docker Compose 创建容器

以下是 docker-compose.yaml ​说明,先阅读完以下几点,确认无误后再复制到 ssh 中执行。

  • 第 1 行:volume1 ​改为自己真实路径中的 volume[x]​,注意实际是没有符号[ ]。
  • 第 9 行:使用 AUTHKEY 登录,替换成自己的 Auth key​;如果是使用 headscale​,则填入 headscale ​生成的 auth key​。
  • 第 10 行:如果我们希望配合自己搭建的 headscale ​使用,把 --login ​前的符号 # 删除,并把 http://headscaleserver.com ​替换成自己的服务器地址。
  • 第 12 行:如果需要开启内网转发,访问内网其它设备,把 TS_ROUTES ​前的符号 # 删除,并把 192.168.10.0/24 ​改为自己的内网网段。

cat >/volume1/docker/docker-compose.yaml <

services:

tailscale:

image: tailscale/tailscale:latest

container_name: tailscale

network_mode: "host" # 使用本地网络, 方便连接各子网的客户端

privileged: true # 开启特权模式

environment:

TS_AUTHKEY: tskey-auth-kGr12345ym11CNTRL-X67890QPnLSLxgPnFh4aMSytAxixihaha

TS_EXTRA_ARGS: --netfilter-mode=off #--login-server=http://headscaleserver.com

TS_STATE_DIR: /var/lib/tailscale # 存储 tailscale 状态的目录, 后面映射到宿主机, 确保在容器重新启动时配置保持不变

#TS_ROUTES: 192.168.10.0/24

TS_HOSTNAME: ugospro # 节点名字, 可自定义

volumes:

- ./tailscale/state:/var/lib/tailscale # 映射 tailscale 状态目录到我们创建的tailscale/state内

- /dev/net/tun:/dev/net/tun

- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro

cap_add:

- net_admin

- sys_module

restart: unless-stopped

EOF

运行该段命令后,会在 docker ​目录下创建一个 docker-compose.yaml ​文件,该文件的内容就是上面第 2 行到第 21 行的内容

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale创建 docker-compose.yaml 文件

SSH 通过 cd ​命令进入到 docker ​目录。以下命令的 volume1 ​改为自己真实路径中的 volume[x]​,注意实际是没有[ ]符号

cd /volume1/docker​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscalecd 命令进入 docker 目录

在 docker ​目录下,输入 docker compose up -d ​启动容器​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale启动 tailscale 容器

回到在 UGOS Pro 的 Web 界面,打开 docker 应用,可以看到 tailscale ​已经启动,并在运行中​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaletailscale 容器成功运行

七、允许 tailscale 登录

回到 tailscale ​官网,在 Machines ​栏可以看到 ugospro ​已经 Connected​,点击 Connected ​右侧的三个小点,先点击 Disable key expiry​,这样 UGOS Pro 上的 tailscale 登录永远不会超时。然后点击 Edit route settings...​,在弹出的界面勾选自己的内网网段,然后点击 Save​,这样就允许内网转发了​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale允许 tailscale 登录_1
绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale允许 tailscale 登录_2

八、测试

测试网络说明:工作室的电脑使用的是电信宽带;绿联 NAS 放家里,用的是移动宽带。

首先测试一下使用官方 tailscale​。

​Windows ​打开终端,输入 tailscale status​,可以看到 ugospro 在线,其中 relay ​说明是走官方 derp ​节点,没有打洞成功。

然后输入 ping 100.86.190.34​,其中 100.86.190.34 ​是 tailscale ​分配给 IP,看到延时还是很大的,但又不是不能用,是吧。

最后输入 ping 192.168.10.1​,其中 192.168.10.1 ​是我路由器内网 IP,延时好了一点点,估计是网络链接稳定了

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaletailscale 测试

然后测试使用自建 headscale​。

在 Windows 终端输入 tailscale status​,红框位置显示 direct​,说明使用自建 headscale ​下打洞成功,两者为何有区别没有深入研究。

输入 ping 192.168.10.1​,发现延时只有 10+ms,应该是直连无疑​

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscaleheadscale 测试

九、最后

在最后,还想分享一些 Tips​。

1. 如果想从官方 tailscale 切换到自建 headscale,或者从自建 headscale 切换到 tailscale。我的做法是,

  • 先停止现在的 tailscale,然后在UGOS Pro的 docker 管理界面中删除 tailscale 容器,删除的时候注意不要勾选任何目录数据,直接点确认删除

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale

  • 进入之前创建的 /docker/tailscale/state,选中里面所有的内容,右键删除

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale

  • 把前面在 docker 目录下创建的 docker-compose.yaml 内的 TS_AUTHKEY 替换成 tailscale 或 headscale 的 key。替换方法多种多样,可以在 UGOS Pro 的应用中心安装文本编辑器,然后双击 docker-compose.yaml ,就会使用文本编辑器打开,找到 TS_AUTHKEY 并替换。当然,高手可以通过 SSH 通过命令行修改

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale

  • docker-compose.yaml 文件修改完成后,SSH 连接 NAS,参考步骤六,cd 命令进入 docker 目录,执行 docker compose up -d 命令重新创建和运行 tailscale 容器。之后就去 tailscale 官方后台或者自建的 headscale 后台允许登录,允许子网转发等。

2. docker-compose.yaml 下 environment 中的 TS_EXTRA_ARGS 可以填写很多关键字,比如希望把 NAS 作为 exit-node,在 TS_EXTRA_ARGS 内追加关键字 --advertise-exit-node 即可实现。

更多有关 TS_EXTRA_ARGS 信息可以参考官方指南参考: Using Tailscale with Docker · Tailscale Docs

有关 docker 下使用 tailscale 的更多信息,也可查看官方手册: Using Tailscale with Docker · Tailscale Docs。

3. 有关 headscale 的搭建,可以参考这个教程,已经很详细了: https://zhuanlan.zhihu.com/p/689675885

这里面有一个需要注意的点,就是下载 headscale 的配置文件模板 config.yaml 时,要下载和你拉取 docker 镜像相对应版本的 config.yaml,否则 headscale 无法正常启动。所以拉取 headscale 时建议拉取指定的版本,然后再去代码仓找到版本对应 Tags 下的 config.yaml 文件

绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。