vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
17.55k stars 3.18k forks source link

[Feature] Fakeip 绕过中国大陆 IP 下如何设置adguardhome #2828

Closed MURChen closed 1 year ago

MURChen commented 1 year ago

Verify Steps

Describe the Feature

adguardhome设置 127.0.0.1:7874 dns设置中 启动自定义上游 DNS 服务器 关闭dns劫持 启动绕过中国大陆 IP,设置dns为例如114

打开一个国内域名 例如 bilibili.com 在adguardhome中没有解析记录

Describe the Solution

我想在adguardhome中也能看到触发 绕过大陆规则的域名dns解析,并可以使用拦截规则 所以大陆域名 DNS 服务器下应该如何设置 是否能直接设置为原adguardhome的ip+端口,并在其上游dns设置中添加相关公共dns,并保留127.0.0.1:7874 总感觉这样子解析会打架之类的,也在想是否需要再建一个adguard用于国内

Describe Alternatives

No response

Additional Context

image image

InspoOnU commented 1 year ago

配置文件里加上 upstream_dns_file: "/XXX/List.conf"

zzz6839 commented 1 year ago

没有一个adguardhome解决不了的事情,如果有就两个。

luci-app一个adguardhome作为DNSMASQ上游,docker一个adguardhome作大陆域名dns服务器监听大陆域名,两个adguardhome分别处理大陆和大陆外的拦截

vernesong commented 1 year ago

image 填ad地址,劫持打开,ad不要开劫持

MURChen commented 1 year ago

@vernesong 今天晚上有空设置了一下 打开绕过大陆ip,dns填 127.0.0.1#5353 (adguardhome地址) openclash dns设置 打开劫持 adguardhome 5353重定向模式选 无 dns设置223.5.5.5 启动后一分钟内核归还dns image 效果: nslookup 国内域名不是fakeip,YouTube是fakeip yacd中只显示国外域名 adguardhome中只显示国内域名解析 应该是成功了

zzz6839 commented 1 year ago

@vernesong 今天晚上有空设置了一下 打开绕过大陆ip,dns填 127.0.0.1#5353 (adguardhome地址) openclash dns设置 打开劫持 adguardhome 5353重定向模式选 无 dns设置223.5.5.5 启动后一分钟内核归还dns image 效果: nslookup 国内域名不是fakeip,YouTube是fakeip yacd中只显示国外域名 adguardhome中只显示国内域名解析 应该是成功了

能拦截国外广告吗

MURChen commented 1 year ago

@vernesong 今天晚上有空设置了一下 打开绕过大陆ip,dns填 127.0.0.1#5353 (adguardhome地址) openclash dns设置 打开劫持 adguardhome 5353重定向模式选 无 dns设置223.5.5.5 启动后一分钟内核归还dns image 效果: nslookup 国内域名不是fakeip,YouTube是fakeip yacd中只显示国外域名 adguardhome中只显示国内域名解析 应该是成功了

能拦截国外广告吗

adguardhome里没有国外域名的解析,应该是过内核直接远程dns解析了,adguardhome拿不到

paladin4fan commented 1 year ago

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

MURChen commented 1 year ago

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

MURChen commented 1 year ago

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

国外域名没有到fakeip,在adguardhome里被某个doh:https://dns10.quad9.net:443/dns-query 解析了

paladin4fan commented 1 year ago

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

你可能理解错了我说的 openclash的上游DNS=继续指定公共dns 比如nameserver指定114 fallback指定opendns AdGuard的配置文件里 默认DNS=127.0.0.1:7874, 即OpenClash的DNS服务所监听的端口 这样才能正常fakeip 我加了一行 [/lan/]127.0.0.1:5353 是可选的 5353端口是我的DNSmaq新端口 这一行的作用是当我浏览器输入lan后缀的域名时会转发给dhcp服务器 能在浏览器里用openwrt.lan来替代192.168.xx.1 指定部分域名走不同dns就修改这些域名背后的DNS地址 我自己写的脚本是加了两个功能 一个是白名单 把里面的域名全部追加到大陆域名list里让它不走fakeip 另一个功能是把dnsmasq的list文件转成adguard格式导进来 这样我想修改哪些域名的DNS地址,就再单独维护一个list文件就行了

MURChen commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

paladin4fan commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

MURChen commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

现在已经正常了,感谢大佬的帮助 我是用curl拉取新的list,再用sed转换格式和添加开头默认dns的,的确openclash下面也有份list但现在cron也配置好了就不动了

MURChen commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

问一下,这样设置的adguardhome里没有具体设备,只有localhost,你的是否也是这样

paladin4fan commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

问一下,这样设置的adguardhome里没有具体设备,只有localhost,你的是否也是这样

并不会啊 ADGuard直接监听53端口的情况下是没理由只有localhost的

MURChen commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

问一下,这样设置的adguardhome里没有具体设备,只有localhost,你的是否也是这样

并不会啊 ADGuard直接监听53端口的情况下是没理由只有localhost的

adg选择哪一个重定向模式 我选择重定向53后是能正常显示ip的,但只要openclash重启,会有个dns劫持到内核,还给防火墙就又变成localhost,而且海外域名就解析不了 用53替换openclash就不怕,也是localhost 这个53替换后的防火墙 image

paladin4fan commented 1 year ago

image image image

MURChen commented 1 year ago

image image image

按图就成功了,再次感谢

LemonPAKA commented 1 year ago

image image image

按图就成功了,再次感谢

想问一下你在设置了adg + fake ip绕过大陆后。。。大陆流量是否还经过核心。。。我这边设置了之后,尽管返回了真实IP。。但是在yacd面板中依旧能见到国内域名的条目,IPW.CN的IPV6查询依旧是路由器地址而不是本机地址。 如果是直接开启fake ip中绕过大陆的功能的话,yacd面板中基本见不到国内连结,IPW.CN的IPV6查询为本机地址。

paladin4fan commented 1 year ago

adg + fake ip绕过大陆后。。。

先确认一下: 1、你的域名在不在adg的大陆解析名单里 2、解析出来的IP在不在绕过大陆地址的iplist里

LemonPAKA commented 1 year ago

1、我用的是accelerated-domains.china.conf 改成了适合adg的格式 然后加上了7874 2、我用的是www.baidu.com进行测试,解析DNS为114.114.114.114,PC进行nslookup能够获取正确IP,ADG也能解析正常IP,但是就是能在yacd面板里见到www.baidu.com,使用google.com测试的时候ADG返回fake-ip,PC nslookup也是fake-ip。。。直接使用dnsmasq+绕过大陆就不会出现在YACD里

paladin4fan commented 1 year ago

1、我用的是accelerated-domains.china.conf 改成了适合adg的格式 然后加上了7874 2、我用的是www.baidu.com进行测试,解析DNS为114.114.114.114,PC进行nslookup能够获取正确IP,ADG也能解析正常IP,但是就是能在yacd面板里见到www.baidu.com,使用google.com测试的时候ADG返回fake-ip,PC nslookup也是fake-ip。。。直接使用dnsmasq+绕过大陆就不会出现在YACD里

刚刚测试的 fake-ip 兼容模式+tun转发 没开meta内核 wget百度 淘宝都不会出现在面板里。 wget openwrt.org 因为我自己添加了解析规则 返回的是真实IP 不过域名也会出现在面板里。 wget youtube是fakeip+出现面板

paladin4fan commented 1 year ago

1、我用的是accelerated-domains.china.conf 改成了适合adg的格式 然后加上了7874 2、我用的是www.baidu.com进行测试,解析DNS为114.114.114.114,PC进行nslookup能够获取正确IP,ADG也能解析正常IP,但是就是能在yacd面板里见到www.baidu.com,使用google.com测试的时候ADG返回fake-ip,PC nslookup也是fake-ip。。。直接使用dnsmasq+绕过大陆就不会出现在YACD里

你是不是设置了adguardhome之后没有开启clash里的绕过大陆IP?

LemonPAKA commented 1 year ago

如果不选择dns从dnsmasq那里重定向的话是没办法在设置里选择绕过中国大陆IP的。。版本为45.79。。。其实45.78貌似能选 不过选了之后其实也没反应。。

paladin4fan commented 1 year ago

如果不选择dns从dnsmasq那里重定向的话是没办法在设置里选择绕过中国大陆IP的。。版本为45.79。。。其实45.78貌似能选 不过选了之后其实也没反应。。

没看懂第一句话是什么意思 我用的是最后的release 也就是45.78 你这45.79是dev版本我没试过 我45.78在fake-ip下可以单选绕过大陆ip没问题啊

LemonPAKA commented 1 year ago

我的意思是 在不使用dnsmasq重定向的情况下 选了也没用。。

paladin4fan commented 1 year ago

我的意思是 在不使用dnsmasq重定向的情况下 选了也没用。。

dns重定向是在AdGuardHome里的?

mikeoooxx commented 1 year ago

大哥能出个详细教程吗?我现在openclash fakeip之后,adguard home就失效了~

paladin4fan commented 1 year ago

我的意思是 在不使用dnsmasq重定向的情况下 选了也没用。。

是openclash本身的bug 不勾选DNS劫持就没有生成大陆IP地址的iplist 自然就不会绕过 我看到已经修复了

mikeoooxx commented 1 year ago

@paladin4fan 大哥能出个设置教程吗?我开了openclash 不开绕过大陆ip 微信巨卡,开了之后fake ip模式+绕过大陆ip之后,adguardhome又失效了~~研究好礼拜了!求个详细设置教程!感谢

zqp561022 commented 1 year ago

@paladin4fan 大佬能出一个详细点的教程吗?

paladin4fan commented 1 year ago

@paladin4fan 大佬能出一个详细点的教程吗?

Openclash更新了几个新版本以后有些细节好像变了 目前人不在大陆地区 不太好测试绕过大陆IP的模式 我得找个人帮忙测试完确认一下我之前说的方式还能用

dayuanpan commented 1 year ago

@MURChen 大佬upstream_conf这个文件我怎么没有啊,从哪里来的,我看你说整理了3个多小时,这个文件应该怎么弄啊

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

dayuanpan commented 1 year ago

@paladin4fan 大佬能出一个详细点的教程吗?

Openclash更新了几个新版本以后有些细节好像变了 目前人不在大陆地区 不太好测试绕过大陆IP的模式 我得找个人帮忙测试完确认一下我之前说的方式还能用

@paladin4fan 坐等大佬的教程

paladin4fan commented 1 year ago

@MURChen 大佬upstream_conf这个文件我怎么没有啊,从哪里来的,我看你说整理了3个多小时,这个文件应该怎么弄啊

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

那个文件是他自己写的 整理文件就是找到一份包含了大陆常用域名的表格 然后把它批量处理成AdGuardHome可识别的格式

dayuanpan commented 1 year ago

@MURChen 大佬upstream_conf这个文件我怎么没有啊,从哪里来的,我看你说整理了3个多小时,这个文件应该怎么弄啊

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

那个文件是他自己写的 整理文件就是找到一份包含了大陆常用域名的表格 然后把它批量处理成AdGuardHome可识别的格式

@paladin4fan ,大佬,那有个疑问,既然openclash做了dns劫持和绕过大陆ip处理,那也就意味已经在oc这根据geoip做了dns分流,oc只会把大陆域名给交给AD解析,然后流量直连不走oc了,非大陆域名就由oc内的dns解析包括走clash核心了,既然已经分流清楚了,那ad那的上游服务器直接给一个114不就可以了,为什么还要费劲整一个大陆域名list,这个很不理解,还请大佬解惑下。

MURChen commented 1 year ago

回复一下,已经去用mosdns了,adghome现在只做广告拦截和解析记录 @dayuanpan upstream_conf 这个文件是自己创建,里面放整理内容的,文件名和放哪里不重要,只要在adg的配置文件里写个地址就行,这点去看adg的wiki有写

我得回想一下,写这个应该是为了记录dns解析,不然国内域名的解析经过分流直接走了,没有在adg下留下记录,要dns拦截&重写不好用,得整两个adg一个外一个内,现在换到mosdns的方案思路就很直白易懂(adg>mosdns>oc)

然后是为什么不只用114,因为域名解析直接用这个会不稳定(很烂),例如bili的域名你尽量用运营商的dns,部分有cdn的也是。然后个人认为用114不如用阿里的dns223.5.5.5。

写这套方案是有需求的,对解析速度和解析到哪里有要求,对dns和整个网络有理解性,当我在写这套方案时找素材也才偶然发现mosdns,功能比adg更强大,就是更难罢了。

paladin4fan commented 1 year ago

@MURChen 大佬upstream_conf这个文件我怎么没有啊,从哪里来的,我看你说整理了3个多小时,这个文件应该怎么弄啊

直接使用AdguardHome的配置文件就好了 image dnsmasq的监听接口换掉 直接让ADguard接管53接口 OpenClash不劫持 上游DNS填入config文件 默认DNS服务器=OpenClash DNS监听接口 所有.lan后缀的域名 DNS服务器=DNSmasq的接口 [/lan/]127.0.0.1:5353 然后把大陆域名列表处理一下统统转发到指定的DNS服务器 e.g:[/drive.quark.cn/]119.29.29.29 这样就可以实现访问大陆域名=119.29.29.29查询 然后返回真实地址 请求的真实地址被防火墙return 访问非大陆域名=fakeip解析 然后请求fakeip 被openclash接管 根据映射的域名选择策略 这种方案还有个好处是可以在AdGuardHome的域名白名单里增加一些不用走代理的非大陆域名、个人域名,还可以分类。比如多ISP用户就可以给不同类型的网络分配不同的DNS地址来优化多线分流

image 整了3小时整好了,主要是转换list时没接触sed卡那里忙久

设置: adguardhome 使用53端口替换dnsmasq 在配置文件中upstream_dns_file:/etc/dnsmasq.d/upstream_dns.conf(有空挪位置加定时) openclash: 开绕过,dns:127.0.0.1:5353 关dns劫持 adguard配置文件: upstream_dns:

  • 223.5.5.5
  • 220.189.127.107 upstream_dns_file: /etc/dnsmasq.d/upstream_dns.conf bootstrap_dns:
  • 211.155.235.188
  • 218.85.157.99
  • 119.29.29.29

效果 adguardhome里有国内、国外域名 nslookup 国内是真实的,国外也是?,能翻但不是fakeip

疑问 如果想指定部分域名(在list里)走不同dns,要在adg配置文件中怎么弄,还是得改list

那个文件是他自己写的 整理文件就是找到一份包含了大陆常用域名的表格 然后把它批量处理成AdGuardHome可识别的格式

@paladin4fan ,大佬,那有个疑问,既然openclash做了dns劫持和绕过大陆ip处理,那也就意味已经在oc这根据geoip做了dns分流,oc只会把大陆域名给交给AD解析,然后流量直连不走oc了,非大陆域名就由oc内的dns解析包括走clash核心了,既然已经分流清楚了,那ad那的上游服务器直接给一个114不就可以了,为什么还要费劲整一个大陆域名list,这个很不理解,还请大佬解惑下。

你说的方案是OC接管DNS服务器的角色 AdGuardHome作为OC的上游DNS负责大陆部分域名 当然是可以工作的 而我说的方案是AdGuardHome作为局域网的DNS服务器 而OC作为AdGuardHome的上游服务器 这样的方案会比较绕 主要是解决个人需求: 1、我使用这套方案的时候 Openclash的FakeIP模式还只能绕过大陆IP 没添加绕过大陆常用域名 2、AdGuardHome的广告拦截是基于域名的 你描述的情况里 它只会接收OpenClash发起的大陆域名请求 自然也只会过滤大陆常用网站的广告/统计脚本 AGH的过滤日志里也只会出现一大堆的Localhost发起的DNS请求 请求的域名只有大陆域名 而我反过来嵌套 想要实现的目的自然就是两个 一是非大陆网站的广告和隐私脚本域名也可以被过滤 命中规则的域名直接ban 过滤完了再给OC去解析FakeIP 二就是可以真实完整的统计整个局域网里哪些设备发起了哪些网站的DNS记录 这个偶尔会用到的(比如有的过滤器规则太严格导致盗版小说网站看不了 淘宝京东详情页加载不出来) 3、Ad的上游给谁的问题 在我的这个嵌套规则下 设备从路由器请求解析域名 是AGH接管的 然后根据AGH的配置文件判断交给哪个上游DNS。 最简单的分流就是国内+国外 大陆的交给大陆DNS 国外的交给Openclash 你没有特殊的DNS分流需求就只要一分为二就可以了 我自己是有这个分流需求的 因为我是多ISP 大带宽移动+小水管联通 移动线路解析一些域名有几率会被重定向到移动自己的内网镜像站去 而联通线路不会 基于这个现象 要做一下分流处理 这样才能实现下载类域名解析出来非移动镜像站的地址 让两条带宽都跑起来 平常访问的域名尽量解析出移动CDN地址以加快访问速度 解析出来CDN不是移动地址的就全交给联通线路 又因为mwan3的规则 同个IP地址要么根据带宽比重轮询要么就只能两条线互为主备用 所以我要准备两个公共dns服务器 一个给联通专用一个给移动专用

yyysuo commented 1 year ago

又折腾了一下openclash v0.45.128-beta 版本,有以下结论 1:在fakeip+tun模式下,即使本地dns劫持设置为停用,openclash依然会劫持dns请求到7874 2:在fakeip+tun模式下,开启绕过中国大陆 IP功能,大陆域名dns服务器填一个Adguard Home的地址,比如主路由是10.10.10.1,Adguard Home地址是10.10.10.100#2053,此Adguard Home不会收到任何的dns请求,不确定此现象是否正常。

MURChen commented 1 year ago

又折腾了一下openclash v0.45.128-beta 版本,有以下结论 1:在fakeip+tun模式下,即使本地dns劫持设置为停用,openclash依然会劫持dns请求到7874 2:在fakeip+tun模式下,开启绕过中国大陆 IP功能,大陆域名dns服务器填一个Adguard Home的地址,比如主路由是10.10.10.1,Adguard Home地址是10.10.10.100#2053,此Adguard Home不会收到任何的dns请求,不确定此现象是否正常。

@yyysuo 是否在oprnwrt 网络 dhcp内dns转发 指定到adguardhome地址

yyysuo commented 1 year ago

又折腾了一下openclash v0.45.128-beta 版本,有以下结论 1:在fakeip+tun模式下,即使本地dns劫持设置为停用,openclash依然会劫持dns请求到7874 2:在fakeip+tun模式下,开启绕过中国大陆 IP功能,大陆域名dns服务器填一个Adguard Home的地址,比如主路由是10.10.10.1,Adguard Home地址是10.10.10.100#2053,此Adguard Home不会收到任何的dns请求,不确定此现象是否正常。

@yyysuo 是否在oprnwrt 网络 dhcp内dns转发 指定到adguardhome地址

可以呀,但是你的目的是什么呢。

MURChen commented 1 year ago

又折腾了一下openclash v0.45.128-beta 版本,有以下结论 1:在fakeip+tun模式下,即使本地dns劫持设置为停用,openclash依然会劫持dns请求到7874 2:在fakeip+tun模式下,开启绕过中国大陆 IP功能,大陆域名dns服务器填一个Adguard Home的地址,比如主路由是10.10.10.1,Adguard Home地址是10.10.10.100#2053,此Adguard Home不会收到任何的dns请求,不确定此现象是否正常。

@yyysuo 是否在oprnwrt 网络 dhcp内dns转发 指定到adguardhome地址

可以呀,但是你的目的是什么呢。

你不转发,系统哪知道dns要去哪

HorizenX1 commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

问一下,这样设置的adguardhome里没有具体设备,只有localhost,你的是否也是这样

并不会啊 ADGuard直接监听53端口的情况下是没理由只有localhost的

我的adg直接监听53端口,但是客户端里只有localhost是为什么。 image image image

paladin4fan commented 1 year ago

@LemonPAKA @mikeoooxx @yyysuo 作者目前的脚本 当你使用fakeip+绕过大陆IP的组合 会强制添加一条防火墙规则 把53端口的流量劫持掉 刚重启插件的时候是全劫持到openclash的dns端口 然后用看门狗脚本检测 一旦dnsmasq启动完成就变成劫持到dnsmasq的端口 如果openclash没有设置成dnsmasq的上游服务器根本代理不了 我目前的方案是在启动脚本和看门狗脚本里加入自己的一段脚本把劫持的防火墙规则再删掉 这样原来的方案就能继续使用了 还是太麻烦了 只建议和我一样 有①需要同时过滤国内外网站 ②需要完整统计dns请求发起的设备是谁 两个需求的朋友用我这个方案

yyysuo commented 1 year ago

@LemonPAKA @mikeoooxx @yyysuo 作者目前的脚本 当你使用fakeip+绕过大陆IP的组合 会强制添加一条防火墙规则 把53端口的流量劫持掉 刚重启插件的时候是全劫持到openclash的dns端口 然后用看门狗脚本检测 一旦dnsmasq启动完成就变成劫持到dnsmasq的端口 如果openclash没有设置成dnsmasq的上游服务器根本代理不了 我目前的方案是在启动脚本和看门狗脚本里加入自己的一段脚本把劫持的防火墙规则再删掉 这样原来的方案就能继续使用了 还是太麻烦了 只建议和我一样 有①需要同时过滤国内外网站 ②需要完整统计dns请求发起的设备是谁 两个需求的朋友用我这个方案

是的,现在就是这样的,其实需求很明确,就是如果dns选择不劫持,那么openclash就不需要再添加dns劫持规则了。现在的状态其实就是如果选fakeip,就没法把其它dns插件放在openclash与客户端之间。

paladin4fan commented 1 year ago

@LemonPAKA @mikeoooxx @yyysuo 作者目前的脚本 当你使用fakeip+绕过大陆IP的组合 会强制添加一条防火墙规则 把53端口的流量劫持掉 刚重启插件的时候是全劫持到openclash的dns端口 然后用看门狗脚本检测 一旦dnsmasq启动完成就变成劫持到dnsmasq的端口 如果openclash没有设置成dnsmasq的上游服务器根本代理不了 我目前的方案是在启动脚本和看门狗脚本里加入自己的一段脚本把劫持的防火墙规则再删掉 这样原来的方案就能继续使用了 还是太麻烦了 只建议和我一样 有①需要同时过滤国内外网站 ②需要完整统计dns请求发起的设备是谁 两个需求的朋友用我这个方案

是的,现在就是这样的,其实需求很明确,就是如果dns选择不劫持,那么openclash就不需要再添加dns劫持规则了。现在的状态其实就是如果选fakeip,就没法把其它dns插件放在openclash与客户端之间。

可以放 就是要手动修改文件删他那几条劫持的防火墙规则 主要是每次更新版本都要修改一次 我本来也不太喜欢用fakeip 现在直接锁redir了

paladin4fan commented 1 year ago

在upstream_dns_file 开头添加了 127.0.0.1:7874就可以fakeip

是的 只要Openclash的上游DNS正常就行 如果你的大陆域名名单是从openclash里复制过来的 那fakeip模式下填的大陆域名DNS此时就没有作用了

问一下,这样设置的adguardhome里没有具体设备,只有localhost,你的是否也是这样

并不会啊 ADGuard直接监听53端口的情况下是没理由只有localhost的

我的adg直接监听53端口,但是客户端里只有localhost是为什么。 image image image

FakeIP吗 FakeIP+绕过大陆在现版本中 53端口被劫持到DNSmasq的监听端口 然后大陆域名白名单直接被dnsmasq转发给你填写的上游服务器(AdguardHome) DNS请求就会是这样的顺序: 设备->Openwrt 53端口(Adguard),被劫持到Dnsmasq端口->AdguardHome 所以都是localhost

HorizenX1 commented 1 year ago

对比了一下开启绕过大陆与不开启的防火墙规则,然后去除掉劫持dns的规则,填入oc的开发者选项中。 image image 现在yacd面板中没有大陆的连接,绕过大陆正常,同时没有dns劫持,adguardhome正常显示客户端的名称。

paladin4fan commented 1 year ago

对比了一下开启绕过大陆与不开启的防火墙规则,然后去除掉劫持dns的规则,填入oc的开发者选项中。 image image 现在yacd面板中没有大陆的连接,绕过大陆正常,同时没有dns劫持,adguardhome正常显示客户端的名称。

你等个三五分钟再看看dns有没有被劫持 它这个开发者选项应该是只在启动过程中执行 启动过程中它dns劫持是临时性劫持到openclash的端口 等dnsmasq正常工作之后 看门狗脚本还会再劫持一次

HorizenX1 commented 1 year ago

对比了一下开启绕过大陆与不开启的防火墙规则,然后去除掉劫持dns的规则,填入oc的开发者选项中。 image image 现在yacd面板中没有大陆的连接,绕过大陆正常,同时没有dns劫持,adguardhome正常显示客户端的名称。

你等个三五分钟再看看dns有没有被劫持 它这个开发者选项应该是只在启动过程中执行 启动过程中它dns劫持是临时性劫持到openclash的端口 等dnsmasq正常工作之后 看门狗脚本还会再劫持一次

没有开绕过大陆就不会劫持dns了,我现在这样设置感觉挺好用的。我之前尝试开启绕过大陆,同时开发者选项里删除dns劫持的规则就会出现你说的这种情况。