如何让FreeRouter V2支持ShadowSocks

2015/04/21
其实这个问题从FreeRouter V2发布一开始就有人在问了,但是我觉得这个问题是在太简单了,如果你都能搞定VPN模式的部署,ShadowSocks模式只应该更容易才对。前段时间发现浙江联通好像封了PPTP协议(真操蛋,竟然在整个协议层封掉),迫于无奈我也买了个ShadowSocks账号来放在路由上用,这里只简单的讲一些有用的和需要注意的问题。
1.Shadow Socks For Openwrt下载地址在这里:https://github.com/shadowsocks/openwrt-shadowsocks
2.对应的Luci App在这里:https://github.com/aa65535/openwrt-dist-luci
3.安装后可以直接在luci-app上设置账号,按服务商给你的填写就没什么问题。另外,有些服务商会提供config.json文件,不过格式不一定对,因为可能是给windows客户端准备的,所以要修改一下。
4.如果要做打包固件,可以在这里找到这些插件的repository:http://openwrt-dist.sourceforge.net/,然后添加到openwrt image builder的repositories.conf文件里就行了。
5.考虑到一些鸡生蛋和蛋生鸡的麻烦,你也可以下载好*.ipk文件后,直接放在OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64/packages/base这样的路径下面,就不用添加repository了,也不用在build的时候从repository抓取这些文件。
以上其实都是辅助性的废话,重点来了。ShadowSocks for openwrt默认启动了1080端口上的透明代理,你可以把这个当Socks代理用,所以在FreeRouter V2的基础上你要做的事情有:
1.删除PPTP的支持文件,或者简单点,删除PPTP接口,因为PPTP ip-up.d下有些脚本会捣乱。
2.修改/etc/firewall.user文件,原来的代码是:
iptables -t mangle -I PREROUTING -m set --match-set vpn dst -j MARK --set-mark 1
注释掉后加上,或者修改为:
iptables -t nat -A PREROUTING -p tcp -m set --match-set vpn dst -j REDIRECT --to-port 1080
 下面这个问题很重要!
shadowsocks for openwrt默认还启动了一个ss-rules命令,这个命令的作用就是设置代理规则,默认使用chnroute作为忽略列表。就是说除了chnroute中的国内IP,shadowsocks会默认的把所有IP都走代理,这样倒是覆盖面广,但缺点也很明显:
1.浪费流量,而且有些网站走代理速度还不如直连。
2.国内IP列表其实还是要更新,虽然更新得比较少。
3.你会发现你的国外VPN全都连不上了,哇哈哈哈,通过ShadowSocks透明代理再连VPN确实是个很奇怪的逻辑。
处理的方法有两种:
1.干掉ss-rules。vi打开/etc/init.d/shadowsocks文件,大概在103行的位置,找到“start_rules”,加个井号注释掉,重启shadowsocks就行了。这样shadowsocks不管你怎么设置,都不会做任何代理设置(其实就是添加了防火墙规则)。
2.如果觉得上面的方式太粗暴了,因为如果忽然你哪天想开一下全局SS,你会发现改了也没用,因为规则都被废了,可以文雅一点的去修改忽略IP列表。新建一个/etc/shadowsocks/all.list文件,写入以下内容:
0.0.0.0/1
128.0.0.0/1
然后把SS的忽略列表设置成这个文件就行了。
其实写0.0.0.0/0效果是一样的,但是执行的时候会提示说这个IP地址不符合CIDR规范(但不影响执行),哥是一个见不得warning的人,所以才分两段写了。

Related Posts