smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

试着分析下解析smartdns+ssrp流程,各位大佬请指教

Open jxph1123 opened this issue 3 years ago • 26 comments

研究了和使用了一段时间,总结了下smartdns+ssrp解析流程,各位大佬看看有没有理解错误。

smartdns主要设置:第一组(默认组):6053,国内DNS(阿里、腾讯等);第二组:5335,国外DNS(google、cloudflare等)并设置排除默认组。 SSRP:使用5335端口解析。

解析流程如下图:

image

jxph1123 avatar Sep 15 '22 04:09 jxph1123

逻辑上就不通,ssrp是对smartdns的结果进行抢答吗?不然怎么”进行合并处理“然后返给dnsmasq

PikuZheng avatar Sep 15 '22 05:09 PikuZheng

另外”ssrp读取smartdns结果“是个什么操作?从流程图上看没有哪个应用把smartdns第一组结果送给ssrp,是要ssrp监视smartdns的日志吗?

PikuZheng avatar Sep 15 '22 05:09 PikuZheng

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量

但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

crackerfly avatar Sep 17 '22 01:09 crackerfly

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量

但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

jxph1123 avatar Sep 17 '22 01:09 jxph1123

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的

逻辑上你要仔细想清楚

crackerfly avatar Sep 17 '22 01:09 crackerfly

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的

逻辑上你要仔细想清楚

但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。

jxph1123 avatar Sep 17 '22 02:09 jxph1123

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚

但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。

这个问题的症结在于 1.ssrp的规则集里没有列出的域名,且被国内DNS污染,这种情况你会遇到开全局模式可以访问,规则模式GeoIP判断不起作用无法访问 2.比如你用的美国代理服务器,但根据位置DNS解析拿到的解析结果是日本CDN节点,本来这种情况你通过代理服务器访问美国CDN节点才是最快的,但你却去绕了一大圈

crackerfly avatar Sep 17 '22 02:09 crackerfly

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚

但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。

而且如果不开缓存和测速,SmartDns根本没起任何作用啊,你干嘛不把SSRP的国外DNS直接配置成8.8.8.8这样呢?在路由器里白绕一圈无用功

crackerfly avatar Sep 17 '22 02:09 crackerfly

画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果

谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果

但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚

但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。

而且如果不开缓存和测速,SmartDns根本没起任何作用啊,你干嘛不把SSRP的国外DNS直接配置成8.8.8.8这样呢?在路由器里白绕一圈无用功

那我是不是可以理解为smartdns只需要开一个国内组就可以了,第二组dns可以不用开然后在ssrp里的国外dns直接选择列表里的即可?

frankilla1987 avatar Sep 19 '22 15:09 frankilla1987

就是不太清楚,所以期待大佬能给个权威的回答,我更新流程图,好给新手参考。 @pymumu

jxph1123 avatar Sep 20 '22 00:09 jxph1123

每个人的使用场景不一样,不能一概而论。我的smartdns和ss虽然在同一台openwrt上,但是独立使用的。smartdns根据gfwlist的域名自主决定要不要用国外的dns服务器解析。不存在第二dns服务器。ss只管转发全部流量,不管dns。

条条小路绕城门,照抄别人的路没有意义,自己弄懂逻辑设计出适合自己的一套方案才是最合适的

PikuZheng avatar Sep 20 '22 02:09 PikuZheng

本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。

frankilla1987 avatar Sep 20 '22 02:09 frankilla1987

本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。

巧了我也是。但是我有两组ss和三组smardns在不同的虚拟机上,ros负责路由决策和故障识别。ss就无脑代理所有流量(透明代理)。smartdns分两个上游服务器组分别是国内和国外。目前是用domain-list,在gfwlist内域名列表走国外组。其他的都由dnspod和阿里(国内)处理。

PikuZheng avatar Sep 20 '22 02:09 PikuZheng

本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。

巧了我也是。但是我有两组ss和三组smardns在不同的虚拟机上,ros负责路由决策和故障识别。ss就无脑代理所有流量(透明代理)。smartdns分两个上游服务器组分别是国内和国外。目前是用domain-list,在gfwlist内域名列表走国外组。其他的都由dnspod和阿里(国内)处理。

所以smartdns还是开第二个dns服务器吗?那ssrp的外国dns选择列表内的还是走5335?我之前走5335,也就是smartdns里的第二组DNS。(又迷茫了)谢谢~

frankilla1987 avatar Sep 20 '22 03:09 frankilla1987

所以smartdns还是开第二个dns服务器吗

没有,只是分国内组和国外组对应不同上游。几个不同的smartdns服务是自动同步配置文件的。

那ssrp的外国dns选择列表内的还是走5335

ssrp不关心域名,它无脑代理一切。正常上网流量ros就正常出去了,不会到ssrp那边。

都用ros做主路由器了,所有流量到op那边转一圈不是降低效率嘛。应该由ros决定路由表。

PikuZheng avatar Sep 20 '22 03:09 PikuZheng

所以smartdns还是开第二个dns服务器吗

没有,只是分国内组和国外组对应不同上游。几个不同的smartdns服务是自动同步配置文件的。

那ssrp的外国dns选择列表内的还是走5335

ssrp不关心域名,它无脑代理一切。正常上网流量ros就正常出去了,不会到ssrp那边。

都用ros做主路由器了,所有流量到op那边转一圈不是降低效率嘛。应该由ros决定路由表。

serve-expired-ttl 345600 serve-expired-reply-ttl 1 serve-expired-prefetch-time 43200

force-qtype-SOA 65 speed-check-mode tcp:443,ping bind:6053 -group china bind:5335 -group gfwlist -no-speed-check

server-tls 1.12.12.12:853 -group china server 202.102.224.68 -group china server 101.6.6.6 -group china

server-tls 1.0.0.1:853 -group gfwlist -exclude-default-group server-tls 8.8.4.4:853 -group gfwlist -exclude-default-group

这是我的配置,但是看你回复后“smartdns分两个上游服务器组分别是国内和国外”好像不用绑定端口?这部分就有点疑问,是可以删了这个绑定端口配置?

frankilla1987 avatar Sep 20 '22 03:09 frankilla1987

是可以删了这个绑定端口配置?

可以删的,只有一个bind:6053即可。绑不同端口是为了应用不同的全局配置(旧版很多策略不能作用于单个域名)现在既然已经指定了域名组,用domain-rules指定即可。比如gfw的不支持ipv6和icmp就可以 domain-rules /domain-set:gfw/ -speed-check-mode none -nameserver gfwlist -address #6

PikuZheng avatar Sep 20 '22 03:09 PikuZheng

是可以删了这个绑定端口配置?

可以删的,只有一个bind:6053即可。绑不同端口是为了应用不同的全局配置(旧版很多策略不能作用于单个域名)现在既然已经指定了域名组,用domain-rules指定即可。比如gfw的不支持ipv6和icmp就可以 domain-rules /domain-set:gfw/ -speed-check-mode none -nameserver gfwlist -address #6

好的,万分感谢回复,我得好好消化下=_=。也叨扰了其他各位,抱歉。

frankilla1987 avatar Sep 20 '22 03:09 frankilla1987

我是AX9000刷带QSDK驱动的OpenWRT 装SmartDNS;

  • 国内按公司关系做域名分组,比如腾讯系,阿里系
  • 不确认关系的用阿里和114
  • 根据MAC地址对不同的设备分配不同的网关(主路由/旁路由)

Mac Mini上跑Surge作为旁路由,关闭DHCP

  • 配置文件放在iCloud和手机端及其他Mac同步
  • 用脚本定时把Surge配置文件的国外规则转为SmartDNS的domain-rules 自动同步到OpenWRT上作为国外分组分流使用

crackerfly avatar Sep 20 '22 07:09 crackerfly

  • 国内按公司关系做域名分组,比如腾讯系,阿里系

想当年运营商污染没这么严重时我也是这么用的,还有一个百度系。直到有一天我发现腾讯会把自家网站解到上海电信(我联通

  • 用脚本定时把Surge配置文件的国外规则转为SmartDNS的domain-rules 自动同步到OpenWRT上作为国外分组分流使用

用的同一个规则,现在支持domain-list了,可以不用那么复杂了(目前openwrt定时任务每天UTC23点

PikuZheng avatar Sep 20 '22 10:09 PikuZheng

serve-expired-ttl 345600 serve-expired-reply-ttl 1 serve-expired-prefetch-time 43200

force-qtype-SOA 65 speed-check-mode tcp:443,ping bind:6053 -group china bind:5335 -group gfwlist -no-speed-check

server-tls 1.12.12.12:853 -group china server 202.102.224.68 -group china server 101.6.6.6 -group china

server-tls 1.0.0.1:853 -group gfwlist -exclude-default-group server-tls 8.8.4.4:853 -group gfwlist -exclude-default-group

大佬我想_(:з」∠)_。。。。。。。 serve-expired-ttl 345600 serve-expired-reply-ttl 1 serve-expired-prefetch-time 43200

force-qtype-SOA 65 speed-check-mode tcp:443,ping bind:6053 -group china bind:5335 -group gfwlist -no-speed-check

server-tls 1.12.12.12:853 -group china server 202.102.224.68 -group china server 101.6.6.6 -group china

server-tls 1.0.0.1:853 -group gfwlist -exclude-default-group server-tls 8.8.4.4:853 -group gfwlist -exclude-default-group 能否帮我改一下,我实在是不知道怎么去调整,我没开smartdns的第二个dns服务器,ssrp外国DNS解析用了列表里的8.8.4.4 跪谢了!

frankilla1987 avatar Sep 20 '22 10:09 frankilla1987

bind:6053 -group china bind:5335 -group gfwlist -no-speed-check

这就是两个啊 第一个端口6053 第二个端口5335

ssrp外国DNS解析用了列表里的8.8.4.4

可能不是从smartdns出去的,它自己有一套dns转发规则

PikuZheng avatar Sep 20 '22 12:09 PikuZheng

bind:6053 -group china bind:5335 -group gfwlist -no-speed-check

这就是两个啊 第一个端口6053 第二个端口5335

ssrp外国DNS解析用了列表里的8.8.4.4

可能不是从smartdns出去的,它自己有一套dns转发规则

额,我的意思是之前你说只需要保留bind:6053就行,5335不需要了?外国dns直接用ssrp里的?就是我的这个配置如何调整?我要是删除-group china,smartdns直接未运行- -就想通过你更改一下我的配置然后抄个作业_(:з」∠)_。谢谢

frankilla1987 avatar Sep 20 '22 13:09 frankilla1987

serve-expired....(恕删)

bind:6053

server-tls 1.12.12.12:853 -group china
server 202.102.224.68 -group china
server 101.6.6.6 -group china

server-tls 1.0.0.1:853 -group gfwlist -exclude-default-group
server-tls 8.8.4.4:853 -group gfwlist -exclude-default-group

另外在gfwlist的domain-rules规则中指定 -speed-check-mode none,完整的看起来像这样:

domain-rules /google.com或者用domain-set/ -speed-check-mode none -nameserver gfwlist
domain-rules /baidu.com或者用domain-set/ -nameserver china

PikuZheng avatar Sep 20 '22 14:09 PikuZheng

serve-expired....(恕删)

bind:6053

server-tls 1.12.12.12:853 -group china
server 202.102.224.68 -group china
server 101.6.6.6 -group china

server-tls 1.0.0.1:853 -group gfwlist -exclude-default-group
server-tls 8.8.4.4:853 -group gfwlist -exclude-default-group

另外在gfwlist的domain-rules规则中指定 -speed-check-mode none,完整的看起来像这样:

domain-rules /google.com或者用domain-set/ -speed-check-mode none -nameserver gfwlist
domain-rules /baidu.com或者用domain-set/ -nameserver china

感谢!!!!

frankilla1987 avatar Sep 20 '22 14:09 frankilla1987

做dnsmasq上游就行了 关键是国外用tcp协议dns服务器

openips avatar Sep 20 '22 14:09 openips

分流参考https://pymumu.github.io/smartdns/config/forwarding-with-ipset/ 如果是luci,可以参考:https://github.com/pymumu/smartdns/releases/tag/feature-dns-forwarding

pymumu avatar Jan 04 '24 14:01 pymumu