-
Notifications
You must be signed in to change notification settings - Fork 1.4k
一些零碎的教程
本页汇总若干 OpenClash 和 OpenWrt 实用配置教程。
- 配置转换相关
- 1.1 ImmortalWrt 下搭建本地转换服务
- 1.2 本地转换服务导入模板和规则
- OpenWrt 相关
- 2.1 固件扩容(有风险)
- 2.2 OpenWrt 与 Tailscale 子网互通方案(fw4、SNAPSHOT)
部分用户倾向于在 OpenWrt 设备上运行转换服务,减少对公共转换服务的依赖。
ImmortalWrt 软件源中的 subconverter 软件包是传统 subconverter,不是 SubConverter-Extended。两者的功能、接口扩展和维护节奏可能不同;本节只说明软件源中的传统 subconverter。需要 SubConverter-Extended 功能时,请按照该项目的部署文档另行安装。
安装步骤:
1. 进入软件包界面,点击「更新列表」
2. 在过滤器中输入 subconverter
3. 找到 `subconverter` 软件包,点击「安装」
通常使用默认配置即可满足需求;默认配置已关闭缓存,无需修改参数。
安装完成后,在 OpenClash 的订阅配置页面中,将「订阅转换服务地址」修改为:
http://127.0.0.1:25500/sub
重要配置说明:
OpenClash 内置模板多为 GitHub 直链,在部分网络环境下可能不稳定。如果转换服务无法拉取这些文件,可以将链接替换为可用的备用下载源,例如对应的 jsDelivr 地址。
Warning
注意: 如果转换服务无法访问模板或规则地址,将无法拉取远程文件。服务会自动回退到内置默认模板,导致策略组或规则结构不符合预期。请确保转换服务能够访问相关地址,或使用可用的备用下载源。
以 ImmortalWrt 为例,subconverter 的默认配置目录为 /etc/subconverter。
将自定义的 .ini 模板文件上传至 /etc/subconverter/config 目录(例如 example.ini)。在引用时,使用路径 config/example.ini。
也可以将模板文件上传至 /etc/subconverter/base 目录。在 OpenClash 的「自定义模板的地址」中,直接填写文件名 example.ini 即可调用。
将规则文件(.list)上传至 /etc/subconverter/rules 目录。在模板文件中引用时,使用路径 rules/your_rules.list。
配置示例:
ruleset=🎯 全球直连,rules/your_rules.list完成以上配置后,转换程序以及本节已经本地化的模板和规则不再依赖对应的 GitHub 文件,便于自行维护。
这不代表整个转换过程可以离线运行。订阅地址、模板中仍然引用的远程规则、软件包更新和其他外部资源仍可能需要网络访问。只有将实际引用的全部输入一并本地托管并逐项验证后,才能将该部署视为不依赖远程文件。
使用官方发布的 OpenWrt 或 ImmortalWrt 固件时,可以通过 owut 配合 ASU(Attended Sysupgrade)服务器,在生成升级固件时指定根文件系统大小,并在后续升级中继续沿用该设置。
Caution
扩容与系统升级都属于高风险操作。 更改根文件系统大小时,部分平台可能丢失配置;OpenWrt 官方文档特别提示 x86 平台曾多次出现这一情况。操作前务必下载完整配置备份,并确认即使 LAN 地址恢复为 192.168.1.1,仍可重新连接设备。
本教程基于 ext4 分区验证,SquashFS 分区未经测试。不同设备、分区布局与 ASU 服务器的行为可能不同,请以当前设备的 owut check 输出为准。
操作步骤:
根据固件的包管理器版本执行更新命令:
-
APK:
apk update -
OPKG:
opkg update
安装 owut 和 attendedsysupgrade:
-
APK:
apk add luci-i18n-attendedsysupgrade-zh-cn owut -
OPKG:
opkg install luci-i18n-attendedsysupgrade-zh-cn owut
若运行在 PVE、ESXi 等虚拟化平台,需先在虚拟机管理界面调整虚拟磁盘大小。虚拟磁盘大小必须大于或等于调整后的容量。
默认情况下,owut 仅在当前请求中应用临时参数。配置永久参数可确保后续升级自动维持指定容量。
Tip
固件大小上限由所用 ASU 服务器决定。执行前,请在服务器状态信息中确认「Maximum requested root filesystem size」。
执行以下命令写入配置:
uci set attendedsysupgrade.owut=owut
# 设置固件大小为 1024MB (1GB)
uci set attendedsysupgrade.owut.rootfs_size='1024'
uci commit
先执行检查,确认目标版本、软件包变更、文件系统类型与根文件系统大小均符合预期:
owut check确认无异常并完成备份后,再运行升级命令:
owut upgrade --forceTip
本扩容教程建议使用 --force。仅修改 rootfs_size 时,目标固件版本可能与当前版本相同,owut 可能判断「没有检测到版本变更」而不继续;--force 可以在这种情况下强制完成构建、下载和升级。它也会允许存在软件包降级的升级继续执行,因此仍应先查看 owut check 的结果,确认变更符合预期后再执行。
升级成功后,rootfs_size 配置会继续供 owut 使用;新版 LuCI Attended Sysupgrade 也能读取该设置。配置是否能在首次改变分区大小时完整保留,取决于具体平台,因此必须保留可恢复的备份。
- 原则上采用最小化配置,不做无必要的修改。
- 配合值守式系统升级,在正常情况下保留配置;升级后仍需复查服务与路由状态。
- 在多台 OpenWrt 路由器之间实现三层子网互通。
- 各子网使用独立的公网出口。
- 不合并 LAN 广播域,也不自动转发二层广播。
- 仅允许通过明确的 IP 地址访问对端。
- 增删子网设备时,无需调整防火墙规则。
- 不需要在公网开放任何端口。
- OpenWrt 或 ImmortalWrt 的 SNAPSHOT 版本
- 防火墙:fw4(基于 nftables)
- Tailscale 使用软件源中自带版本
- 各 LAN 子网不重叠
Note
本教程以两个节点为例。添加更多节点时,操作相同,但各节点的内网地址不得重复。
示例:
| 节点 | 子网 |
|---|---|
| A | 192.168.1.0/24 |
| B | 192.168.2.0/24 |
apk update
apk add tailscale/etc/init.d/tailscale enable
/etc/init.d/tailscale start使用 OpenWrt 软件包自带的 init 脚本启动,可以由系统管理服务状态,并在设备重启后自动恢复。不要使用 tailscaled & 临时放到后台运行。
确认服务正在运行,并检查 IPv4 转发:
pgrep -a tailscaled
sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward 的值应为 1。OpenWrt 作为路由器时通常已经启用。
A(192.168.1.0/24):
tailscale up \
--advertise-routes=192.168.1.0/24 \
--snat-subnet-routes=false \
--accept-routes \
--accept-dns=falseB(192.168.2.0/24):
tailscale up \
--advertise-routes=192.168.2.0/24 \
--snat-subnet-routes=false \
--accept-routes \
--accept-dns=false--snat-subnet-routes=false 用于保留原始 LAN 源地址,适合本文的站点到站点互通目标;--accept-routes 则让 Linux 或 OpenWrt 接受其他子网路由器通告的路由。
SSH 终端中会显示登录链接。复制链接并在浏览器中打开,完成 Tailscale 账号注册或登录。完成登录后,SSH 终端会显示 Success,表示绑定成功。
在 Tailscale 官网的「Admin Console」中:
- 在「Machines」页面分别批准双方通告的子网路由(subnet routes)。
批准子网路由后,确认现有 tailnet 访问控制策略允许两个子网双向通信。如果 tailnet 仍使用默认的全放行策略,则无需修改。仅当现有自定义策略限制两个子网之间的访问时,才需要在「Access controls」中添加允许双向访问的 grants 或等效 ACL 规则。
ip route get <对端网关IP>期望结果:
dev tailscale0
Important
在 fw4 中配置动态接口 tailscale0 时,必须使用 option device,不要使用 option network。
uci add firewall zone
uci set firewall.@zone[-1].name='tailscale'
uci set firewall.@zone[-1].device='tailscale0'
uci set firewall.@zone[-1].input='ACCEPT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='REJECT'uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='tailscale'
uci add firewall forwarding
uci set firewall.@forwarding[-1].src='tailscale'
uci set firewall.@forwarding[-1].dest='lan'uci commit firewall
fw4 check
/etc/init.d/firewall reload仅当 fw4 check 未报告错误时,才重载防火墙。如果检查失败,请先修正配置,避免加载异常规则。
nft list chain inet fw4 input必须出现:
iifname "tailscale0" jump input_tailscale
ping 192.168.2.1
ping 192.168.1.1ping 192.168.2.X再从 B 子网设备反向测试 A 子网设备,并使用 traceroute 或 tcpdump -ni tailscale0 确认流量经过 tailscale0。如果小包可通,但部分网页或大包连接异常,再检查路径 MTU 和 MSS;不要先盲目放宽防火墙。
本方案适用于使用 fw4 防火墙的 OpenWrt SNAPSHOT 或 ImmortalWrt SNAPSHOT 环境,通过 Tailscale 实现三层子网互通,不会合并两个 LAN 的二层广播域。按本文配置时,它与本项目 OpenClash 设置方案不存在已知冲突;系统升级后仍应复查 Tailscale 服务状态、路由批准、访问控制策略与 fw4 规则是否正常加载。
参考资料: