这种情况需要用到的人并不是很多…先来谈谈这样做的优势:

1. 透明代理,即可不指定代理而自动使用SOCKS代理转发。换句话说,把代理配置在了应用层以下2. 共享代理,即把只能本地访问的SOCKS代理(SSH隧道)转换成可共享的。也就是不透露SSH账号且只建立一次隧道,即可供多人使用。3. 转发规则自定义,即可将分组分类(比如按目的地址分类)并配置转发。4. 全局代理,如果你想在windows上全局代理socket5,那么有非常好用的软件,proxifier..但如果是mac?ios?android?linux?都没有那么好的方案,所以只有在路由器上进行流量的路由。

对于某些hacker而言,可以用来突破校内网各种认证上网,哈哈,但首先你得有台有外网权限的内网服务器…
怎么搭建shadowsocks代理就不说了..官方有提供很多版本.比如golang,python,node.js.我选择了用python,而且是老版本的,因为新版本的 会注册python的很多组件,很不遍历.老版本的提供了server.py,,直接运行即可.也可以改成server.pyc,隐藏后台运行..


升级你的openwrt内核

我在研究的时候,并没有这么做,而是用卖家已经给刷好的内核..3.3.x进行安装..发现无法安装官方现在提供的 kmod 系列包.. 也无法使用iptables的to-prot 功能…进行内核升级:
http://downloads.openwrt.org/snapshots/trunk/ar71xx/
↑这里包含有ar71xx构建的所有bin包..我的WR703N是用的ar71xx构架的,
http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
我找到了这个包,下载到本地,通过Winscp传到路由器上..

1
sysupgrade /tmp/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin

需要这样..就能完成内核升级,中途会让你选择一些配置文件进行备份..刷机完成后,输出命令:

1
uname -a

进行查看内核,截至发文时,官方更新的内核:

1
2
root@OpenWrt_SLboat_Mod:~# uname -a
Linux OpenWrt_SLboat_Mod 3.10.17 #1 Thu Oct 24 22:50:38 PDT 2013 mips GNU/Linux


安装shadowsocks客服端在你的路由器上

官方有提供shadowsocks的ipk包.但由于被墙..校内网翻墙比较麻烦.我在另外一个网站上发现了他:
http://travis-ci.s3-website-ap-northeast-1.amazonaws.com/nightly/shadowsocks-libev_1.2-c06c1495fbe6b6f28c7903a5af1c8554896b6c39_ar71xx.ipk
我选择了1.2版本的..进行安装,传到路由器上:

1
opkg install shadowsocks-libev_1.2-c06c1495fbe6b6f28c7903a5af1c8554896b6c39_ar71xx.ipk

报错…缺少依赖包,据官方说..opkg是会自动去他们官方源找依赖包自动下载安装的.但我的opkg并没有这么做,而是直接报找不到安装包,也许是我路由器目前没搭建好各种环境..还不能联网的原因(drcom认证),没办法手动装吧..官方所有ar71xx的包在这里:
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/
他提示缺什么,就装什么上去吧.安装办法同上..opkg install ipk位置

1
2
>Installing shadowsocks to root…
Configuring shadowsocks.

在解决各种依赖包问题后,出现这个,那么恭喜你,你安装成功了


配置shadowsocks

接下来进行配置,编辑文件/etc/config/shadowsocks.json,和你的服务器上搭建配置对应..
运行shadowsocks:

1
/etc/init.d/shadowsocks start

运行成功后,我们查看有没有监听你指定的端口,以及用全局代理软件测试下吧:

1
netstat -tupln | grep 1080

我们看到1080已经处于监听状态了..恭喜你.你成功完成了这步


安装redsock

有了shadowscoks,可以连接上ss服务器了.那接下来就开始考虑如果进行流量的路由吧..在网上找了很多方案..找到一个叫redsock的软件,安装他来试试,安装包在这里:
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/redsocks_0.4-a9cfd090119385a1ef973baf94342a2db20595b9_ar71xx.ipk
安装过程:

1
opkg install redsocks_0.4-a9cfd090119385a1ef973baf94342a2db20595b9_ar71xx.ipk

中间也需要解决很多依赖包,继续去上面的网站上找


配置redsock

只需要编辑/etc/redsocks.conf文件:

1
2
3
local_ip = 0.0.0.0;
ip = 127.0.0.1;
port = 1080; //shadowsocks local port


最后我们实现iptables进行转发到redsock上

补充:
舒服大意.按照上面说的iptables 配置后,有几个问题.–dport 80 -j RETURN 的确是让 内网ip80端口不经常ss代理了,但问题是..连接到外网的一些80端口,也不经过了..到头来..就无法实现功能了,so..把iptables改成这样:

1
2
iptables -t nat -A PREROUTING -i br-lan -p tcp -d 192.168.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -i br-lan -p tcp -j REDIRECT –to-port 12345

改成这样后,不再用端口来划分是否该走SS代理.而是用ip段来划分了… iptables 中d代表目的地址,如果请求的目的地址是 192.168.x.x .. 则返回… 我认为iptables的规则应该是 先配置的先执行…我测试 如果这两个语句相反..则完全无法发挥第二条的作用. 不知是否我的问题.. iptables 会先经过第一条 判断是否是那ip段.如果是 则 返回.如果是 再检测下面一跳..进行 redirect的动作 转发到 12345端口上(也就是redsock的端口)