smartdns
smartdns copied to clipboard
试着分析下解析smartdns+ssrp流程,各位大佬请指教
研究了和使用了一段时间,总结了下smartdns+ssrp解析流程,各位大佬看看有没有理解错误。
smartdns主要设置:第一组(默认组):6053,国内DNS(阿里、腾讯等);第二组:5335,国外DNS(google、cloudflare等)并设置排除默认组。 SSRP:使用5335端口解析。
解析流程如下图:

逻辑上就不通,ssrp是对smartdns的结果进行抢答吗?不然怎么”进行合并处理“然后返给dnsmasq
另外”ssrp读取smartdns结果“是个什么操作?从流程图上看没有哪个应用把smartdns第一组结果送给ssrp,是要ssrp监视smartdns的日志吗?
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量
但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量
但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的
逻辑上你要仔细想清楚
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的
逻辑上你要仔细想清楚
但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚
但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。
这个问题的症结在于 1.ssrp的规则集里没有列出的域名,且被国内DNS污染,这种情况你会遇到开全局模式可以访问,规则模式GeoIP判断不起作用无法访问 2.比如你用的美国代理服务器,但根据位置DNS解析拿到的解析结果是日本CDN节点,本来这种情况你通过代理服务器访问美国CDN节点才是最快的,但你却去绕了一大圈
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚
但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。
而且如果不开缓存和测速,SmartDns根本没起任何作用啊,你干嘛不把SSRP的国外DNS直接配置成8.8.8.8这样呢?在路由器里白绕一圈无用功
画图好评,但逻辑错了,开启SSRP后,客户端所有请求都是先到SSRP的,SSRP再请求SmartDns解析,得到解析结果后根据Rule转发流量 但你需要进一步了解什么叫远端解析,SmartDns不应用于被代理的流量部分,而是由代理服务器查询离其最近的解析结果,而不是离你最近的解析结果
谢谢各位大佬,等后面确定了,再更新图。 代理部分我走的5335第二DNS,关闭了测速,应该可以满足代理服务器查询离其最近的解析结果
但是SSRP又怎么知道”这个域名”是国内还是国外的呢? 得先查询到结果,再跟IP数据库对比才知道啊,”先查询”这个动作又是先通过第一服务器查询的,那得到的结果可能对比IP库就是国内的,但其实本来是错的 逻辑上你要仔细想清楚
但实际看smartdns日志,又是正常的。默认组开了测速,第二组(国外)跳过测速,smartdns也是这样处理的,基本国内域名有测速日志,国外没有。
而且如果不开缓存和测速,SmartDns根本没起任何作用啊,你干嘛不把SSRP的国外DNS直接配置成8.8.8.8这样呢?在路由器里白绕一圈无用功
那我是不是可以理解为smartdns只需要开一个国内组就可以了,第二组dns可以不用开然后在ssrp里的国外dns直接选择列表里的即可?
就是不太清楚,所以期待大佬能给个权威的回答,我更新流程图,好给新手参考。 @pymumu
每个人的使用场景不一样,不能一概而论。我的smartdns和ss虽然在同一台openwrt上,但是独立使用的。smartdns根据gfwlist的域名自主决定要不要用国外的dns服务器解析。不存在第二dns服务器。ss只管转发全部流量,不管dns。
条条小路绕城门,照抄别人的路没有意义,自己弄懂逻辑设计出适合自己的一套方案才是最合适的
本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。
本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。
巧了我也是。但是我有两组ss和三组smardns在不同的虚拟机上,ros负责路由决策和故障识别。ss就无脑代理所有流量(透明代理)。smartdns分两个上游服务器组分别是国内和国外。目前是用domain-list,在gfwlist内域名列表走国外组。其他的都由dnspod和阿里(国内)处理。
本来我是楼主那种方式用了半年,但是这两天看到这个帖子突然就又迷茫了。我是routeros+op(旁路模式)的。大佬能说下具体设置吗。
巧了我也是。但是我有两组ss和三组smardns在不同的虚拟机上,ros负责路由决策和故障识别。ss就无脑代理所有流量(透明代理)。smartdns分两个上游服务器组分别是国内和国外。目前是用domain-list,在gfwlist内域名列表走国外组。其他的都由dnspod和阿里(国内)处理。
所以smartdns还是开第二个dns服务器吗?那ssrp的外国dns选择列表内的还是走5335?我之前走5335,也就是smartdns里的第二组DNS。(又迷茫了)谢谢~
所以smartdns还是开第二个dns服务器吗
没有,只是分国内组和国外组对应不同上游。几个不同的smartdns服务是自动同步配置文件的。
那ssrp的外国dns选择列表内的还是走5335
ssrp不关心域名,它无脑代理一切。正常上网流量ros就正常出去了,不会到ssrp那边。
都用ros做主路由器了,所有流量到op那边转一圈不是降低效率嘛。应该由ros决定路由表。
所以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分两个上游服务器组分别是国内和国外”好像不用绑定端口?这部分就有点疑问,是可以删了这个绑定端口配置?
是可以删了这个绑定端口配置?
可以删的,只有一个bind:6053即可。绑不同端口是为了应用不同的全局配置(旧版很多策略不能作用于单个域名)现在既然已经指定了域名组,用domain-rules指定即可。比如gfw的不支持ipv6和icmp就可以 domain-rules /domain-set:gfw/ -speed-check-mode none -nameserver gfwlist -address #6
是可以删了这个绑定端口配置?
可以删的,只有一个
bind:6053即可。绑不同端口是为了应用不同的全局配置(旧版很多策略不能作用于单个域名)现在既然已经指定了域名组,用domain-rules指定即可。比如gfw的不支持ipv6和icmp就可以domain-rules /domain-set:gfw/ -speed-check-mode none -nameserver gfwlist -address #6
好的,万分感谢回复,我得好好消化下=_=。也叨扰了其他各位,抱歉。
我是AX9000刷带QSDK驱动的OpenWRT 装SmartDNS;
- 国内按公司关系做域名分组,比如腾讯系,阿里系
- 不确认关系的用阿里和114
- 根据MAC地址对不同的设备分配不同的网关(主路由/旁路由)
Mac Mini上跑Surge作为旁路由,关闭DHCP
- 配置文件放在iCloud和手机端及其他Mac同步
- 用脚本定时把Surge配置文件的国外规则转为SmartDNS的domain-rules 自动同步到OpenWRT上作为国外分组分流使用
- 国内按公司关系做域名分组,比如腾讯系,阿里系
想当年运营商污染没这么严重时我也是这么用的,还有一个百度系。直到有一天我发现腾讯会把自家网站解到上海电信(我联通
- 用脚本定时把Surge配置文件的国外规则转为SmartDNS的domain-rules 自动同步到OpenWRT上作为国外分组分流使用
用的同一个规则,现在支持domain-list了,可以不用那么复杂了(目前openwrt定时任务每天UTC23点
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 跪谢了!
bind:6053 -group china bind:5335 -group gfwlist -no-speed-check
这就是两个啊 第一个端口6053 第二个端口5335
ssrp外国DNS解析用了列表里的8.8.4.4
可能不是从smartdns出去的,它自己有一套dns转发规则
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直接未运行- -就想通过你更改一下我的配置然后抄个作业_(:з」∠)_。谢谢
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
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
感谢!!!!
做dnsmasq上游就行了 关键是国外用tcp协议dns服务器
分流参考https://pymumu.github.io/smartdns/config/forwarding-with-ipset/ 如果是luci,可以参考:https://github.com/pymumu/smartdns/releases/tag/feature-dns-forwarding