一、环境说明
理论上,本教程的核心思想适用于所有可以使用 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 文件
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
,