快速上手

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

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

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

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

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

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

进阶使用

OpenClash配合MosDNS

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

log:
  level: info
  file: ''

plugin:

  ################# 服务器插件 ################

  # 启动服务器的插件
  - tag: main_server
    type: server
    args:
      entry:  # 这个服务器插件收到请求后会
        - main_sequence   # 运行主执行序列

      server:   # 启动以下服务器
        - protocol: udp
          addr: '[::]:5335'
        - protocol: tcp
          addr: '[::]:5335'

  ################# 可执行插件 ################

  # 包含分流的逻辑的插件
  - tag: main_sequence
    type: sequence
    args:
      exec:
        - if:
            - query_is_ad_domain    # 已知的广告域名
          exec:
            - _block_with_nxdomain  # 生成 NXDOMAIN 应答
            - _return               # 返回。不再执行后续插件。

        - mem_cache      # 运行缓存插件。放在这里就可以避免缓存到无用的广告域名。

        - if:
            - query_is_local_domain   # 已知的本地域名
            - '!_query_is_common'     # 和不常见的请求类型
          exec:
            - forward_local           # 用本地服务器
            - _return

        - if:
            - query_is_non_local_domain  # 已知的非本地域名
          exec:
            - _prefer_ipv4               # 优先 IPv4
            - forward_remote             # 用远程服务器
            - _return

        # 剩下的未知域名用 IP 分流。详细分流原理请参考 `fallback` 的工作流程。
        - primary:
            - forward_local     # 本地服务器为主。
            - if:
                - '!response_has_local_ip'  # 过滤掉非本地的 IP。
              exec:
                - _drop_response
          secondary:
            - _prefer_ipv4
            - forward_remote
          fast_fallback: 150  # 这里建议设置成 local 服务器正常延时的 2~5 倍。
                              # 这个延时保证了 local 延时偶尔变高时,其结果不会被 remote 抢答。
                              # 如果 local 超过这个延时还没响应,可以假设 local 出现了问题。
                              # 这时用就采用 remote 的应答。单位: 毫秒。
          always_standby: true

  # 缓存
  - tag: 'mem_cache'
    type: 'cache'
    args:
      size: 1024
      lazy_cache_ttl: 172800
      lazy_cache_reply_ttl: 30



  # 转发请求至本地服务器的插件
  - tag: forward_local
    type: fast_forward
    args:
      upstream:
        - addr: tcp://119.29.29.29
          idle_timeout: 10

        - addr: tcp://223.5.5.5
          idle_timeout: 10

  # 转发请求至远程服务器的插件
  - tag: forward_remote
    type: fast_forward
    args:
      upstream:
        - addr: tcp://1.1.1.1
          socks5: 127.0.0.1:7891
          idle_timeout: 10

        - addr: tcp://208.67.222.222
          socks5: 127.0.0.1:7891
          idle_timeout: 10

  ################ 匹配器插件 #################

  # 匹配本地域名的插件
  - tag: query_is_local_domain
    type: query_matcher
    args:
      domain:
        - 'ext:./geosite.dat:cn'

  # 匹配非本地域名的插件
  - tag: query_is_non_local_domain
    type: query_matcher
    args:
      domain:
        - 'ext:./geosite.dat:geolocation-!cn'

  # 匹配广告域名的插件
  - tag: query_is_ad_domain
    type: query_matcher
    args:
      domain:
        - 'ext:./geosite.dat:category-ads-all'

  # 匹配本地 IP 的插件
  - tag: response_has_local_ip
    type: response_matcher
    args:
      ip:
        - 'ext:./geoip.dat:cn'

然后需要先在 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就配置完了。

最后修改:2022 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏