New Way to Go Across the GFW

家里路由器用了一段时间的国内定制的梅林系统,还给这个系统做过一个插件使用 v2ray。后面试过换个软路由,使用的 openwrt,然后找到一个新的项目 ss-tproxy ,用起来也还可以,不过是基于 shell 脚本的,以及基于自己的理解,感觉他添加的 iptables 规则有点多,我自己也还想要做到观看 Netflix 使用不同的代理(因为自己的代理 ip 被 Netflix 识别了,没法看,只好找一家机场买了一个服务看,当然又不想所有流量都走机场),所以自己折腾了一个,实现原理就是前面那篇文章。

一开始是基于 v2ray 做的,尽量傻瓜化,只需要提供可用的 outbound 就可以,会自己产生用到的配置文件。实际运行起来发现内存用量有点大,用到 swap 之后路由器变慢,挺讨厌的。然后就琢磨使用 ss 加混淆吧,用了一下速度还不错,但是很快就发现会被断流。没办法,只能还是用回 v2ray,本来想试试看给路由器接一个树莓派吧,里面跑 v2ray,这样也不会影响路由器,但是自己的树莓派不知道哪里去了。。。这也是我那个程序三个运行模式的来源。

后面十一期间那个机场居然公开公布用户的信息,让我觉得机场还是不靠谱,想试试看之前看到的通过 SNI 方式解决看 Netflix 的方案,找了一家试了一下,也还可以。这样我就不用再需要在路由器上面分流了,只需要在 vps 上面配置一下 dnsmasq 就可以了。这样更方便。

这样路由器只需要能解决 gfwlist 里面的域名可以正常访问就可以了。然后看到很多地方提到 v2ray 的 sniffing 功能。之前其实也看到过,忽略掉了。这个功能实际上可以做到解决 dns 污染问题,而不用你还得想办法去劫持系统的 dns。这个可以做到,把用户请求里面的域名交给代理去解析,忽略已有的解析结果,这样不管污染没污染都不会有什么影响了,因为完全不会用国内的解析结果。

然后再配合一个 gfwlist 的域名列表,设置合适的路由,就都 ok 了。

我这有一个示例的 v2ray 配置文件,只需要配置好里面的 outbound 就好了,注意要保留那个 tag 名字,或者你也可以自己修改,和下面的 routing 里面的 tag 对应就可以。那个 ip 列表是解决 telegram 的使用的。还需要配合一个 gfwlist sites 列表,可以直接下载这个

v2ray 在路由器跑有时候内存问题什么的,看着不太稳定,所以我还搭了一个检查程序,如果发现奔溃了自动重启一下。里面需要改一下 v2ray 的路径 /opt/svgfw/bin/v2ray -config /opt/gfw/config.json 和自己内网的 ip 范围 10.10.8.1/24 ,其他应该不用动了。启动之后可以看看 curl google.com 的结果。

可以在 cron 增加一个定期检查的任务 * * * * * /opt/gfw/run.sh check >> /tmp/gfw.log #gfw_check# ,路径自己改一下。然后可以 kill v2ray 看看会不会自动重启。以及可以看看 /tmp/gfw.log 里面重启的情况。

感觉这算是最简单的方案了吧,也不需要搞什么 dnsmasq 和 ipset 这些东西。