[OpenWrt]使用OpenClash科学上网
OpenClash几乎支持了所有协议,并且配置也很全面。
下载
首先手动下载.ipk
包文件。截止这篇文章,最新版本为v0.46.011-beta。
1 | wget -O luci-app-openclash.ipk https://github.com/vernesong/OpenClash/releases/download/v0.46.011-beta/luci-app-openclash_0.46.011-beta_all.ipk |
如果在 OpenWrt 中无法下载,那么可在宿主机通过代理下载后再拷贝上去。
1 | scp ./luci-app-openclash.ipk [email protected]:/root/ |
再下载一个v1.11.0-7-g5497ada 版本的 Dev 内核备用。
1 | wget -O https://github.com/vernesong/OpenClash/releases/download/Clash/clash-linux-amd64.tar.gz clash-linux-amd64.tar.gz |
安装
注意要先安装依赖。
luci-app-openclash.ipk
中并没有包含全部依赖,如果缺少依赖会导致各种问题,比如 OpenClash 自身无法使用代理上网。
1 | opkg update |
openclash 使用了 dnsmasq-full,为了避免冲突,需要先卸载 dnsmasq。
同时,openclash 也依赖 luci 的 cbi 模块,需要先安装 luci-compat。
配置
内核
OpenClash 使用的 dev 内核是已经跑路的Clash 项目,会自动定期编译。
1 | GOARCH=amd64 GOOS=linux CGO_ENABLED=0 go build -trimpath -ldflags '-X "github.com/Dreamacro/clash/constant.Version=v1.17.0-5-ge1ec0d2" -X "github.com/Dreamacro/clash/constant.BuildTime=Sat Jul 29 19:08:17 UTC 2023" -w -s -buildid=' -o bin/clash |
编译好的内核文件没有放在ipk
包中,初次使用时需要根据 Openwrt 系统自助下载内核。
如果是 arm 路由器比如使用 aarch64_cortex-a53 的EasyPi ARS2,则需要编译对应的版本,比如 AUK9527 做的iStore 扩展插件包。
内核的下载地址是 github 仓库,github 会间歇性的抽风,当抽风时无法在控制台下载。
1 | 2022-07-25 07:26:34 【Dev】版本内核更新失败,请确认设备闪存空间足够后再试! |
不要被日志中的请确认设备闪存空间足够后再试
骗了,其实是网络错误而不是闪存空间不足。
这时需要像下载ipk
那样,手动下载再上传到 OpenWrt 上。
1 | wget -O clash-linux-amd64.tar.gz https://github.com/vernesong/OpenClash/releases/download/Clash/clash-linux-amd64.tar.gz |
内核下载地址
注意:
新的内核只支持 fake-ip,如果使用了在线订阅模板,最好使用老的内核。
否则会出现invalid mode: redir-host
的错误,可参见这个issue。
上传到 OpenWrt/etc/openclash/core
下的对应位置。
- Dev 内核: clash
- Tun 内核: clash_tun
- Meta 内核: clash_meta
1 | cd /etc/openclash/core |
clash
内核的权限应该为nobody:nogroup
,可以手动修改权限,也可以让 openclash 自行修改。
1 | chown nobody:nogroup /etc/openclash/core/* 2>/dev/null |
下载 Dev 内核并应用后,就可以配置好代理,之后使用控制台来更新内核了。
UDP
如果要玩游戏,需要 UDP 连接,必须切换至 TUN 或混合模式。
比如原神就需要 UDP 连接,如果使用增强模式会进入游戏后会白屏然后连接超时,需要切换到 TUN 或混合模式以支持 UDP 连接。
订阅
如果使用的是justmysocks机场的订阅链接,必须使用订阅转换服务,否则将不能识别订阅配置。使用默认的api.dler.io(默认)
即可。
有时候订阅服务器会出问题,可以试着使用其它备用订阅转换网站的转换网址。
ACL4SSR 订阅转换
比较知名的规则转换网站。
つつの订阅转换 · 鲸歌
TAG 机场合作的订阅转换网站。
如果使用的是飞鸟机场,也必须使用订阅转换服务,否则在 redir-host 模式下无法解析域名,只能使用 Fake-IP 模式。
可能是因为没有 dns 段:
1 | dns: |
仪表盘
如果订阅链接没有问题,此时应该一切正常。
可以打开Dashboard控制面板
去仪表盘进行策略配置了。
Fake IP 模式
OpenClash 支持 Redir-Host 和 Fake-IP 两种模式,默认为 Redir-Host 模式。
Fake IP 出自RFC3089,这个 RFC 定义了一种新的将 TCP 连接封装成 SOCKS 协议的方法。这里有篇文章介绍的比较详细。
它与 Redir-Host 模式的最主要区别是:
- 客户端发出的 DNS 解析请求会被代理端捕获,然后立即从 Fake IP 池子里取一个 IP 建立映射返回。
- 客户端发起对这个 Fake IP 的 TCP 连接,又被代理端截获,再返查出域名。
- 代理端使用 SOCKS 协议封装 TCP 连接和域名。
整个过程都无需解析 DNS,因此速度会更快。
但它也有几个问题:
- 无法 ping 域名,解析得到的会是内网的 Fake IP
- windows 会认为没有连接到互联网,需要将
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
下的几个域名添加至覆写设置->DNS 设置->Fake-IP-Filter。 - windows 时间同步的 NTP(Network Time Protocol)域名:time.windows.com
如果对性能不是有很强的要求,还是建议使用 Redir-Host 模式。
偶尔有部分网址无法连接
偶尔有百度无法连接的情况,此时可将代理模式切换至 Global 模式,再切回 Rule,通常药到病除。只是重启 OpenClash 不行。
可参看这个Issue。
自定义规则集
规则集英文是Rule Provider,它可以在config.yml
之外补充一些规则。
比如最近大陆把微软 OneDrive 墙了,那么我们可以在配置文件管理
中,新增一个类型为 classic 的本地规则:
1 | payload: |
然后在规则集与策略组管理
中的自定义规则集与策略组管理
中使用它:
这样当访问后缀为onedrive.live.com
的网站时,就会使用代理了。
geo 数据库订阅
如果在更新 geo 数据库时出错,可能会导致 geo 文件缺乏,openclash 无法启动。此时需要手动下载并上传 geo 数据库的文件。
geo 数据库的文件有好几个,Country.mmdb
,GeoSite.dat
,GeoIP.dat
都在/etc/openclash/
下。
我们可以在/usr/share/openclash/
目录下找到对应的更新脚本:openclash_ipdb.sh
,openclash_geosite.sh
,openclash_geoip.sh
,
再在更新脚本中找到下载地址:https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb
,https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat
,https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
。
在本地下载后,再上传至 openwrt 的/etc/openclash/
。
路由器自身使用代理
如果路由器自身不能翻墙,很多更新都会失败。
如果出现路由器自身不能翻墙的问题,多半是依赖没有安装。可去到插件设置
->调试日志
中生成日志。查看是否有依赖未安装。
安装完依赖后,重启 OpenClash 应该就能正常使用了。
比如下面这个日志,就缺少iptables
相关依赖导致 openwrt 自身无法使用代理。
1 | #===================== 依赖检查 =====================# |
关于 Clash 作为透明代理,在clash 项目中有过讨论。
BT/PT
为了防止BT、P2P下载流量经过代理,可选中覆写设置
-> 规则设备
-> 仅代理命中规则流量
。
选中后将会在配置文件未尾添加:
1 | - PROCESS-NAME,aria2c,DIRECT |
对于漏网之鱼只代理22、80、443端口的流量,其它则直连。