绿联UGOS Pro通过Docker Compose安装Tailscale,支持headscale
一、环境说明
理论上,本教程的核心思想适用于所有可以使用 docker 的场景。但本人只有一个绿联NAS设备,因此只能以此作为实验环境。
UGOS Pro 版本:1.0.0.0980
Docker Compose 版本:UGOS Pro 默认已经安装 Docker Compose。
UGOS Pro 自带docker compose二、申请 Tailscale Auth key
为了后续方便 tailscale 认证登录,使用 Auth key 认证的方法。
登录 tailscale 官网,依次点击 Settings - Keys - Generate auth key...👇
tailscale官网申请Auth key_1在弹出的界面,Description 填写自己喜欢的名字,然后点击 Generate key,Auth key 只会显示一次,复制保存后可以关闭👇
tailscale官网申请Auth key_2三、拉取 docker 镜像
在镜像仓库输入 tailscale,选择 tailscale/tailscale 下载,默认 latest 镜像即可👇
拉取tailscale镜像四、创建 tailscale 文件夹,并获取 docker 真实目录
UGOS Pro 开启 docker 功能后,会自动创建 docker 文件夹。在共享文件夹里找到 docker 文件夹,在其里面创建一个 tailscale 文件夹。
然后我们创建的 tailscale 里再创建一个 state 文件夹,后续用于存储 tailscaled 的状态,确保在 tailscale 容器重新启动时,之前配置好的状态保持不变👇
创建tailscale容器相关文件夹下面获取 docker 目录的真实路径。右键我们创建的 tailscale 文件夹,查看 属性👇
获取 docker 目录的真实路径_1在 属性 - 常规 - 位置 末,点击复制按钮,然后随便找个地方粘贴,可以看到 tailscale 真实路径类似 /volume[x]/docker/tailscale。
如图,所以我的 docker 真实路径是 /volume1/docker。👇
获取 docker 目录的真实路径_2五、使用 root 用户登录 SSH
在 UGOS Pro 的控制面板打开 SSH 登录后,用自己的用户名和密码登录 SSH 后,输入 sudo -i,然后输入自己的用户密码,切换 root 权限。
更多有关内容 key 参考矿神教程 : https://imnks.com/10101.html。
使用 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 行的内容👇
创建 docker-compose.yaml 文件SSH 通过 cd 命令进入到 docker 目录。以下命令的 volume1 改为自己真实路径中的 volume[x],注意实际是没有[ ]符号👇
cd /volume1/docker
cd 命令进入 docker 目录在 docker 目录下,输入 docker compose up -d 启动容器👇
启动 tailscale 容器回到在 UGOS Pro 的 Web 界面,打开 docker 应用,可以看到 tailscale 已经启动,并在运行中👇
tailscale 容器成功运行七、允许 tailscale 登录
回到 tailscale 官网,在 Machines 栏可以看到 ugospro 已经 Connected,点击 Connected 右侧的三个小点,先点击 Disable key expiry,这样 UGOS Pro 上的 tailscale 登录永远不会超时。然后点击 Edit route settings...,在弹出的界面勾选自己的内网网段,然后点击 Save,这样就允许内网转发了👇
允许 tailscale 登录_1
允许 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,延时好了一点点,估计是网络链接稳定了👇
tailscale 测试然后测试使用自建 headscale。
在 Windows 终端输入 tailscale status,红框位置显示 direct,说明使用自建 headscale 下打洞成功,两者为何有区别没有深入研究。
输入 ping 192.168.10.1,发现延时只有 10+ms,应该是直连无疑👇
headscale 测试九、最后
在最后,还想分享一些 Tips。
1. 如果想从官方 tailscale 切换到自建 headscale,或者从自建 headscale 切换到 tailscale。我的做法是,
先停止现在的 tailscale,然后在UGOS Pro的 docker 管理界面中删除 tailscale 容器,删除的时候注意不要勾选任何目录数据,直接点确认删除👇

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

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

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 文件👇

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

HLAB
校验提示文案
让我来滋醒他
校验提示文案
landuan
校验提示文案
值友2005131198
校验提示文案
snakeliar
校验提示文案
穗織鋼板傳_从雨绫
校验提示文案
snakeliar
校验提示文案
穗織鋼板傳_从雨绫
校验提示文案
值友2005131198
校验提示文案
HLAB
校验提示文案
landuan
校验提示文案
让我来滋醒他
校验提示文案