小优雅 发表于 2023-3-17 13:56

【求助】旁路由+AdGuardHome+OpenClash如何设置?

本帖最后由 小优雅 于 2023-3-17 15:41 编辑

现在的网络拓扑是:光猫桥接,主路由负责拨号和 DHCP,下挂了一个自己的 OpenWrt 旁路由。
翻了翻论坛各位大佬的帖子,发现很多都需要动主路由,但因为合租原因不想动主路由,请问各位大佬如何在只设置旁路由的情况下实现 AdGuardHome+OpenClash 共存?

自己摸索折腾了半天,找到一个目前看起来不错的解决方法,在原帖更一下给大家个参考,其实核心就是用 OpenClash 做 AdGuardHome 的上游DNS服务器。
具体步骤如下:

1.AdGuard Home 设置:
来到 OpenWrt 里面 AdGuardHome 的设置页面,将 AdGuardHome 重定向模式改为 “重定向 53 端口到 AdGuardHome”,保存并应用。
然后来到 AdGuardHome 网页管理页面,在 设置——DNS 设置——上游 DNS 服务器 中,只填写 “127.0.0.1:7874”,应用设置 (这里作用是将 AdGuardHome 上游 DNS 定向到 OpenClash。最好到 OpenClash 插件设置页面的覆写设置——常规设置,确认 DNS 监听端口是不是 7874,如果不是要对应修改。另外注意这里如果点击 “测试上游 DNS ”是测试不通的,但可以正常使用,直接应用即可)。
2.OpenClash 设置
OpenClash 工作模式选为 Redir-Host (因为 Fake-IP 模式下不是所有 DNS 请求都会发送到设置的 DNS)。
然后来到 插件设置——DNS 设置,停用本地 DNS 劫持。
最后来到 覆写设置——DNS 设置,取消勾选 “追加上游 DNS ”
最后保存并应用。至此全部设置完毕。



大肚腩 发表于 2023-3-17 14:48

插眼插眼插眼插眼

小优雅 发表于 2023-3-17 15:29

大肚腩 发表于 2023-3-17 14:48
插眼插眼插眼插眼

我已经解决了,重新编辑了下帖子,供你参考哈。

yzh0673 发表于 2023-3-17 15:50

应当勾选 “追加上游 DNS ”吧??

mhh 发表于 2023-3-18 13:02

我是不得的,我也想知。因为什么不可以。。主路由负责拨号和 DHCP,自己的 OpenWrt 旁路由科学广告。

mirzat 发表于 2023-3-19 15:19

有没有FAKE-IP模式和ADG共存的方法啊~ 感觉Redir-Host模式 好慢~

望月星刀 发表于 2023-3-22 22:37

不要用Redir-Host模式,最新的clash都已经去除了,这个模式始终存在DNS泄漏的问题,推荐去看看ytb上“不良林”的几个视频就明白了。
旁路由也没关系,关键是要在ADG和openclash之间再配置一个分流DNS,让国内查询不走代理拿到离你最近的IP,国外查询走远端代理查询拿到离你JC最近的ip。openclash上面配置的那些DNS查询只是用来匹配规则的,看结果来匹配分流规则表走不通的通道而已。
客户端 ==》ADG:53 (手动修改 ADG 端口为 53 重定向无)[转发上游】==》dnsmasq:5337(手动修改默认 DNS 端口)==》mosdns:5335(用 V5 自定义配置,可以用 luci-app-dns 里面内置默认的配置文件来改,国内上游 DNS 组用你自己的运营商 + 阿里腾讯的 DOT/DOH,国外上游组为:127.0.0.1:7874,这是 openclash 的 DNS 监听端口)==》openclash fake-ip 模式 ===》远端代理服务器最优查询代理域名。
原理其实很简单:分流 DNS 劫持 DNS 请求,需要走代理的域名返回透明代理 ip,无需走代理的域名直接返回真实 ip。这样国内国外都是最优,大部分人弄的方案其实是负优化。

iu1307a 发表于 2023-3-23 14:42

mirzat 发表于 2023-3-19 15:19
有没有FAKE-IP模式和ADG共存的方法啊~ 感觉Redir-Host模式 好慢~

我是这个方案,fakeip模式,openclash劫持dns转发,openclash上游服务器自定义为adg的地址和端口号,adg设置里重定向为无,目前稳定使用

小优雅 发表于 2023-3-25 21:09

望月星刀 发表于 2023-3-22 22:37
不要用Redir-Host模式,最新的clash都已经去除了,这个模式始终存在DNS泄漏的问题,推荐去看看ytb上“不良 ...

具体操作步骤有点没太看懂,能详细说一下吗?

望月星刀 发表于 2023-3-25 22:17

小优雅 发表于 2023-3-25 21:09
具体操作步骤有点没太看懂,能详细说一下吗?

准备工作:1、一个openwrt【至少包含openclash、adg、mosdns、openssh-sftp-server(这个是便于SHH登录用FinalShell这类工具上传下载文件的)】
                  2、提前编写好mosdnsV5的自定义文件(可以直接用原版luci-app-mosdns的默认配置文件来改,位置在/etc/mosdns,def_config.yaml),只需要修改以下几个地方的代码就可以当自定义配置使用了,自定义配置在同一目录下叫cus_config.yaml,可以改好了上传替换也可以改好了在luci界面复制粘贴:

log:
    level: info
    file: "/tmp/mosdns.log"


# 转发至本地服务器插件
- tag: forward_local
   type: forward
    args:
      concurrent: 3
      upstreams:
      - addr: "https://1.12.12.12/dns-query"      #腾讯的DOH 这个随意
      - addr: "udp://223.5.5.5"                            #阿里的UDP 这个随意
      - addr: "221.7.92.98"                           #这里填你本地运营商的DNS服务器地址

# 转发至远程服务器插件
- tag: forward_remote
    type: forward
    args:
      concurrent: 1
      upstreams:
      - addr: "127.0.0.1:7874"               #这条的意思是国外组的DNS服务器上游是转发到本机7874端口,也就是openclash的DNS监听端口,所有国外DNS查询全部走代理远程去查


# 启动 udp 服务器。
- tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"            #mosdns的运行端口
# 启动 tcp 服务器。
- tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"







望月星刀 发表于 2023-3-25 22:30

本帖最后由 望月星刀 于 2023-5-29 23:07 编辑


【注意】不建议新手折腾DNS,其实就上网体验来说几乎感知不到,照抄作业不是目的,关键是自己学会理解,找到适合自己的方式即可!
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本地对需要代理的域名进行 DNS 解析,只不过是为了让 Surge/Clash 等软件能够基于 IP 分流(Surge/Clash 的 TUN/TAP 会直接返回 Fake IP、本地 DNS 解析的结果根本不会暴露给外部)罢了。
Fake-IP(增强)模式:
客户端进行通讯时会先进行DNS查询目标IP地址,拿到查询结果后再尝试进行连接。
Fake-IP 模式在客户端发起DNS请求时会立即返回一个保留地址(198.18.0.1/16),同时向上游DNS服务器查询结果,如果判定返回结果为污染或者命中代理规则,则直接发送域名至代理服务器进行远端解析。
此时客户端立即向Fake-IP发起的请求会被快速响应,节约了一次本地向DNS服务器查询的时间。
因为采用fake-ip模式,DNS是在远端airport托管服务器进行解析,openclash的DNS只配置nameserver组进行查询规则匹配即可。
DNS分流(注意是DNS查询分流,并不是流量分流)原理其实很简单:分流 DNS 劫持 DNS 请求,需要走代理的域名返回透明代理 ip,无需走代理的域名直接返回真实 ip

实际DNS流向:



一、旁路由固件选择,尽量精简,选择自己需要的插件即可


二、网络-接口设置










三、DNCP/DNS设置












四、ADG设置










五、openclash设置






















六、MOSdns设置


我固件编译的是QiuSimons/openwrt-mos,自定义的配置,如果是sbwml大神的luci-app-mosdns/,也可以理解意思后在luci界面配置。
这yaml文件对语法有要求,注意空格缩进和保存的字符编码格式,如果不懂的可以先用Visual Studio Code或者notepad2等工具看一看大神们原版默认配置格式。
版本为V5版本的语法!!!

log:
level: info
file: "/tmp/mosdns.log"


# api:
#   http: "127.0.0.1:8080" # 在该地址启动 api 接口。

plugins:
# 加载配置
# 国内域名
- tag: geosite_cn
    type: domain_set
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/geosite_cn.txt"

# 国内ip
- tag: geoip_cn
    type: ip_set
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/geoip_cn.txt"

# 国外域名
- tag: geosite_no_cn
    type: domain_set
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/geosite_no_cn.txt"

# 白名单 加入的域名始终允许使用 “本地 DNS” 进行解析
- tag: whitelist
    type: domain_set
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/whitelist.txt"

# 黑名单 加入的域名将屏蔽 DNS 解析
- tag: blocklist
    type: domain_set
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/blocklist.txt"

# 自定义 Hosts 重写
- tag: hosts
    type: hosts
    args:
      files:                        # 从文本文件载入
      - "/etc/mosdns/rule/hosts.txt"

# 重定向请求的域名
- tag: redirect
    type: redirect
    args:
      files:
      - "/etc/mosdns/rule/redirect.txt"

# 广告列表
- tag: adlist
    type: domain_set
    args:
      files:
      - "/etc/mosdns/rule/serverlist.txt"

# 缓存
- tag: cache
    type: cache
    args:
      size: 20480
      lazy_cache_ttl: 259200
      dump_file: "/etc/mosdns/rule/cache.dump"
      dump_interval: 43200

# 转发至本地服务器插件
- tag: forward_local
    type: forward
    args:
      concurrent: 3
      upstreams:
      - addr: "https://1.12.12.12/dns-query"   #腾讯DOH
      - addr: "udp://223.5.5.5"       #阿里
      - addr: "221.7.92.98"         #本地运营商DNS服务器

# 转发至远程服务器插件
- tag: forward_remote
    type: forward
    args:
      concurrent: 1
      upstreams:
      - addr: "127.0.0.1:7874"      #转发至openclash

# 国内解析
- tag: local_sequence
    type: sequence
    args:
      - exec: $forward_local

# 国外解析
- tag: remote_sequence
    type: sequence
    args:
      - exec: prefer_ipv4
      - exec: $forward_remote

# 有响应终止返回
- tag: has_resp_sequence
    type: sequence
    args:
      - matches: has_resp
      exec: accept

# fallback 用本地服务器 sequence
- tag: query_is_local_ip
    type: sequence
    args:
      - exec: $local_sequence
      - matches: "!resp_ip $geoip_cn"
      exec: drop_resp

# fallback 用远程服务器 sequence
- tag: query_is_remote
    type: sequence
    args:
      - exec: $remote_sequence

# fallback 用远程服务器 sequence
- tag: fallback
    type: fallback
    args:
      primary: query_is_local_ip
      secondary: query_is_remote
      threshold: 150
      always_standby: true


# 查询国内域名
- tag: query_is_local_domain
    type: sequence
    args:
      - matches: qname $geosite_cn
      exec: $local_sequence

# 查询国外域名
- tag: query_is_no_local_domain
    type: sequence
    args:
      - matches: qname $geosite_no_cn
      exec: $remote_sequence

# 查询白名单
- tag: query_is_whitelist_domain
    type: sequence
    args:
      - matches: qname $whitelist
      exec: $local_sequence
      - exec: jump has_resp_sequence

# 拒绝名单
- tag: query_is_reject_domain
    type: sequence
    args:
      - matches: qname $blocklist
      exec: reject 3
      - matches: qname $adlist
      exec: reject 3
      - matches:
      - qtype 12
      exec: reject 3
      - matches: qtype 65
      exec: reject 3

# 主要的运行逻辑插件
# sequence 插件中调用的插件 tag 必须在 sequence 前定义,
# 否则 sequence 找不到对应插件。
- tag: main_sequence
    type: sequence
    args:
      - exec: $hosts
      - exec: jump has_resp_sequence
      - exec: $redirect
      - exec: jump has_resp_sequence
      - exec: $query_is_whitelist_domain
      - exec: $query_is_reject_domain
      - exec: $cache
      - exec: jump has_resp_sequence
      - exec: $query_is_local_domain
      - exec: jump has_resp_sequence
      - exec: $query_is_no_local_domain
      - exec: jump has_resp_sequence
      - exec: $fallback

# 启动 udp 服务器。
- tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"
# 启动 tcp 服务器。
- tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"



七、最后:检查下固件防火墙

八、实际DNS分流查询效果






寻觅芳草地 发表于 2023-3-25 23:45

望月星刀 发表于 2023-3-25 22:30
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本 ...

大佬写的很详细,今天刚看到,没想到晚上就有答案了,赞。

似风征尘 发表于 2023-3-26 16:27

望月星刀 发表于 2023-3-25 22:30
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本 ...

谢谢分享 学习下设置

jsqwz 发表于 2023-3-26 21:24

iu1307a 发表于 2023-3-23 14:42
我是这个方案,fakeip模式,openclash劫持dns转发,openclash上游服务器自定义为adg的地址和端口号,adg ...

adg端口号是3000吗

小优雅 发表于 2023-3-26 21:36

望月星刀 发表于 2023-3-25 22:30
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本 ...

感谢大佬回复,太详细了。
没用过MosDNS,中途遇到一个问题,折腾半天也没解决。就是MosDNS一直运行不起来,修改自定义配置后一直显示MosDNS未运行,日志也是空的什么都没有,选择内置预设可以运行。

另外这样配置如果我想让国内某个特定的网站假如 baidu.com 也走我JC的某个节点,是不是还需要再进一步设置?

自定义配置文件如下:
log:
level: info
file: "/tmp/mosdns.log"

include: []

data_providers:
- tag: geoip
    file: "/usr/share/v2ray/geoip.dat"
    auto_reload: true

- tag: geosite
    file: "/usr/share/v2ray/geosite.dat"
    auto_reload: true

- tag: whitelist
    file: "/etc/mosdns/rule/whitelist.txt"
    auto_reload: true

- tag: blocklist
    file: "/etc/mosdns/rule/blocklist.txt"
    auto_reload: true

- tag: greylist
    file: "/etc/mosdns/rule/greylist.txt"
    auto_reload: true

- tag: hosts
    file: "/etc/mosdns/rule/hosts.txt"
    auto_reload: true

- tag: redirect
    file: "/etc/mosdns/rule/redirect.txt"
    auto_reload: true

- tag: local_ptr
    file: "/etc/mosdns/rule/local-ptr.txt"
    auto_reload: true

- tag: adlist
    file: "/etc/mosdns/rule/adlist.txt"
    auto_reload: true

plugins:
- tag: lazy_cache
    type: cache
    args:
      size: 200000
      lazy_cache_ttl: 259200

- tag: modify_ttl
    type: ttl
    args:
      minimal_ttl: 0
      maximum_ttl: 0

#转发至本地服务器插件
- tag: forward_local
   type: forward
    args:
      concurrent: 3
      upstreams:
      - addr: "https://1.12.12.12/dns-query"
      - addr: "udp://223.5.5.5"
      - addr: "221.7.92.98"

#转发至远程服务器插件
- tag: forward_remote
    type: forward
    args:
      concurrent: 1
      upstreams:
      - addr: "127.0.0.1:7874"

# 启动 udp 服务器。
- tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"

# 启动 tcp 服务器。
- tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: "127.0.0.1:5335"

- tag: query_is_whitelist_domain
    type: query_matcher
    args:
      domain:
      - "provider:whitelist"

- tag: query_is_blocklist_domain
    type: query_matcher
    args:
      domain:
      - "provider:blocklist"

- tag: query_is_greylist_domain
    type: query_matcher
    args:
      domain:
      - "provider:greylist"

- tag: query_is_hosts_domain
    type: hosts
    args:
      hosts:
      - "provider:hosts"

- tag: query_is_redirect_domain
    type: redirect
    args:
      rule:
      - "provider:redirect"

- tag: query_is_local_domain
    type: query_matcher
    args:
      domain:
      - "provider:geosite:cn"

- tag: query_is_non_local_domain
    type: query_matcher
    args:
      domain:
      - "provider:geosite:geolocation-!cn"

- tag: response_has_local_ip
    type: response_matcher
    args:
      ip:
      - "provider:geoip:cn"

- tag: query_is_ad_domain
    type: query_matcher
    args:
      domain:
      - "full:disable-category-ads-all.null"

- tag: match_local_ptr
    type: query_matcher
    args:
      qtype:
      domain:
      - "provider:local_ptr"

- tag: match_qtype65
    type: query_matcher
    args:
      qtype:

- tag: "main_sequence"
    type: "sequence"
    args:
      exec:
      - _misc_optm
      - query_is_hosts_domain
      - query_is_redirect_domain

      - if: query_is_whitelist_domain
          exec:
            - forward_local
            - modify_ttl
            - _return

      - if: "query_is_blocklist_domain || query_is_ad_domain || match_local_ptr || match_qtype65"
          exec:
            - _new_nxdomain_response
            - _return

      - lazy_cache

      - if: query_is_greylist_domain
          exec:
            - forward_remote
            - modify_ttl
            - _return

      - if: query_is_local_domain
          exec:
            - forward_local
            - modify_ttl
            - _return

      - if: query_is_non_local_domain
          exec:
            - _prefer_ipv4
            - forward_remote
            - modify_ttl
            - _return
      - primary:
            - forward_local
            - if: "(! response_has_local_ip) && "
            exec:
                - _drop_response
          secondary:
            - _prefer_ipv4
            - forward_remote
            - modify_ttl
          fast_fallback: 200

servers:
- exec: main_sequence
    listeners:
      - protocol: udp
      addr: ":5335"
      - protocol: tcp
      addr: ":5335"
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【求助】旁路由+AdGuardHome+OpenClash如何设置?