快速上手

建议还原openclash的默认配置后再按本文操作,访问地址 http://openwrtIP地址/cgi-bin/luci/admin/services/openclash/restore 来还原默认配置。[openclash还原默认配置.png

openclash还原默认配置.png

](https://s2.loli.net/2022/01/02/zIfaZKhyuoVvWd3.png)

首先需要让openwrt能够正常连上网络,主路由配置好拨号上网,旁路由则需要设置好网关和DNS。

如果内核下载失败,可以点击下载到本地,然后上传到对应的目录。

然后前往 openclash - 全局设置 - 版本更新 点击检查并更新内核。
建议DEV/TUN两个内核都下载,如果不使用TUN模式/混合模式可以不下载TUN内核。
openclash依赖clash内核运行,如果没有clash内核是无法启用的!
[openclash下载内核.png

openclash下载内核.png

](https://s2.loli.net/2022/01/02/oLQxVl3wDUH1uzY.png)

之后到配置文件订阅添加机场的订阅地址并保存配置后,再点击更新配置即可。
openclash配置文件订阅.png

openclash配置文件订阅.png

如果只是需要能够科学上网,不搞那些花里胡哨的,那么到这里就已经可以正常进行科学上网了。

进阶使用

OpenClash配合MosDNS

建议先按这篇文章,安装好MosDNS。
需要注意的是请使用下面的config.yaml,而不是上面那篇文章中的config.yaml

``log:
level: error
file: “/etc/mosdns/mosdns.log”

data_providers:

  • tag: geosite
    file: ./geosite.dat
    auto_reload: true
  • tag: geoip
    file: ./geoip-only-cn-private.dat
    auto_reload: true

plugins:
## 缓存

  • tag: cache
    type: cache
    args:
    size: 4096
    lazy_cache_ttl: 172800

## 转发至本地服务器的插件

  • tag: forward_local
    type: fast_forward
    args:
    upstream:
    - addr: tls://120.53.53.53:853
    enable_pipeline: true

    - addr: tls://223.6.6.6:853
      idle_timeout: 8
      trusted: true
    

## 转发至远程服务器的插件

  • tag: forward_remote
    type: fast_forward
    args:
    upstream:
    - addr: tls://208.67.220.220:853
    socks5: 127.0.0.1:7891
    enable_pipeline: true

    - addr: tls://1.0.0.1:853
      socks5: 127.0.0.1:7891
      enable_pipeline: true
      trusted: true
    

## 匹配本地域名的插件

  • tag: query_is_local_domain
    type: query_matcher
    args:
    domain:
    - ‘provider:geosite:apple-cn’
    - ‘provider:geosite:cn’

## 匹配非本地域名的插件

  • tag: query_is_non_local_domain
    type: query_matcher
    args:
    domain:
    - ‘provider:geosite:geolocation-!cn’

## 匹配广告域名的插件

  • tag: query_is_ad_domain
    type: query_matcher
    args:
    domain:
    - ‘provider:geosite:category-ads-all’

## 匹配本地 IP 的插件

  • tag: response_has_local_ip
    type: response_matcher
    args:
    ip:
    - ‘provider:geoip:cn’

主要的运行逻辑插件
sequence 插件中调用的插件 tag 必须在 sequence 前定义,
否则 sequence 找不到对应插件。

  • tag: main_sequence
    type: sequence
    args:
    exec:
    # 删除ECS
    - _no_ecs
    # 缓存
    - cache

    # 屏蔽广告域名
    - if: query_is_ad_domain
      exec:
        - _new_nxdomain_response
        - _return
    
    # 已知的本地域名用本地服务器解析
    - if: query_is_local_domain
      exec:
        - forward_local
        - _return
    
    # 已知的非本地域名用远程服务器解析
    - if: query_is_non_local_domain
      exec:
        - forward_remote
        - _return
    
      # 剩下的未知域名用 IP 分流。
      # 这里借助了 `fallback` 工作机制。分流原理请参考 `fallback`
      # 的工作流程。
      # primary 从本地服务器获取应答,丢弃非本地 IP 的结果。
    - primary:
        - forward_local
        - if: "(! response_has_local_ip) && [_response_valid_answer]"
          exec:
            - _drop_response
      # secondary 从远程服务器获取应答。
      secondary:
        - _prefer_ipv4
        - forward_remote
      # 这里建议设置成 local 服务器正常延时的 2~5 倍。
      # 这个延时保证了 local 延时偶尔变高时,其结果不会被 remote 抢答。
      # 如果 local 超过这个延时还没响应,可以假设 local 出现了问题。
      # 这时用就采用 remote 的应答。单位: 毫秒。
      fast_fallback: 200
    

servers:

  • exec: main_sequence
    listeners:
    • protocol: udp
      addr: 0.0.0.0:5335
    • protocol: tcp
      addr: 0.0.0.0:5335``

然后需要先在 DHCP/DNS中的DNS转发填写一个国内公共DNS,例如 223.5.5.5
这样可以让OpenClash启用的时候,可以正常更新订阅,之后启用OpenClash的时候,它会自动修改这里的DNS转发

在OpenClash的DNS设置中勾选本地DNS劫持自定义上游DNS服务器禁止Dnsmasq缓存DNS
自定义上游DNS服务器中的NameserverFallback都得是MosDNS的!
OpenClash-DNS.png

OpenClash-DNS.png

[OpenClash自定义上游DNS服务器.png

OpenClash自定义上游DNS服务器.png

](https://s2.loli.net/2022/01/18/zT6DZmk2r1otPBb.png)
之后前往配置文件订阅中添加订阅再点击更新配置即可,这样OpenClash就配置完了。

参考

OpenClash Wiki