Skip to content

一些零碎的教程

Aethersailor edited this page Aug 23, 2026 · 56 revisions

💡 一些零碎的教程

本页汇总若干 OpenClash 和 OpenWrt 实用配置教程。


目录

  1. 配置转换相关
    • 1.1 ImmortalWrt 下搭建本地转换服务
    • 1.2 本地转换服务导入模板和规则
  2. OpenWrt 相关
    • 2.1 固件扩容(有风险)
    • 2.2 OpenWrt 与 Tailscale 子网互通方案(fw4、SNAPSHOT)

📦 1. 配置转换相关

1.1 ImmortalWrt 下搭建本地转换服务

部分用户倾向于在 OpenWrt 设备上运行转换服务,减少对公共转换服务的依赖。

ImmortalWrt 软件源中的 subconverter 软件包是传统 subconverter,不是 SubConverter-Extended。两者的功能、接口扩展和维护节奏可能不同;本节只说明软件源中的传统 subconverter。需要 SubConverter-Extended 功能时,请按照该项目的部署文档另行安装。

安装步骤:

1. 进入软件包界面,点击「更新列表」

2. 在过滤器中输入 subconverter

3. 找到 `subconverter` 软件包,点击「安装」
subconverter

通常使用默认配置即可满足需求;默认配置已关闭缓存,无需修改参数。

安装完成后,在 OpenClash 的订阅配置页面中,将「订阅转换服务地址」修改为:

http://127.0.0.1:25500/sub
subconverter-url

重要配置说明:

OpenClash 内置模板多为 GitHub 直链,在部分网络环境下可能不稳定。如果转换服务无法拉取这些文件,可以将链接替换为可用的备用下载源,例如对应的 jsDelivr 地址。

Warning

注意: 如果转换服务无法访问模板或规则地址,将无法拉取远程文件。服务会自动回退到内置默认模板,导致策略组或规则结构不符合预期。请确保转换服务能够访问相关地址,或使用可用的备用下载源。


1.2 本地转换服务导入模板和规则

以 ImmortalWrt 为例,subconverter 的默认配置目录为 /etc/subconverter

导入本地模板

将自定义的 .ini 模板文件上传至 /etc/subconverter/config 目录(例如 example.ini)。在引用时,使用路径 config/example.ini

也可以将模板文件上传至 /etc/subconverter/base 目录。在 OpenClash 的「自定义模板的地址」中,直接填写文件名 example.ini 即可调用。

subconverter-local

导入本地规则

将规则文件(.list)上传至 /etc/subconverter/rules 目录。在模板文件中引用时,使用路径 rules/your_rules.list

配置示例:

ruleset=🎯 全球直连,rules/your_rules.list

完成以上配置后,转换程序以及本节已经本地化的模板和规则不再依赖对应的 GitHub 文件,便于自行维护。

这不代表整个转换过程可以离线运行。订阅地址、模板中仍然引用的远程规则、软件包更新和其他外部资源仍可能需要网络访问。只有将实际引用的全部输入一并本地托管并逐项验证后,才能将该部署视为不依赖远程文件。


🖥️ 2. OpenWrt 相关

2.1 固件扩容(有风险)

使用官方发布的 OpenWrt 或 ImmortalWrt 固件时,可以通过 owut 配合 ASU(Attended Sysupgrade)服务器,在生成升级固件时指定根文件系统大小,并在后续升级中继续沿用该设置。

Caution

扩容与系统升级都属于高风险操作。 更改根文件系统大小时,部分平台可能丢失配置;OpenWrt 官方文档特别提示 x86 平台曾多次出现这一情况。操作前务必下载完整配置备份,并确认即使 LAN 地址恢复为 192.168.1.1,仍可重新连接设备。

本教程基于 ext4 分区验证,SquashFS 分区未经测试。不同设备、分区布局与 ASU 服务器的行为可能不同,请以当前设备的 owut check 输出为准。

操作步骤:

步骤 1:SSH 连接设备

步骤 2:更新软件源

根据固件的包管理器版本执行更新命令:

  • APK: apk update
  • OPKG: opkg update

步骤 3:安装必要插件

安装 owutattendedsysupgrade

  • APK: apk add luci-i18n-attendedsysupgrade-zh-cn owut
  • OPKG: opkg install luci-i18n-attendedsysupgrade-zh-cn owut

步骤 4:虚拟机扩容(物理机请跳过)

若运行在 PVE、ESXi 等虚拟化平台,需先在虚拟机管理界面调整虚拟磁盘大小。虚拟磁盘大小必须大于或等于调整后的容量。

步骤 5:设置目标固件大小

默认情况下,owut 仅在当前请求中应用临时参数。配置永久参数可确保后续升级自动维持指定容量。

Tip

固件大小上限由所用 ASU 服务器决定。执行前,请在服务器状态信息中确认「Maximum requested root filesystem size」。

执行以下命令写入配置:

uci set attendedsysupgrade.owut=owut
# 设置固件大小为 1024MB (1GB)
uci set attendedsysupgrade.owut.rootfs_size='1024'
uci commit

步骤 6:执行扩容与升级

先执行检查,确认目标版本、软件包变更、文件系统类型与根文件系统大小均符合预期:

owut check

确认无异常并完成备份后,再运行升级命令:

owut upgrade --force

Tip

本扩容教程建议使用 --force。仅修改 rootfs_size 时,目标固件版本可能与当前版本相同,owut 可能判断「没有检测到版本变更」而不继续;--force 可以在这种情况下强制完成构建、下载和升级。它也会允许存在软件包降级的升级继续执行,因此仍应先查看 owut check 的结果,确认变更符合预期后再执行。

升级成功后,rootfs_size 配置会继续供 owut 使用;新版 LuCI Attended Sysupgrade 也能读取该设置。配置是否能在首次改变分区大小时完整保留,取决于具体平台,因此必须保留可恢复的备份。

参考:OpenWrt 官方 owut 文档

space

2.2 OpenWrt 与 Tailscale 子网互通方案(fw4、SNAPSHOT)

2.2.1 目标

  • 原则上采用最小化配置,不做无必要的修改。
  • 配合值守式系统升级,在正常情况下保留配置;升级后仍需复查服务与路由状态。
  • 在多台 OpenWrt 路由器之间实现三层子网互通。
  • 各子网使用独立的公网出口。
  • 不合并 LAN 广播域,也不自动转发二层广播。
  • 仅允许通过明确的 IP 地址访问对端。
  • 增删子网设备时,无需调整防火墙规则。
  • 不需要在公网开放任何端口。

2.2.2 适用环境

  • OpenWrt 或 ImmortalWrt 的 SNAPSHOT 版本
  • 防火墙:fw4(基于 nftables)
  • Tailscale 使用软件源中自带版本
  • 各 LAN 子网不重叠

Note

本教程以两个节点为例。添加更多节点时,操作相同,但各节点的内网地址不得重复。

示例:

节点 子网
A 192.168.1.0/24
B 192.168.2.0/24

2.2.3 Tailscale 配置(每台路由器都做)

2.2.3.1 安装并启动 Tailscale
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_forward

net.ipv4.ip_forward 的值应为 1。OpenWrt 作为路由器时通常已经启用。

2.2.3.2 加入 Tailscale 并通告子网

A(192.168.1.0/24):

tailscale up \
  --advertise-routes=192.168.1.0/24 \
  --snat-subnet-routes=false \
  --accept-routes \
  --accept-dns=false

B(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,表示绑定成功。

2.2.3.3 控制台操作(一次性)

在 Tailscale 官网的「Admin Console」中:

  • 在「Machines」页面分别批准双方通告的子网路由(subnet routes)。

批准子网路由后,确认现有 tailnet 访问控制策略允许两个子网双向通信。如果 tailnet 仍使用默认的全放行策略,则无需修改。仅当现有自定义策略限制两个子网之间的访问时,才需要在「Access controls」中添加允许双向访问的 grants 或等效 ACL 规则。

2.2.3.4 路由确认(可选)
ip route get <对端网关IP>

期望结果:

dev tailscale0

2.2.4 防火墙配置(fw4 核心)

Important

在 fw4 中配置动态接口 tailscale0 时,必须使用 option device,不要使用 option network

2.2.4.1 创建或修正 tailscale 防火墙区域
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'
2.2.4.2 添加 forwarding(仅这两条)
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'
2.2.4.3 提交并重载
uci commit firewall
fw4 check
/etc/init.d/firewall reload

仅当 fw4 check 未报告错误时,才重载防火墙。如果检查失败,请先修正配置,避免加载异常规则。

2.2.4.4 核查 fw4 是否真正生效(关键)
nft list chain inet fw4 input

必须出现:

iifname "tailscale0" jump input_tailscale

2.2.5 验证流程(顺序不可乱)

2.2.5.1 路由器之间互测
ping 192.168.2.1
ping 192.168.1.1

2.2.5.2 子网设备之间互测
ping 192.168.2.X

再从 B 子网设备反向测试 A 子网设备,并使用 traceroutetcpdump -ni tailscale0 确认流量经过 tailscale0。如果小包可通,但部分网页或大包连接异常,再检查路径 MTU 和 MSS;不要先盲目放宽防火墙。

2.2.6 结语

本方案适用于使用 fw4 防火墙的 OpenWrt SNAPSHOT 或 ImmortalWrt SNAPSHOT 环境,通过 Tailscale 实现三层子网互通,不会合并两个 LAN 的二层广播域。按本文配置时,它与本项目 OpenClash 设置方案不存在已知冲突;系统升级后仍应复查 Tailscale 服务状态、路由批准、访问控制策略与 fw4 规则是否正常加载。

参考资料:

Clone this wiki locally