【求助】旁路由+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
插眼插眼插眼插眼
我已经解决了,重新编辑了下帖子,供你参考哈。 应当勾选 “追加上游 DNS ”吧?? 我是不得的,我也想知。因为什么不可以。。主路由负责拨号和 DHCP,自己的 OpenWrt 旁路由科学广告。 有没有FAKE-IP模式和ADG共存的方法啊~ 感觉Redir-Host模式 好慢~ 不要用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。这样国内国外都是最优,大部分人弄的方案其实是负优化。
mirzat 发表于 2023-3-19 15:19
有没有FAKE-IP模式和ADG共存的方法啊~ 感觉Redir-Host模式 好慢~
我是这个方案,fakeip模式,openclash劫持dns转发,openclash上游服务器自定义为adg的地址和端口号,adg设置里重定向为无,目前稳定使用 望月星刀 发表于 2023-3-22 22:37
不要用Redir-Host模式,最新的clash都已经去除了,这个模式始终存在DNS泄漏的问题,推荐去看看ytb上“不良 ...
具体操作步骤有点没太看懂,能详细说一下吗? 小优雅 发表于 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-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 22:30
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本 ...
大佬写的很详细,今天刚看到,没想到晚上就有答案了,赞。 望月星刀 发表于 2023-3-25 22:30
DNS优化的原则:
需要被代理的域名、必须在远端代理服务器上进行解析、才能得到最合适的解析结果。
在本 ...
谢谢分享 学习下设置 iu1307a 发表于 2023-3-23 14:42
我是这个方案,fakeip模式,openclash劫持dns转发,openclash上游服务器自定义为adg的地址和端口号,adg ...
adg端口号是3000吗 望月星刀 发表于 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"