xiaorouji / openwrt-passwall

7.01k stars 2.62k forks source link

[Bug]: 使用远程dns时,.cn 域名不走本地dns #3097

Closed quanljh closed 5 months ago

quanljh commented 5 months ago

描述您遇到的bug

使用最新4.76-3, 模式中国列表以外,DNS使用ChinaDNS-NG,默认标签选择远程DNS, 为什么chnroute 要走默认路由 而不是国内dns? 用远程dns 是为了防止dns leak,最近更新之后发现 国内的一些app 连接异常,查了下日志发现chinroute 使用的默认路由。 更新: 这个日志输出应该是 日志输出代码那块的bug,不重要。 主要是默认域名规则列表chinadns_chnlist少了 cn 这个规则,导致chinadns-ng 使用远程dns 去解析cn 域名, 请看我最新comment

2024-04-04 14:36:26: - 域名解析:使用UDP协议请求DNS(1.1.1.1)... 2024-04-04 14:36:26: * 要求代理 DNS 请求,如上游 DNS 非直连地址,确保 UDP 代理打开,并且已经正确转发! 2024-04-04 14:36:26: | - (chinadns-ng) 最高支持4级域名过滤... 2024-04-04 14:36:26: + 过滤服务:ChinaDNS-NG(:15354):国内DNS:192.168.1.1,可信DNS:1.1.1.1 2024-04-04 14:36:26: - 节点列表中的域名(vpslist):192.168.1.1 2024-04-04 14:36:26: - 域名白名单(whitelist):192.168.1.1 2024-04-04 14:36:26: - 代理域名表(blacklist):1.1.1.1 2024-04-04 14:36:26: - 防火墙域名表(gfwlist):默认 2024-04-04 14:36:26: - 中国域名表(chnroute):默认 2024-04-04 14:36:26: - 默认:127.0.0.1#15354

复现此Bug的步骤

DNS 配置 image 模式配置 image

您想要实现的目的

能否让 chinroute 使用的国内dns 192.168.1.1,如果这是expected behavior,是否可以增加选项 指定chinroute 的dns cn 域名默认走 本地dns 解析

日志信息

2024-04-04 14:38:17: 删除相关防火墙规则完成。 2024-04-04 14:38:21: 清空并关闭相关程序和缓存完成。 2024-04-04 14:38:21: TCP节点:[sakura],监听端口:1041 2024-04-04 14:38:21: 开启实验性IPv6透明代理(TProxy),请确认您的节点及类型支持IPv6! 2024-04-04 14:38:21: 过滤服务配置:准备接管域名解析... 2024-04-04 14:38:21: - 域名解析:使用UDP协议请求DNS(1.1.1.1)... 2024-04-04 14:38:21: * 要求代理 DNS 请求,如上游 DNS 非直连地址,确保 UDP 代理打开,并且已经正确转发! 2024-04-04 14:38:21: | - (chinadns-ng) 最高支持4级域名过滤... 2024-04-04 14:38:21: + 过滤服务:ChinaDNS-NG(:15354):国内DNS:192.168.1.1,可信DNS:1.1.1.1 2024-04-04 14:38:22: - 节点列表中的域名(vpslist):192.168.1.1 2024-04-04 14:38:22: - 域名白名单(whitelist):192.168.1.1 2024-04-04 14:38:22: - 代理域名表(blacklist):1.1.1.1 2024-04-04 14:38:22: - 防火墙域名表(gfwlist):默认 2024-04-04 14:38:22: - 中国域名表(chnroute):默认 2024-04-04 14:38:22: - 默认:127.0.0.1#15354 2024-04-04 14:38:22: - PassWall必须依赖于Dnsmasq,如果你自行配置了错误的DNS流程,将会导致域名(直连/代理域名)分流失效!!! 2024-04-04 14:38:22: 开始加载防火墙规则... 2024-04-04 14:38:25: - [0]追加ISP IPv4 DNS到白名单:192.168.1.1 2024-04-04 14:38:25: - [0]追加ISP IPv6 DNS到白名单:fe80::1 2024-04-04 14:38:25: 加入负载均衡的节点到nftset[passwall_vpslist]直连完成 2024-04-04 14:38:25: 加入所有节点到nftset[passwall_vpslist]直连完成 2024-04-04 14:38:26: - [0]追加直连DNS到nftables:192.168.1.1:53 2024-04-04 14:38:26: - 【路由器本机】,屏蔽代理 UDP 端口[443] 2024-04-04 14:38:27: - [0]将上游 DNS 服务器 1.1.1.1:53 加入到路由器自身代理的 UDP 转发链 2024-04-04 14:38:27: 访问控制: 2024-04-04 14:38:28: - 【默认】,屏蔽代理 UDP 端口[443] 2024-04-04 14:38:28: - 【默认】,使用 TCP 节点 2024-04-04 14:38:28: - 【默认】,使用 UDP 节点 2024-04-04 14:38:28: 防火墙规则加载完成! 2024-04-04 14:38:34: 重启 dnsmasq 服务 2024-04-04 14:38:34: 配置定时任务:自动更新规则。 2024-04-04 14:38:34: 运行完成!

截图

See above

系统相关信息

Passwall 版本: 4.76-3 Openwrt 版本: ImmortalWrt 23.05.2

其他信息

No response

quanljh commented 5 months ago

补充:看了下chinadns-ng 的日志,带cn 后缀的域名都走了 远程dns,因为chnlist 里面没有.cn 后缀的域名 image

quanljh commented 5 months ago

补充: 在直连列表吧 cn 加上去就可以访问了. Passwall 默认的这个china domain list 时带有cn的 规则

image

但是下面这个code 里面domain pattern会match 不到 cn ,因为没有"." https://github.com/xiaorouji/openwrt-passwall/blob/248d5d1d6bb8d724e75d51d5209bd2f65ba1505b/luci-app-passwall/root/usr/share/passwall/rule_update.lua#L26

下面是 regex 匹配 image

这个感觉可以改下 比如最后加上cn 规则。

然后用远程dns后,app 加载不了的原因,应该是远程dns 解析的ip 拒绝了我本地ip 的访问。加上cn 规则后就能解析到距离我最近的ip ,然后就正常访问了

wtfr-dot commented 5 months ago

补充: 在直连列表吧 cn 加上去就可以访问了. Passwall 默认的这个china domain list 时带有cn的 规则

image

但是下面这个code 里面domain pattern会match 不到 cn ,因为没有"."

https://github.com/xiaorouji/openwrt-passwall/blob/248d5d1d6bb8d724e75d51d5209bd2f65ba1505b/luci-app-passwall/root/usr/share/passwall/rule_update.lua#L26

下面是 regex 匹配 image

这个感觉可以改下 比如最后加上cn 规则。

然后用远程dns后,app 加载不了的原因,应该是远程dns 解析的ip 拒绝了我本地ip 的访问。加上cn 规则后就能解析到距离我最近的ip ,然后就正常访问了

这个我也是很早就发现了这个问题,比如autohome.com.cn这么常见的域名都走的远程解析,当时我还在chnlist文件里去搜过,确实没有,我以为是正常的,你提出来后我再一看原来是转换的时候把cn这个去掉了,所以带cn后缀域名全部都走了远程查询,我把这个原始文件转成smartdns格式文件作为域名规则加载并用cn组解析,再看log,passwall把查询传给smartdns后,smartdns就直接采用了国内组查询,以前都是采用默认组查询,我把国外组设的默认组,所以就走了远程 @xiaorouji ,这个转换规则是不是要修正一下

wtfr-dot commented 5 months ago

补充: 在直连列表吧 cn 加上去就可以访问了. Passwall 默认的这个china domain list 时带有cn的 规则 image 但是下面这个code 里面domain pattern会match 不到 cn ,因为没有"." https://github.com/xiaorouji/openwrt-passwall/blob/248d5d1d6bb8d724e75d51d5209bd2f65ba1505b/luci-app-passwall/root/usr/share/passwall/rule_update.lua#L26

下面是 regex 匹配 image 这个感觉可以改下 比如最后加上cn 规则。 然后用远程dns后,app 加载不了的原因,应该是远程dns 解析的ip 拒绝了我本地ip 的访问。加上cn 规则后就能解析到距离我最近的ip ,然后就正常访问了

这个我也是很早就发现了这个问题,比如autohome.com.cn这么常见的域名都走的远程解析,当时我还在chnlist文件里去搜过,确实没有,我以为是正常的,你提出来后我再一看原来是转换的时候把cn这个去掉了,所以带cn后缀域名全部都走了远程查询,我把这个原始文件转成smartdns格式文件作为域名规则加载并用cn组解析,再看log,passwall把查询传给smartdns后,smartdns就直接采用了国内组查询,以前都是采用默认组查询,我把国外组设的默认组,所以就走了远程 @xiaorouji ,这个转换规则是不是要修正一下

把cn加到直连列表里确实是最简单有效的方法

SakuraFallingMad commented 5 months ago

有些域名.cn确实使用境外dns无法解析,可以将需求的特例手动添加到直连列表里。 另,个人认为把TLD过滤掉是防止多余域名一股脑判定。可以参考其他一些维护的repo。如:scripts/chinalist/chinalist.sh

github-actions[bot] commented 5 months ago

Stale Issue

xiaorouji commented 5 months ago

把cn加到直连列表里确实是最简单有效的方法

暫時先這樣處理吧,後續我看看優不優化好。

laaArmy commented 1 month ago

补充: 在直连列表吧 cn 加上去就可以访问了. Passwall 默认的这个china domain list 时带有cn的 规则

image

但是下面这个code 里面domain pattern会match 不到 cn ,因为没有"." https://github.com/xiaorouji/openwrt-passwall/blob/248d5d1d6bb8d724e75d51d5209bd2f65ba1505b/luci-app-passwall/root/usr/share/passwall/rule_update.lua#L26

下面是 regex 匹配 image

这个感觉可以改下 比如最后加上cn 规则。

然后用远程dns后,app 加载不了的原因,应该是远程dns 解析的ip 拒绝了我本地ip 的访问。加上cn 规则后就能解析到距离我最近的ip ,然后就正常访问了

这段时间我自己琢磨出了这个办法,我还以为是我错觉,原来是真的可以解决