系统环境:
- OpenWrt 路由器 (本例中使用 GL-A1300,架构为 ARMV7)
步骤一:下载并解压 Tailscale 二进制文件
首先,我们需要获取适用于你的 OpenWrt 路由器 CPU 架构的 Tailscale 二进制文件。
-
确定路由器 CPU 架构:
通过 SSH 连接到你的 OpenWrt 路由器,并运行以下命令确定 CPU 架构。通常是arm
、aarch64
、mips
、mipsel
等。
opkg print-architecture
(或者简单地
uname -m
)
本例中为arm
。 -
下载 Tailscale 压缩包:
前往 Tailscale 官方下载页面获取最新的稳定版链接:https://pkgs.tailscale.com/stable/
。
找到与你的架构匹配的tailscale_VERSION_ARCH.tgz
文件。
cd /tmp # 替换为你的架构和最新版本号 wget https://pkgs.tailscale.com/stable/tailscale_1.84.0_arm.tgz
注意: 如果下载过程中出现
tar: unexpected end of file
或tar: short read
错误,表示文件下载不完整或损坏。请删除文件并重新下载。 -
解压文件:
tar -zxvf tailscale_1.84.0_arm.tgz
解压后会生成一个名为
tailscale_1.84.0_arm/
的目录。
步骤二:移动二进制文件并设置权限
将解压出的 tailscale
客户端和 tailscaled
守护进程移动到系统路径下,并赋予执行权限。
-
移动文件:
mv tailscale_1.84.0_arm/tailscale /usr/sbin/ mv tailscale_1.84.0_arm/tailscaled /usr/sbin/
选择
/usr/sbin/
是因为它是存放系统二进制可执行文件的标准路径。 -
设置可执行权限:
chmod +x /usr/sbin/tailscale /usr/sbin/tailscaled
步骤三:创建并配置 Tailscale 服务启动脚本 (init script)
OpenWrt 不使用 systemd
,所以我们需要创建一个 SysV init 脚本来管理 tailscaled
守护进程的启动和停止。
-
创建服务脚本文件:
vi /etc/init.d/tailscale
-
粘贴脚本内容:
进入vi
后按i
进入插入模式,然后粘贴以下内容:
#!/bin/sh /etc/rc.common START=95 STOP=10 USE_PROCD=1 PROCD_DEBUG=0 # 调试完成后建议设为 0,减少日志量 start_service() { procd_set_param pidfile /var/run/tailscaled.pid procd_set_param file /etc/config/tailscale # procd 需要一个文件来监控,此处可指向任意相关文件 procd_set_param stdout 1 procd_set_param stderr 1 # 定义 tailscaled 启动命令 # --state: 状态文件路径,重要!用于持久化认证信息和网络状态。 # --socket: socket 文件路径,tailscale 客户端通过此与守护进程通信。 # --tun=userspace-networking: 使用用户空间网络模式,在 OpenWrt 上兼容性更好。 # --accept-routes: 如果希望路由器接受其他 Tailscale 节点广播的子网路由,则添加此参数。 # --advertise-exit-node: 如果希望路由器作为出口节点,则添加此参数。 # --advertise-routes=192.168.X.0/24: 如果希望广播路由器本地局域网,替换为你的实际CIDR。 procd_open_instance procd_set_param command /usr/sbin/tailscaled \ --state=/var/lib/tailscale/tailscaled.state \ --socket=/var/run/tailscale/tailscaled.sock \ --tun=userspace-networking \ --accept-routes \ --advertise-exit-node \ --advertise-routes=192.168.8.0/24 # 替换为你的实际LAN IP段,本例为192.168.8.1/24 procd_close_instance } stop_service() { /usr/sbin/tailscale down # 优雅地关闭 Tailscale 连接 killall tailscaled # 确保守护进程完全停止 }
参数说明:
* `--state=/var/lib/tailscale/tailscaled.state`:Tailscale 的状态文件,用于保存登录信息和网络配置,**必须指定一个持久化存储的路径**。
* `--socket=/var/run/tailscale/tailscaled.sock`:`tailscale` 客户端与 `tailscaled` 守护进程通信的 socket 文件路径。
* `--tun=userspace-networking`:在 OpenWrt 上推荐使用用户空间网络模式,避免内核模块依赖问题。
* `--accept-routes`:**(可选)** 如果你需要路由器访问其他 Tailscale 节点广播的子网路由,请保留此参数。
* `--advertise-exit-node`:**(可选)** 如果你需要路由器作为其他 Tailscale 设备的互联网出口节点,请保留此参数。
* `--advertise-routes=192.168.8.0/24`:**(可选)** 如果你需要将路由器所连接的本地局域网(例如 `192.168.8.0/24`)广播到 Tailscale 网络中,请修改为你的实际局域网 CIDR。
保存并退出
vi
:
按Esc
,然后输入:wq
,回车。-
创建必要目录:
tailscaled
需要这些目录来存放状态文件和 socket 文件。
mkdir -p /var/lib/tailscale mkdir -p /var/run/tailscale
-
设置脚本权限并启用自启动:
chmod +x /etc/init.d/tailscale /etc/init.d/tailscale enable
-
启动 Tailscale 服务:
/etc/init.d/tailscale start
-
验证
tailscaled
服务是否运行:
ps | grep tailscaled | grep -v grep
你应该能看到
tailscaled
进程在运行。如果没有,请检查/etc/init.d/tailscale
脚本内容和logread | grep tailscale
的输出。
步骤四:Tailscale 设备认证
服务启动后,需要进行一次认证,将路由器加入你的 Tailscale 网络。
-
执行认证命令:
tailscale up
命令会输出一个 URL,类似于
https://login.tailscale.com/a/tskey-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
。 在浏览器中完成认证:
将上述 URL 复制到你的电脑或手机浏览器中。
登录你的 Tailscale 账户,并完成设备的授权。你会看到“Login successful”等提示。
步骤五:配置 OpenWrt 防火墙 (这个步骤可以省略)
这个步骤具备高风险,容易导致机器故障,谨慎执行;不想继续折腾的,这个步骤省略即可;
-
备份配置文件:
cp /etc/config/firewall /etc/config/firewall.bak
-
编辑
/etc/config/firewall
添加 Tailscale 防火墙区域:
vi /etc/config/firewall
在文件末尾或任何合适位置添加以下内容:
config zone option name 'tailscale' option network 'tailscale' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' option masq '1'
config forwarding
option src 'tailscale'
option dest 'lan'
config forwarding
option src 'lan'
option dest 'tailscale'
```
保存并退出 (`:wq`)。
-
重启防火墙服务:
/etc/init.d/firewall restart
检查服务状态:
/etc/init.d/tailscale status
- 查看 Tailscale 状态:
tailscale status
- 查看日志:
logread | grep tailscale
Top comments (0)