Blog icon indicating copy to clipboard operation
Blog copied to clipboard

梅林V7.2 KoolShare之SS V3.1.2 DNS解析方式分析

Open alwaystest opened this issue 8 years ago • 2 comments

梅林V7.2 KoolShare之SS V3.1.2 DNS解析方式分析

标签(空格分隔): ShadowSocks Merlin KoolShare


6300V2上的Merlin系统好久没折腾过了,折腾路由器的时候发现SS上使用的某些技术已经看不懂了,浅探一番之后在这里记录一下。

ShadowSocks

这个版本的SS已经集成了KcpTun,所以直接装SS即可,没有必要再装KcpTun。简单来说呢KcpTun和TCPSpeed,FinalSpeed,锐速是类似的,都是用来加快网络传输速度的,可以改善差网络条件下的代理速度。服务端可以使用Docker快速搭建。客户端有编译好的二进制文件可以直接使用。由于KcpTun有Go语言版本,效率高,占用内存少,很适合在路由器这种配置不是很强劲的平台上运行。

Chromecast

Chromecast功能的实现就是在路由器的iptables规则列表里面添加一条把目标端口是53的udp请求重定向到路由器的DNS解析代理。对于防止DNS投毒攻击来说是很有效的,但是如果网络条件不稳定,DNS代理请求不能及时返回的话,轻则导致网络访问速度下降,重则导致网络不可用。

路由器的DNS代理方式

我目前采用的方式是pdnsd。由下到上是这样的:

  • 最底层使用KcpTun做加速处理。

  • ss-local 在路由器搭建一个本地socks代理,通过KcpTun转发请求到远端服务器。

  • dns2socks 把DNS请求交给ss-local转发。

  • pdnsd 做dns缓存,将dns请求转发给dns2socks处理。缓存比dnsmasq稳定,因为之前使用dnsmasq的时候感觉dns缓存时间很短,有的时候干脆就和没有缓存一样。pdnsd缓存时间可以自己设置,更加灵活。

  • pdnsd可以使用tcp方式向上游dns服务器请求解析,这样就不需要依赖dns2socks了。也是一种防止dns投毒攻击的方式。

  • 打开pdnsd的时候log中提示pdnsd的进程可能不稳定,这个自己抉择。

  • dnsmasq 监听路由器53端口,处理发给路由器的DNS请求。

  • gfwList模式下将不在名单内的请求交给国内dns处理,名单上的域名向pdnsd请求,同时把返回的ip添加给ipset,iptables中有规则把ipset列表中的服务器通信交给ss-redir转发。

  • 国内白名单模式把名单上的域名交给指定的国内dns处理,其他域名向pdnsd请求,同时加入ipset。见下方第二点

  1. Telegram,SnapChat这些gfwList模式无法处理的,只能使用国内白名单模式。
  2. 3.1.8更新中,由于cdn名单越来越巨大,在大陆白名单模式下给dnsmasq造成了很大的负担,开国内网站都会造成dnsmasq很高的cpu占用率 因此此版本更改了域名解析策略,去掉了cdn名单,能大幅度降低cpu占用! 原策略:默认cdn名单内的国内域名用国内dns解析,剩下的域名用国外dns解析。 现策略:默认gfwlist名单内的国外域名用国外dns解析,剩下的域名用国内dns解析。

到VPS的连接不稳定,所以需要使用pdnsd来对dns做缓存,否则可能导致上网缓慢。

游戏模式目前我没有需求,没有研究过,应该是对UDP包做了特殊处理吧。

ss-tunnel的作用相当于dns2socks+ss-local吧。

alwaystest avatar Jan 13 '17 11:01 alwaystest

chromecast的问题有什么好的解决办法吗?

fishjar avatar Jan 01 '20 06:01 fishjar

chromecast的问题有什么好的解决办法吗?

DNS 解析分流吧。 正常的网站走国内 DNS,被 Ban 的网站走代理 DNS。 如果出国网络质量比较差的话,即使解析了 DNS,后续的访问质量也可能不好。 这样可以避免对国内网站访问的影响。

也可以自建 dnsmasq,增加一层 dns 缓存,可以稍微缓解一点点。不过最终的问题还是出国流量质量不好,解决这个才是解决问题的根本。

alwaystest avatar Jan 02 '20 03:01 alwaystest