文章

Openclash设置指北

Openclash设置指北

笔者在昨天尝试重新设置了 Openclash,踩了一些难以定位和找到解决方案的坑,特此记录。

环境介绍

笔者的 Openclash 运行在一台 RK3568 的软路由上,系统是 FriendlyWrt 24.10 (硬件厂商提供的对应驱动的改版Openwrt),4G内存,16G eMMc 硬盘。 Openclash 版本是 0.46.079,Meta内核版本是 alpha-g8bc6f77。

笔者需要使用 Openclash的场景有如下三个:

  • 在工位的内网下
  • 在校园网(路由器的wan)下
  • 在校园网外使用 vpn 连接回校园网后

此外,笔者需要设置黑名单模式,让正在做种的机器(之后的文章可能会提到我的这台nas)不经过代理。

代理模式的选择

Openclash 支持两种运行模式,分别是 fake-ip 和 redir-host,stfw 和 ask GPT 后对两种模式简单总结如下:

  • fake-ip会在 DNS 查询时始终返回一个虚假的 IP 地址,客户机通过这个假 IP 发起的连接会被 Openclash 拦截并代理。
  • redir-host 则在 DNS 查询时返回真实 IP,并截获发起连接的包,根据规则进行代理。

可以发现,fake-ip 会使所有流量(即使是访问校园网或国内网站)经过内核,对路由器性能有更高要求,同时可能增加延迟(此外fake-ip模式还存在其他bug);而 redir-host 虽然不会有这样的问题,但由于需要等待 DNS 查询返回真实结果,在没有命中缓存时延迟可能更高,且可能出现 DNS 污染。

在路由器性能足够的情况下,对于前两个场景 fake-ip 更合适,最后一个场景下也可以通过浏览器插件通过域名分流本地网站使之不经过内核。 但笔者在尝试两种模式后决定最终选择了 redir-host。

fake-ip 配置

fake-ip 不支持仅代理常用端口,对于 IP 黑名单的支持也存在 bug,在 github 的 issue 中找到解决方案:同时将 IP 和 MAC 添加至黑名单。

redir-host 配置

没什么特殊的,在校园网下唯一要修改的地方是,启用 IPv6 DNS 查询,否则无法访问 IPv6 站点(是否代理则需要根据需求和机场是否提供而定)。另外,推荐使用配置订阅中的模板转换(而不是一键生成,笔者在试用一键生成时总是无法读取代理服务器相关信息,猜测是使用了特殊字符导致)。

校园网下的特殊配置

2025.5.13 更新

笔者发现部分域名(如 chat.nju.edu.cn )仅能在校内 DNS 解析,而 openclash 自带一个 DNS 服务器,内置了若干国内外公告 DNS 服务器作为上游,并且会截获本地和 LAN 发起的 DNS 请求。由此导致开启 openclash 后无法访问这些网站。

经过检索和尝试笔者成功定位到了这个问题,并找到了几种解决方式。

禁用本地劫持

这是最简单,也是(笔者认为)最不优雅的办法。在 [插件设置-DNS设置] 中禁用本地劫持后客户端会始终使用 WAN 口获取的 DNS 进行查询,而 openclash 则会使用内置的 DNS 服务器进行查询,当两者返回的结果不一致时代理就无法工作(事实上笔者并没有真的遇到这种情况)。

手动添加第二 DNS 服务器

同样在 [插件设置-DNS设置] 中,勾选 [启用第二 DNS 服务器],指定为校园网内的 DNS 服务器,并添加使用该服务器的域名。这样做同样存在潜在的风险:如果校园网的 DNS 服务器发生改变,需要手动修改。变动的频率越高维护成本越大。虽然 NJU 校园网的 DNS 仅发生过一次改变,但设想一个这样的场景:在已经忘记这篇文章中细节后的某次发现访问不了某些校内网站,耗费同等精力定位到了一个同样的问题,往往比机械性的维护一个简单的问题令人火大。

追加上游 DNS

这是笔者最终采用的方法。优点是显而易见的:无硬编码、免维护,并且由于故障导致完全无法使用的风险远比上两种方案小得多。

在 [覆写设置- DNS 设置] 中勾选 [追加上游 DNS]。就这么简单吗?

当然不是。虽然启用后 dhcp://"eth0" 确实被添加到运行配置的 nameserver 字段,但这时进行域名解析仍然无法正确返回,这是由于其他上游 DNS 服务器更快的返回了 NXDOMAIN。因此我们需要手动指定校内域名的解析。

在同样的位置勾选 [Nameserver-Policy],并在下方的文本框内添加如下条目:

1
2
"nju.edu.cn": [ "dhcp://eth0" ]
"*.nju.edu.cn": [ "dhcp://eth0" ]

另外,仅允许校内解析的域名,其 IP 可能非常自由,为防止其与某些国外 IP 冲突而错误的经过代理,在 [覆写设置-规则设置]中,启用[自定义规则]并在下方的文本框中添加如下条目:

1
2
  - DOMAIN-SUFFIX,nju.edu.cn,DIRECT
  - DOMAIN-SUFFIX,chat.nju.edu.cn,DIRECT

最后进行测试:

1
2
3
4
5
6
7
$nslookup chat.nju.edu.cn
Server:         127.0.0.1
Address:        127.0.0.1:53


Name:   chat.nju.edu.cn
Address: 219.219.122.131
本文由作者按照 CC BY 4.0 进行授权