主页 > 路由器 > SSR GFW模式元老级bug定位

SSR GFW模式元老级bug定位

2017年11月30日 SSR GFW模式元老级bug定位有5条评论 阅读: 10,349 次

GFW一般采用ipset来实现,将GFW中的域名列表所对应的IP地址设置成一个集合,然后将这个集合发给代理。

这个过程详细流程如下:
1、计算机访问gfw列表网站
2、路由器的dnsmasq收到请求后进行域名解析
3、在路由器上通过dnsmasq的配置规则将域名解析发给pdnsd进行域名解析,避免域名污染
server=/.google.com/127.0.0.1#5353
ipset=/.google.com/ssr
4、解析后的IP自动加入名为ssr的ipset集合
5、ssr设置防火墙规则,将ssr集合转给代理处理
REDIRECT tcp -- anywhere anywhere match-set ssr dst redir ports 1234

目前的问题:
一、ssr和广告屏蔽列表模式冲突
广告屏蔽列表模式也使用了ipset,列表中有些网站和gfw网站重复
ipset=/www.google.com/adblock
这样当用户访问www.google.com时,解析后的IP加入了adblock,并没有加入ssr,导致出现失败
dnsmasq开启--log-queries参数后的显示:
Thu Nov 30 15:32:20 2017 daemon.warn dnsmasq-dhcp[17710]: DHCP packet received on eth1 which has no address
Thu Nov 30 15:32:31 2017 daemon.info dnsmasq[17710]: query[A] www.google.com from 192.168.1.155
Thu Nov 30 15:32:31 2017 daemon.info dnsmasq[17710]: forwarded www.google.com to 127.0.0.1
Thu Nov 30 15:32:31 2017 daemon.info dnsmasq[17710]: ipset add adblock 216.58.200.36 www.google.com
Thu Nov 30 15:32:31 2017 daemon.info dnsmasq[17710]: reply www.google.com is 216.58.200.36
被adblock截胡了。
解决方法:将adblock.conf与gfw列表重复的网站删除

二、dnsmasq缓存问题
用户发起的dns请求,dnsmasq会进行缓存,如果ssr不是从开机启动,那么有可能出现,用户访问google,dnsmasq直接返回缓存中的IP地址,而不会再一次进行域名解析,自然也不会加入ipset
Thu Nov 30 16:18:44 2017 daemon.info dnsmasq[8337]: query[A] www.google.com from 192.168.1.155
Thu Nov 30 16:18:44 2017 daemon.info dnsmasq[8337]: cached www.google.com is 216.58.200.36
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: query[A] www.youtube.com from 192.168.1.155
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached www.youtube.com is
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui.l.google.com is
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.101
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.139
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.113
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.100
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.138
Thu Nov 30 16:19:40 2017 daemon.info dnsmasq[8337]: cached youtube-ui-china.l.google.com is 74.125.203.102
这时只要把dnsmasq重新复位,就可以再次进行域名解析并加入ipset:
Thu Nov 30 16:35:58 2017 daemon.info dnsmasq[17436]: query[A] www.google.com from 192.168.1.155
Thu Nov 30 16:35:58 2017 daemon.info dnsmasq[17436]: forwarded www.google.com to 127.0.0.1
Thu Nov 30 16:35:58 2017 daemon.info dnsmasq[17436]: ipset add ssr 216.58.200.36 www.google.com
Thu Nov 30 16:35:58 2017 daemon.info dnsmasq[17436]: reply www.google.com is 216.58.200.36
解决方法:
每次启动ssr时重启dnsmasq

但是,如果你的计算机是在二级路由或多级路由器以下,而ssr在出口路由器,如果你复位了出口路由器,下级的dns缓存并不会更新,计算机发出的dns请求也不会转发给出口路由器,GFW模式自然也会失效,这种情况下,只能复位二级或多级路由器或重启路由器上的dnsmasq才能使GFW模式重新生效。

三、用户计算机dns缓存问题
用户计算机中也有dns缓存,比如你访问过google,进行过域名解析,计算机会将域名和IP的对应关系保存,下一次再访问时,就不需要再进行域名解析。
如果计算机缓存后再启动ssr,此时访问google,由于没有域名解析过程,google对应的ip地址并没有加入ipset,也不会转发给代理处理,自然也无法访问,这种情况下只有重启计算机或者在计算机上命令行执行:
ipconfig/flushdns

这种情况下如果找到一种路由器通知计算机自动清理dns缓存的操作,那就可以做到用户无感知

目前暂时未找到好的方法解决,因此如果你重启了路由器或者重启了ssr或广告屏蔽服务,出现无法使用时,请复位计算机或手机,或者清除dns缓存!

评论:5

  1. 乌托邦 回复
    2018年5月3日 于 下午3:16

    大神,感谢您制作发布的 K3 固件,在使用中我遇到了和此帖中
    http://www.right.com.cn/forum/thread-310039-1-1.html
    楼主一样的问题,请问这是 bug 吗?有解决方法吗?
    感谢

    • ywb 回复
      2018年5月3日 于 下午5:02

      K3的酸酸乳本地DNS是污染的,采用远程解析,可能会导致一些APP不可用,K2P MTK和K3C官改的pdnsd解析可解决dns污染问题

      • 乌托邦 回复
        2018年5月5日 于 上午11:33

        您好,谢谢回复,请问 K3 上要怎么设置呢?谢谢

  2. 当地人 回复
    2018年6月26日 于 下午5:39

    我用K3刷好固件,然后在SSR项目里添加一个节点,启动后是能翻墙。但是国内网站也走代理了,很慢,所以想求一个 不走代理的源IP列表,不知能否提供。

    • ywb 回复
      2018年6月26日 于 下午7:35

      用新版

发表评论

电子邮件地址不会被公开。 必填项已用*标注