翻墙故障都是ipv6的锅

最近发现twitter中的图片和视频载入非常慢,经过排查发现twitter的图片和视频服务器是通过ipv6的地址连接的。而我路由上开启了ipv6,但是ss服务器却不能代理ipv6的流量。

看样子,网络长城已经可以阻断ipv6的流量,所以只能在路由上关闭ipv6。让所有连接都通过ipv4进行连接。

如果你想代理ipv6的流量,需要您的ss服务器也支持ipv6。

在openwrt上使用gfwlist模式

以往使用的路由翻墙模式是chnroute模式,简单来讲就是ip不在中国的全部使用代理,优点就在于方便,缺点也很明显,有些站点虽然在境外但是并没有被墙,这种情况是不应该再用代理的。

这一次改用gfwlist模式,也就是通常所说的黑名单模式。路由本身已经装好chinadns,ss,和dns-forwarder三件套,这个模式下我们可以停用chinadns了。

首先:安装dnsmasq-full,卸载dnsmasq。不要弄错顺序,不然处理起来很麻烦。(这一步是因为dnsmasq-full支持ipset)

第二步:wan口设置页面,设置dns服务器为127.0.0.1或者留空。(路由器本身提供dns服务)

第三步: DHCP/DNS设置页面:DNS转发填写能够正常访问的公共DNS。忽略解析文件不能勾选,并填写解析文件:/tmp/resolv.conf.auto (使用dnsmasq-full提供dns服务)

第四步 : 防火墙设置页面:自定义规则 (后方的端口为ss的本地端口)

ipset -N gfwlist iphash
iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 8668
iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 8668 

第五步:SSH登录路由器,在etc目录下建立dnsmasq.d文件夹,并上传gfwlist文件。格式如下所示,您可以自行添加。

server=/twimg.com/127.0.0.1#5353
ipset=/twimg.com/gfwlist

第七步:打开etc目录下的dnsmasq.conf文件,添加如下内容,指向您添加的文件夹

conf-dir=/etc/dnsmasq.d

第八步:ss访问控制设置页面:被忽略ip列表我们选择为留空,此时ss会全局代理。接下来我们要给额外忽略ip中添加两个地址 0.0.0.0/1 和 128.0.0.0/1,这样做之后,ss才会只对gfwlist中的域名代理。

第九步:我们在第五步的代码中可以看到对于gfwlist中的域名我们通过5353端口进行解析。这里我们要用到dns-forwarder,打开大的设置界面,把监听端口改为5353即可。

第十步:以上工作全部完成后,我们重启路由,通过这个网址测试是否成功。