在 OpenWrt 上优雅地管理 Tailscale:luci-app-tailscale-community
项目地址
https://github.com/tokisaki-galaxy/luci-app-tailscale-community
简介
Tailscale 作为一种基于 WireGuard 的零配置 VPN,极大地简化了设备之间的安全连接。对于在 OpenWrt 路由器上运行 Tailscale 的用户来说,通过命令行进行管理虽然可行,但远不如图形化界面来得直观和高效。为了解决这一问题,我开发了 luci-app-tailscale-community
,一个专为 OpenWrt LuCI 界面设计的 Tailscale 管理插件。
luci-app-tailscale-community
旨在提供一个原生集成、功能全面的 Web 界面,让用户可以轻松地监控 Tailscale 网络状态并调整各项配置,而无需登录 SSH。
核心功能概览
该插件将 Tailscale 的核心功能无缝集成到 LuCI 的“服务”菜单下,主要分为“状态”和“设置”两个部分。
1. 状态仪表盘
提供对 Tailscale 网络健康状况的即时洞察:
- 服务状态: 清晰地显示
tailscaled
守护进程是“运行中”还是“未运行”。 - 设备 IP: 展示当前设备的 Tailscale IPv4 和 IPv6 地址。
- 网络设备列表: 以表格形式详尽列出 Tailnet 中的所有对等节点(Peers),包含以下关键信息:
- 在线状态: 通过颜色标识节点是在线还是离线。
- 主机名与 DNS: 显示设备的主机名和完整的 Tailscale DNS 名称。
- 连接类型: 指明连接是“直连 (Direct)”还是通过“中继 (Relay)”,并显示中继服务器信息。
- 操作系统 和 Tailscale IP。
- 最后在线时间: 对于离线设备,显示其最后一次活跃的时间。
2. 强大的设置管理
设置页面通过两个标签页,区分了即时生效的节点设置和需要重启服务的守护进程设置。
节点设置 (Node Settings)
这些设置通过调用tailscale set
命令实现,更改会立即生效,无需中断服务。支持的配置项包括:- 接受/通告路由 (
Accept Routes
/Advertise Routes
) - 作为或使用出口节点 (
Advertise as Exit Node
/Use Exit Node
) - 为子网路由启用 SNAT
- 启用内置 SSH 服务器
- 切换
Shields Up
模式以增强安全性 - 设置自定义主机名
- 接受/通告路由 (
守护进程环境设置 (Daemon Environment Settings)
这些高级选项通过修改tailscaled
启动时的环境变量来实现,因此在保存后需要重启服务。- 自定义 MTU: 解决特定网络环境下的连接问题。
- 减少内存使用: 针对内存有限的设备进行优化,通过设置
GOGC=10
环境变量,以少量 CPU 开销换取更低的内存占用。
技术实现
luci-app-tailscale-community
主要使用 Lua 编写,并遵循 LuCI 的 MVC 架构。
- 数据模型:
luasrc/model/tailscale_data.lua
是核心数据加载器。它通过执行tailscale status --json
和tailscale ip
命令获取实时状态,并解析/etc/tailscale/tailscaled.state
文件以获取更详细的运行时配置。 - CBI 界面:
luasrc/model/cbi/tailscale_status.lua
和tailscale_settings.lua
文件使用 LuCI 的 CBI (Configuration Binding Interface) 框架来构建用户界面,并将前端选项与后端配置和命令关联起来。 - 配置应用: 对于守护进程设置,插件会动态创建或更新位于
/etc/profile.d/
的一个 shell 脚本,确保在tailscaled
服务启动时能加载正确的环境变量。
安装与使用
安装过程非常简单:
- 前提条件: 确保您的 OpenWrt 设备已安装
tailscale
和coreutils-base64
。1
2opkg update
opkg install tailscale coreutils-base64 - 安装插件: 从项目的 GitHub Release 页面下载最新的
.ipk
软件包,上传到路由器并使用opkg
安装。也可以从项目的action下载1
opkg install luci-app-tailscale-community_*.ipk
安装完成后,刷新 LuCI 页面,即可在“服务”菜单下找到“Tailscale”入口。
在 OpenWrt 上优雅地管理 Tailscale:luci-app-tailscale-community
https://tokisaki.top/blog/luci-app-tailscale-community/