smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

根据国内国外域名以及IP来分类解析

Open PHCSJC opened this issue 2 years ago • 20 comments

1.读取geosite.dat文件,国内域名用国内dns解析,国外域名用国外dns解析(同时添加到ipset) 2.未知域名先用国内dns解析,再根据geoip.dat来判断ip,如果是国内ip直接返回,如果是国外ip,再用国外dns解析一次再返回(同时添加到ipset)

这样应该就是目前最理想的解析方式了,无论什么域名都是最优,国内域名直连,国外走代理,也几乎不会误判,希望作者可以考虑,非常感谢!

PHCSJC avatar Aug 19 '22 12:08 PHCSJC

可以用脚本将数据转换为smartdns对应的格式。

pymumu avatar Aug 21 '22 03:08 pymumu

转换格式是可以的,但第2点的逻辑判断怎么实现呢?

PHCSJC avatar Aug 21 '22 03:08 PHCSJC

使用blacklist-ip或whitelist-ip

pymumu avatar Aug 21 '22 07:08 pymumu

实在想不到怎么用blacklist-ip或whitelist-ip来实现,大佬能再说详细点吗?

PHCSJC avatar Aug 21 '22 12:08 PHCSJC

用CHNROUTE生成whitelist列表,然后server增加配置参数whitelist-ip,这样,只有对应server返回的IP地址列表在whitelist中才会接受,否则就丢弃记录。 backlist-ip是相反的逻辑,是DNS结果有backlist-ip,则丢弃。

pymumu avatar Aug 21 '22 12:08 pymumu

又仔细看了看各项参数,目前能想到的配置是这样的:

server 223.5.5.5 -group cndns -exclude-default-group <<<<<解析已知国内域名 server-tcp 1.1.1.1 -group gfwdns -exclude-default-group <<<<<解析已经国外域名(google等) server 223.6.6.6 -whitelist-ip <<<<<解析未知域名,用国内DNS,如果IP是国内接受,反之忽略 server-tcp 8.8.8.8 -blacklist-ip <<<<<解析未知域名,用国外DNS,如果IP是国内忽略,反之接受

conf-file /etc/smartdns/cnsite.conf <<<<<已知的国内域名,和上面的第1行配合 conf-file /etc/smartdns/gfwlist.conf <<<<<已知的国外域名,和上面的第2行配合 conf-file /etc/smartdns/cnip-whitelist.conf <<<<<国内IP段,作为白名单,和上面的第3行配合 conf-file /etc/smartdns/cnip-blacklist.conf <<<<<国内IP段,作为黑名单,和上面的第4行配合

但仍然有2个问题未解决,请大佬看看 1.第4行解析未知域名,如果是非国内IP就接受,此时还要加到ipset中,怎么加? 2.未知域名,会同时用第3和4行去解析,有一种情况是某个域名用了cdn,国内解析是国内IP,国外解析就是国外IP,比如baidu.com,那么解析得到的IP都会接受,都会返回给客户端,这个怎么解决?用测速正好解决了,因为肯定只会是国内IP测速快,歪打正着,但解析到的国外IP还是会被加到ipset中(假设第1个问题已解决),怎么办?

PHCSJC avatar Aug 22 '22 12:08 PHCSJC

考虑到常见国内域名和常见国外域名。剩下的用国内dns或国外dns解析区别不大,而且我更倾向这部分(未分组什么的)用国内dns处理。 smartdns的ipset处理可能与预期也不一样。如果一个查询同时走了国内dns上游和国外dns上游,那么配置fast-response理论上一定会得到国内dns上游结果且写入ipset。国外dns上游结果后到,写入缓存但不会写入ipset。

PikuZheng avatar Aug 22 '22 14:08 PikuZheng

@PikuZheng 可能我的需求还是没说明白,你有没有遇到过这种情况?(gfwlist模式下) 有时google搜索后,会去打开一些小网站或者个人网站(未被墙),因为这些网站都在国外,所以非常的慢,然后可以临时修改代理策略为全局,再重新打开就会非常快,这种情况遇到过吗?

另一种情况,在google搜索后,你去打开某个网站,发现无法打开,此时你会不会想,是这个网站关了?还是这个网站被墙了?所以再临时开个全局模式去试试

我的核心需求是基于以上这些情况来的,所以要用国外DNS解析,并增加到ipset中。

PHCSJC avatar Aug 23 '22 00:08 PHCSJC

我联通,出国没有电信那么困扰。打不开的网站chrome会明确给出原因,此链接不安全就是DNS污染,connect reset就是gfw阻断

PikuZheng avatar Aug 23 '22 01:08 PikuZheng

@PikuZheng 可是我这就是苦逼的电信,小区只有电信,没办法,所以才来求大佬

PHCSJC avatar Aug 23 '22 01:08 PHCSJC

发现重复 #924 打听一下geosite是动态更新的吗?还是基本不变(比如一天才更新一次

PikuZheng avatar Sep 08 '22 00:09 PikuZheng

@PikuZheng 每天更新,我现在是mosdns和smartdns混用,mosdns可以完美实现我的需求,但还是希望smartdns可以实现

PHCSJC avatar Sep 08 '22 00:09 PHCSJC

用domain-set

pymumu avatar Sep 08 '22 01:09 pymumu

@pymumu 大佬你好,非常感谢新增的参数,我看了看,好像解决不了我在7楼的第1个问题,就是: 1.第4行解析未知域名,如果是非国内IP就接受,此时还要加到ipset中,怎么加?

或者说,这个参数有其他的配置方法,可以实现我的需求?(1楼描述了需求,9楼讲了需求的实际场景)

PHCSJC avatar Sep 08 '22 06:09 PHCSJC

用whilelist-ip配合CHNROUTE,应用到国内dns服务器上。

https://github.com/QiuSimons/Chnroute

pymumu avatar Sep 08 '22 13:09 pymumu

用whilelist-ip配合CHNROUTE,应用到国内dns服务器上。

https://github.com/QiuSimons/Chnroute

能否给个菜鸟配置,让菜鸟体验一下,期待这功能好久了

LsnmxNB avatar Sep 08 '22 17:09 LsnmxNB

用whilelist-ip配合CHNROUTE,应用到国内dns服务器上。

https://github.com/QiuSimons/Chnroute

大佬你好,我就是这样配置的,在7楼,但还有问题未解决,大佬可以帮看看吗?7楼

PHCSJC avatar Sep 09 '22 01:09 PHCSJC

最新代码。

domain-set -name cn-site -file  /etc/smartdns/cnsite.conf 
domain-rules /domain-set:cn-site/ -ipset [ipsetname] -nameserver [nameserver-group]

cnsite.conf: 文件格式是一行一个域名。 没有其他内容。 ipsetname: 修改成自己的。 nameserver-group 修改成自己的。

pymumu avatar Sep 09 '22 02:09 pymumu

最新代码。

domain-set -name cn-site -file  /etc/smartdns/cnsite.conf 
domain-rules /domain-set:cn-site/ -ipset [ipsetname] -nameserver [nameserver-group]

cnsite.conf: 文件格式是一行一个域名。 没有其他内容。 ipsetname: 修改成自己的。 nameserver-group 修改成自己的。

这个我已经仔细看了,还是解决不了我的问题哈 好吧,可能大佬比较忙,没空看我的需求,我再等等看吧!

PHCSJC avatar Sep 09 '22 02:09 PHCSJC

这个其实就是国外走ipset,目前需要ipset支持IP地址黑白名单就可以了。

ipset支持黑白名单,看看有多少有人需求吧。

pymumu avatar Sep 09 '22 11:09 pymumu

用CHNROUTE生成whitelist列表,然后server增加配置参数whitelist-ip,这样,只有对应server返回的IP地址列表在whitelist中才会接受,否则就丢弃记录。 backlist-ip是相反的逻辑,是DNS结果有backlist-ip,则丢弃。

可以让IP列表也支持类似domain-set的引用功能吗?这样用CHNRoute分流时,黑白名单就不用同时生成两份了

InspoOnU avatar Oct 12 '22 18:10 InspoOnU

这个其实就是国外走ipset,目前需要ipset支持IP地址黑白名单就可以了。

ipset支持黑白名单,看看有多少有人需求吧。

geosite.dat

大佬现能直接使用没

LsnmxNB avatar Nov 12 '22 21:11 LsnmxNB

用whilelist-ip配合CHNROUTE,应用到国内dns服务器上。 https://github.com/QiuSimons/Chnroute

大佬你好,我就是这样配置的,在7楼,但还有问题未解决,大佬可以帮看看吗?7楼

https://github.com/QiuSimons/Chnroute

怎么用麻烦帖个配置

LsnmxNB avatar Nov 13 '22 01:11 LsnmxNB

分流可以参考这个:https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

pymumu avatar Jan 04 '24 14:01 pymumu

分流可以参考这个:https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

看了下没太明白,未知域名(不在任何列表中的域名)是走哪个查询呢?

PHCSJC avatar Jan 05 '24 00:01 PHCSJC

分流可以参考这个:https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

看了下没太明白,未知域名(不在任何列表中的域名)是走哪个查询呢?

会同时走所有没有从默认组排除的上游

PikuZheng avatar Jan 05 '24 00:01 PikuZheng

分流可以参考这个:https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

看了下没太明白,未知域名(不在任何列表中的域名)是走哪个查询呢?

会同时走所有没有从默认组排除的上游

这里再优化一下就更好了,就像这个issue最初提的

PHCSJC avatar Jan 05 '24 00:01 PHCSJC

方案都是一样的,国内外域名看你是放到白名单,还是黑名单。

如果国外放到白名单,就是例子那个。 如果国内放到白名单,只要域名数据对调就可以了。

pymumu avatar Jan 05 '24 01:01 pymumu

方案都是一样的,国内外域名看你是放到白名单,还是黑名单。

如果国外放到白名单,就是例子那个。 如果国内放到白名单,只要域名数据对调就可以了。

因为域名是不可能列全的,所有肯定还有大量未知域名,这里主要说的就是未知域名的优化哈

PHCSJC avatar Jan 05 '24 01:01 PHCSJC

逻辑上

默认的服务器组是处理所有域名的,包括你说的未知域名。 domain-rules指定的那些域名就是白名单域名。

白名单域名走ipset方案

指导书那个就相当于将已知道的域名,专门进行分流,而未知域名,则采用标准的查询方式,不做任何分流。

配置参考:

#默认DNS服务器
server 114.114.114.114
#分流的DNS服务器,走安全查询避免DNS泄漏
server-tls 1.1.1.1 -group 分流 
# 设置需要分流域名列表
domain-set -name 分流域名 -file /path/to/分流域名列表文件.list
# 设置对应的规则,比如ipset,屏蔽ipv6,关闭测速等。
force-qtype-SOA 65
domain-rules /domain-set:分流域名/ -nameserver 分流 -ipset tproxy -speed-check-mode none -address #6

未知域名走ipset方案

当然要反过来,将未知的域名分流,白名单直接连接。逻辑上是一样的,只要反过来配置数据和规则即可。

配置参考:

# 白名单域名查询的服务器,-exclude-default-group避免默认服务器使用此上游查询,避免DNS泄漏。
server 114.114.114.114 -group 白名单 -exclude-default-group
# 设置白名单域名列表
domain-set -name 白名单域名 -file /path/to/白名单域名列表文件.list
# 设置对应的规则,启用ipv6, 启用测速等。忽略ipset,设置列表中的域名直接链接
domain-rules /domain-set:白名单域名/ -nameserver 白名单 -speed-check-mode ping,tcp:80,tcp:443 -address -6 -ipset -

# 下面对其他未知域名进行规则处理,如通过ipset,TPROXY转发。
server-tls 1.1.1.1 
bind [::]:53 -ipset [ipsetname] -nftset [nftsetname]
# 关闭ipv6和https记录
force-qtype-SOA 28 65
# 关闭测速,ipset分流没必要测速。
speed-check-mode none

推荐是使用白名单域名走ipset方案,因为日常需要走白名单的就那么多域名,并且对应的域名github上也有每日更新。此方案也避免了不必要的流量、带宽消耗。

pymumu avatar Jan 05 '24 01:01 pymumu