Total Pageviews

Monday, 16 February 2015

实现Openwrt路由器翻墙智能分流及抗DNS污染

首先ssh连接上openwrt执行以下命令
wget http://openwrt-dist.sourceforge.net/auto_install.sh
chmod +x auto_install.sh
./auto_install.sh
opkg update
然后我们安装上shadowsocks和chinadns以及配套的luci配置工具
opkg install shadowsocks-libev-spec ChinaDNS luci-app-shadowsocks-spec luci-app-chinadns
然后我们进入Luci界面开始配置
首先设置好shadowsocks的服务器密码以及加密方式我们在这里不再赘述
然后记得启用UDP转发,看图按照以下内容填写
点击查看大图
点击保存重启路由器即可生效
升级方式
opkg upgrade shadowsocks-libev-spec ChinaDNS luci-app-shadowsocks-spec luci-app-chinadns
文件 chinadns_chnroute.txt 与 ignore.list 相同, 可使用符号链接节省空间
rm -f /etc/chinadns_chnroute.txt
ln -s /etc/shadowsocks/ignore.list /etc/chinadns_chnroute.txt
更新IP 忽略列表:
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /etc/shadowsocks/ignore.list
参考资料:
http://openwrt-dist.sourceforge.net/
http://sourceforge.net/p/openwrt-dist/wiki/Plan5/

from http://lentin.me/2015/01/openwrt-setup-shadowsocks-chinadns-fuck-gfw/

相关帖子:FreeRouter_V2的手册下载
-----------------------------------------------------
 Openwrt + shadowsocks + chinadns路由器智能翻墙

简单记录一下搭建过程,也当做教程.
所需软件下载:http://goo.gl/2UJk8r  (根据路由器芯片版本选择)

有两种安装和使用方式,都很简单
一,命令行方式

1、路由器刷openwrt

2、下载shadowsocks-spec 、shadowvpn 、chinadns,上传到/tmp

3、安装软件:
cd /tmp
opkg install shadosocks.ipk
opkg install shadowvpn.ipk
opkg install chinadns.ipk

如opkg安装失败,可手动安装,比如shadowsocks.ipk:
mv shadowsocks.ipk shadowsocks.zip <a class="ot-hashtag aaTEdf" href="https://plus.google.com/s/%23%E6%94%B9%E5%90%8E%E7%BC%80%E4%B8%BAzip" target="_blank" rel="nofollow">#改后缀为zip</a>
unzip shadowsocks-spec.zip # 解压
cd shadowsocks-spec
tar xvf data.tar -C /  # 安装

安装完成,其他软件同理,安装文件路径会有提示,要卸载的话删除就行了。

3、配置shadowsocks,配置文件在/etc/config/shadowsocks/config.json

4、配置 dnsmasq 上游服务器,使用以下命令:
uci set dhcp.@dnsmasq[-1].noresolv='1'
uci set dhcp.@dnsmasq[-1].local='127.0.0.1#5353'
uci delete dhcp.@dnsmasq[-1].server
uci commit dhcp

5、启动软件:
/etc/init.d/shadowvpn start # 启动 ShadowVPN
/etc/init.d/chinadns start  # 启动 ChinaDNS
/etc/init.d/dnsmasq restart # 重启 dnsmasq

二、LuCI图形界面方式 (我装LuCI失败)

和上边三个软件相应的LuCI-app下载并安装,安装方式同上边的opkg命令,下载地址:http://goo.gl/t3iZDv

定位至「服务 – ShadowVPN」
在「基本设置」中配置 ShadowVPN 并启动
定位至「服务 – ChinaDNS」
启动 ChinaDNS
定位至「网络 – DHCP/DNS」
「基本设置」 本地服务器 填写 127.0.0.1#5353
「HOSTS和解析文件」勾选 忽略解析文件.
------------------------

在OpenWrt上安装Shadowsocks以及ChinaDNS实现自动翻墙



在OpenWrt上安装Shadowsocks以及ChinaDNS实现自动翻墙上网,这个方案所谓的“自动”就是并不是访问被墙的网址触发Shadowsocks服务,而是所有的境外IP都会通过Shadowsocks服务访问,国内的IP则直接连接;这个方案的好处是不用维护被墙的域名列表。

安装OpenWrt

在OpenWrt官网【https://downloads.openwrt.org】的固件下载页面,找到你的路由器所对应的型号下载固件,
为方便查在浏览器页面使用“Ctrl+F”输入你的路由器型号例如下图:
路由器型号
将两个固件下载,比较两个固件,
你会发现一个名称为openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin
一个为openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-sysupgrade.bin
只是factory.binsysupgrade.bin不一样,
那么刷那一个呢?
如果现在路由器固件是路由厂商的原厂固件,必须刷factory.bin名称后缀的固件;
如果现在路由器的固件已经是OpenWrt的固件,那么就刷sysupgrade.bin名称后缀的固件。
刷固件的方法,说过好多次了,不在此赘述,如不是懂,请翻越我的以前的文章。

安装Shadowsocks和ChinaDNS

  1. 下载ipk插件
    如果是OpenWrt官方的固件,那么一共需要5个插件.根据你的路由器型号,下载相对应的插件版本
    分别是:
    1.shadowsocks-spec
    2.chinadns-openwrt
    3.luci-app-shadowsocks
    4.luci-app-chinadns
    5.libpolarssl(依赖包)
  2. 安装插件
    使用WinSCP将上面的5个ipk文件上传到路由器的 /tmp 文件夹内,再使用putty登录;
    使用命令安装:
    cd /tmp
    opkg install xxxxxx.ipk
    “xxxxx.ipk”为五个下载的插件例如:opkg install libpolarssl_1.3.8-1_ar71xx.ipk
    五个插件都安装完成后,再执行启动命令:
    /etc/init.d/shadowsocks enable
    /etc/init.d/shadowsocks enable
    到这儿Shadowsocks和ChinaDNS就安装完成了。
  3. 说明:插件来自于aa65535童鞋的OpenWrt-dist
-------------------------------------------------------------------

Openwrt dnsmasq pdnsd shadowsocks路由器自动翻墙方案


 本文探讨的是如何在路由上实现自动翻墙的功能,即用户连接到此路由器以后会发现墙已经不存在了。听上去很美好,下面我们一步步来。

一、找个路由器、安装openwrt
开始之前,首先你得有个路由器,不是随便的一个路由器都能安装openwrt的,openwrt是一个开放的路由系统,openwrt兼容列表在这里:

http://wiki.openwrt.org/toh/start

我这里有购买了一个Netgear 的WNDR 4300. 按照openwrt网站上对应的方式进行安装。
安装完成后登录192.168.1.1,设置root密码,启用ssh。
二、安装Shadowsocks
shadowsocks是一个跨平台的翻墙利器,有openwrt版本的,项目地址在这里: https://github.com/shadowsocks/openwrt-shadowsocks
建议用ssh登录路由,直接wget对应的文件,opkg install 就行。
安装完成后,vim /etc/shadowsocks/config.json,按需配置。
然后/etc/init.d/shadowsocks enable 开机自启动;
/etc/init.d/shadowsocks start 启动。
shadowsocks能做什么?它可以根据你访问网页的IP地址来判断,如果该IP地址在/etc/shadowsocks/ignore.list里面,就直接访问,如不在,就按照config.json文件的配置,进行加密,然后通过指定的端口发送到shadowsocks的服务器,服务器拿到网页后原路返回。
三、安装pdnsd
以上既然已经实现了根据不同IP进行分别对待,为什么还需要pdnsd来做dns解析呢?因为shadowsocks是按照IP来辨别的,但是在中国,你输入google.com的时候,路由需要先解析他,openwrt自带了dnsmasq域名解析软件,该软件可以实现域名缓存,即根据原来的解析结果,保存了域名跟IP的对应关系,但是在国内google.com的域名是被污染的。为了解决此问题,我们的思路是: 首先有dnsmasq完成大多数的域名解析,当遇到特别的(被拦截的)域名时,将其交给pdnsd来解析,pdnsd有tcp解析的功能,可以防止dns污染,所以我们需要安装pdnsd。
安装也很简单,直接opkg install pdnsd 就可以,或者直接在网页界面,搜索安装就可以。
四、配置dnsmasq
vim /etc/dnsmasq.conf
为了保证该文件的整洁,我们在最后加入conf-dir=/etc/dnsmasq.d
然后mkdir /etc/dnsmasq.d
vim /etc/dnsmasq.d/config.conf
这里的文件名可以随意,只要这个文件夹下的所有文件,都会被dnsmasq识别成配置文件。
这里我列出我的配置文件,其实是参照了lifetyper的FreeRouter_V2里面的名单,在此表示感谢,同时大家也可以在https://github.com/lifetyper/FreeRouter_V2
找到该项目的更详细情况。
下面是我的config.conf文件内容,大家可以参考,每一行的意思是将该域名及其子域名用127.0.0.1#5353端口来解析。
5353端口是什么?当然是pdnsd了,你也可以定义另一个端口,但53端口(默认)除外,因为53端口被dnsmasq用了。

server=/.facebook.com/127.0.0.1#5353
server=/.youtube.com/127.0.0.1#5353
server=/.twitter.com/127.0.0.1#5353
server=/.blogspot.com/127.0.0.1#5353
server=/.blogger.com/127.0.0.1#5353
server=/.netflix.com/127.0.0.1#5353
server=/.t.co/127.0.0.1#5353
server=/.blogspot.in/127.0.0.1#5353
server=/.dailymotion.com/127.0.0.1#5353
server=/.youporn.com/127.0.0.1#5353
server=/.nytimes.com/127.0.0.1#5353
server=/.pixnet.net/127.0.0.1#5353
server=/.slideshare.net/127.0.0.1#5353
server=/.hootsuite.com/127.0.0.1#5353
server=/.soundcloud.com/127.0.0.1#5353
server=/.archive.org/127.0.0.1#5353
server=/.blogspot.com.br/127.0.0.1#5353
server=/.hardsextube.com/127.0.0.1#5353
server=/.mobile01.com/127.0.0.1#5353
server=/.bloomberg.com/127.0.0.1#5353
server=/.elpais.com/127.0.0.1#5353
server=/.blogspot.de/127.0.0.1#5353
server=/.adultfriendfinder.com/127.0.0.1#5353
server=/.xing.com/127.0.0.1#5353
server=/.eyny.com/127.0.0.1#5353
server=/.istockphoto.com/127.0.0.1#5353
server=/.swagbucks.com/127.0.0.1#5353
server=/.macys.com/127.0.0.1#5353
server=/.drtuber.com/127.0.0.1#5353
server=/.liveleak.com/127.0.0.1#5353
server=/.lemonde.fr/127.0.0.1#5353
server=/.turbobit.net/127.0.0.1#5353
server=/.blogspot.jp/127.0.0.1#5353
server=/.cam4.com/127.0.0.1#5353
server=/.spankwire.com/127.0.0.1#5353
server=/.nuvid.com/127.0.0.1#5353
server=/.sex.com/127.0.0.1#5353
server=/.subito.it/127.0.0.1#5353
server=/.bitshare.com/127.0.0.1#5353
server=/.yourlust.com/127.0.0.1#5353
server=/.pastebin.com/127.0.0.1#5353
server=/.pchome.com.tw/127.0.0.1#5353
server=/.redtube.com/127.0.0.1#5353
server=/.vimeo.com/127.0.0.1#5353
server=/.wordpress.com/127.0.0.1#5353
server=/.dropbox.com/127.0.0.1#5353
server=/.xvideos.com/127.0.0.1#5353
server=/.blogspot.com.es/127.0.0.1#5353
server=/.fc2.com/127.0.0.1#5353
server=/.tube8.com/127.0.0.1#5353
server=/.ck101.com/127.0.0.1#5353
server=/.hidemyass.com/127.0.0.1#5353
server=/.wsj.com/127.0.0.1#5353
server=/.xtube.com/127.0.0.1#5353
server=/.123rf.com/127.0.0.1#5353
server=/.xhamster.com/127.0.0.1#5353
server=/.change.org/127.0.0.1#5353
server=/.bet365.com/127.0.0.1#5353
server=/.theguardian.com/127.0.0.1#5353
server=/.pornhublive.com/127.0.0.1#5353
server=/.feedburner.com/127.0.0.1#5353
server=/.pornhub.com/127.0.0.1#5353

五、配置pdnsd
下面我们来配置pdnsd,vim /etc/pdnsd.conf
这里有几个关键点:
1: 在global参数里面,server_port = 5353 来定义服务端口。
query_method = tcp_only 来定义必须用tcp协议来与服务器通讯,不然就会被gfw抢先答复来污染。
2 :在server参数里,只要增加ip地址就可以,譬如ip=8.8.8.8 之类的,但是建议选择非中国的,反应时间最快的,这个需要自己测试,反正我测试8.8.8.8的反应时间基本都在200ms以上,但香港的dns服务器就挺好,如果你的代理服务器在日本,也可以尝试用日本的dns服务器地址,只要跳转速度应该是最好的。
怎么测试?还是直接使用dig命令吧,直接在路由上opkg install dig-bind,安装完成后就有dig命令了。
dig @8.8.8.8 google.com +tcp
以上命令就是到8.8.8.8服务器上用tcp协议去查google.com的地址。你也可以从网上搜索一些其他的非中国的dns来试试,找到个反应最快的。
六、结束
配置完成后,
/etc/init.d/dnsmasq restart
/etc/init.d/pdnsd restart
这样,你的路由就可以自由翻墙了,不需要ipset,不需要更复杂的配置,就这么简单。现在当你在浏览器是输入facebook.com时,浏览器将该地址的解析需求发送dns服务器192.168.1.1,该需求有dmsmasq处理,它发现该域名(facebook.com)在配置文件时是需要去问127.0.0.1#5353端口的,所以该需求被转到5353#端口,pdnsd接受该需求,用tcp协议去你指定的dns服务器上去查,查到以后返还给dnsmasq,dnsmasq将结果反馈给浏览器,并且在自己的cache上缓存起来。现在浏览器知道了facebook.com的IP地址,他去访问,结果shadowsocks截获检查,发现这个IP不在忽略清单里,所以将该数据加密,转发到国外的服务器上,国外的shadowsocks服务器拿到需求后去拿到网页,然后原路返回。

但当你输入baidu.com的时候,dnsmasq对比发现该域名需要自己搞定,所以就去将域名解析请求发给dnsmasq的上级dns,一般是ISP的DNS,解析结果直接返回给用户。用户访问该IP是,经shadowsocks检查,发现该IP在忽略名单里,就不去国外绕了,直接随它去。所以就实现了最大效率的翻墙。
---------------------------------------------------------------
此教程适用于能刷openwrt PANDORABOX版本的路由器,在路由器上用SHADOWSOCKS翻墙

安装前提条件:
你需要有一个shadowsocks的账号,
路由器需要root,
并且会使用winscp上传文件.
会使用putty或xshell登录路由,执行命令

第一步:
安装Shadowsocks

用winscp上传shadowsocks.tar.gz到路由的tmp目录下。

    用putty或xshell登录路由
    执行命令
    cd /tmp
    gunzip shadowsocks.tar.gz
    tar xvf shadowsocks.tar -C /
    rm shadowsocks.tar
    至此Shadowsocks安装完成,输入ss-local命令看是否有输出,如果看到帮助信息说明安装成功。

    配置Shadowsocks账号
    用winscp登录路由,编辑/etc/shadowsocks.json 文件,修改里面的IP等信息
    {
    “server”: “服务器IP”,
    “server_port”: “服务器端口”,
    “password”: “密码”,
    “local_port”: “本地端口”,
    “method”: “aes-256-cfb”,
    “timeout”: “600”
    }

测试Shadowsocks
输入下面的命令
ss-local -c /etc/shadowsocks.json
启动shadowsocks客户端

好了,你现在可以在你的电脑浏览器用socks5方式代理上网了,代理IP要设置成你路由器的IP。端口设为本地端口比如1080,与上面的设置保持一致就行。

设置路由器开机启动shadowsocks
命令/etc/init.d/shadowsocks enable

下面的教程,可学可不学。
是把socks5代理转成http代理方式,并且只代理PAC文件中设定的网址,其他网址则不走代理,
如果你觉得安装麻烦,可以不用看。
第一步:
上传安装包中的privoxy.ipk文件到/tmp目录中:
cd /tmp
执行安装命令
opkg install privoxy.ipk

编辑/etc/privoxy/config文件:
有一行permit-access开头的改成permit-access 192.168.199.0/24
有一行listen-address开头的改成listen-address 0.0.0.0:8118

最底部添加(注意,每行最后的 .也要复制进去):
forward-socks5 / 192.168.199.1:本地端口 .
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
forward localhost/ .
保存退出

注意事项:
192.168.199.0/24 要根据你路由的实际IP调整,
如果路由是192.168.1.1,那就设为192.168.1.0/24

192.168.199.1是极路由的默认IP,你要根据你路由的实际IP修改,
本地端口即shadowsocks.json文件中的本地端口 )

命令/etc/init.d/privoxy start启动,
命令/etc/init.d/privoxy enable设置开机启动privoxy

(这一步要说的是,我在openwrt中,privoxy启动一次不行,还得启动二次才行,我也不知为什么,如果你也遇到这种情况,那你修改某个开机启动的文件,把这个命令/etc/init.d/privoxy start再输入一次就行了。)
最后一步:配置自动代理

用记事本修改proxy-daili-list.pac文件,
修改ip为你的路由器IP, 端口是8118,可以不变。
把修改后的pac文件上传到/www目录下
编辑/etc/config/dhcp文件,
在config dnsmasq行下面添加行
list dhcp_option ‘252,http://192.168.199.1/proxy-daili-list.pac’

重启dnsmasq服务,命令
/etc/init.d/dnsmasq restart

现在你可以直接用http代理方式了。代理IP为路由IP,端口为8118
只对proxy-daili-list.pac文件中列出的网址进行代理,其他网址则直连不走代理,

如果某个被屏蔽的网址不在列表中,有两个方法
一:你继续用socks5代理,那个可以对所有网址代理,
二:你把网址加到proxy-daili-list.pac列表中,重启dnsmasq服务:
/etc/init.d/dnsmasq restart
--------------------------------------

如何让FreeRouter V2支持ShadowSocks

其实这个问题从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的人,所以才分两段写了。
來源:http://www.lifetyper.com/2015/04/shadowsocks-support-for-freerouter-v2.html
相关帖子:http://briteming.blogspot.com/2015/02/freerouterv2.html
---------------
打造一台翻墙路由器
凡是连上wifi的手机电脑,无需任何设置,都能自动翻墙。
路由器配置方案:ShadowSocks-libev + ChinaDNS + iptable
=========================
一:
首先路由器型号需要在openwrt列表中:http://wiki.openwrt.org/toh/start。(可以ctrl+F搜索匹配型号)
如果没有可以买一台,能刷openwrt系统的就行。
openwrt系统的下载地址在https://downloads.openwrt.org
淘宝上"华为HG255D"只要45块钱左右就能买到,
文中用的是"网件NETGEAR 3700v4",家庭级不到300块,
如果是小公司可以用神器"思科Linksys WRT1900AC",淘宝上1700左右,能带100个机器。
二:网件WNDR3700v4刷机
1.下载固件
https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/nand/openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img
访问192.168.1.1,在固件升级中上传openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img
等待一会儿,勿断电。
好了之后打开wifi开关,连上openwrt,访问192.168.1.1.
设置路由密码,选中Allow remote hosts to connect to local SSH forwarded ports
设置下wifi密码,刷机成功。
三:然后需要一台国外的服务器,可以参考以下几个选择:
locvps.com
(4分:500G流量/速度比较稳定/机器少,换机器不方便/38元/优惠码:vpser)
diahosting.com
(4分:200G流量/速度稳定,内存太少,适合连ssh/换机器不方便/70元)
linode.com
(4分:2000G流量/每月只有前10个G速度稳定/换机器方便/60元)
digitalocean.com
(3.5分:1000G流量/速度不太稳定/换机器方便/30元)
vultr.com
(3分:1000G流量/速度不太稳定/机房多,换机器方便/系统问题较多/30元)
文中所用服务器系统是CentOS。
四:服务器端安装shadowsocks
1.CentOS6安装shadowsocks
yum install m2crypto python-setuptools
easy_install pip
pip install shadowsocks
# 修改配置 vi /etc/shadowsocks.json
{
"server":"0.0.0.0",
"server_port":7236,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"你的密码",
"timeout":300,
"method":"rc4-md5",
"fast_open": false,
"workers": 1
}
#保存退出
2.centos后台运行shadowsocks:
# 若未安装supervisor,安装
yum install python-setuptools
easy_install supervisor
# 创建默认配置:
echo_supervisord_conf > /etc/supervisord.conf
vi /etc/supervisord.conf
# 在默认配置文件后添加:
[program:shadowsocks]
command=ssserver -c /etc/shadowsocks.json
autostart=true
autorestart=true
user=nobody
# 最后启动就行了:
supervisord
# 更新重启:
pip install --upgrade shadowsocks
supervisorctl restart shadowsocks
(参考 https://github.com/clowwindy/shadowsocks/wiki/%E7%94%A8-Supervisor-%E8%BF%90%E8%A1%8C-Shadowsocks)
五:路由器安装ShadowSocks-libev
具体方案:ShadowSocks-libev + ChinaDNS + iptable
1.下载安装包
shadowsocks: http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/
libpolarssl: http://sourceforge.net/projects/openwrt-dist/files/depends-libs/
chinaDNS: http://sourceforge.net/projects/chinadns/files/dist/
这里注意,一定要下载路由器cpu型号对应的文件!3700v4请选择ar71xx
型号列表:https://downloads.openwrt.org/snapshots/trunk/
比如linksys wrt1900ac的cpu类型就不在官方列表中(wrt1900ac请参考行动指南11).
# 自己在CentOS下编译安装包
# 安装依赖
yum update
sudo yum groupinstall "Development Tools"
# 添加一个user用户
adduser user
cd /home/user
# 下载openwrt源码并赋予文件夹权限
# 注意选择cpu类型对应源码 https://downloads.openwrt.org/snapshots/trunk/
git clone git://git.openwrt.org/openwrt.git
sudo chmod -R 777 openwrt
# At OpenWRT build root,下载shadowsocks-libev源码
cd openwrt
pushd package
git clone https://github.com/madeye/shadowsocks-libev.git
git clone https://github.com/clowwindy/ChinaDNS-C.git
popd
# 更新feeds
./scripts/feeds update -a
./scripts/feeds install -a
# 编译可能出现以下错误:
# Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
# Build dependency: Please install zlib. (Missing libz.so or zlib.h)
# 则安装:yum install ncurses-devel zlib-devel
# 另外需要权限则在/home下赋予文件夹权限 sudo chmod -R 777 user
su user
make defconfig
# 编译要用到的工具和库(时间略长,20核机器大概半小时)
su root
make prereq && make tools/install && make toolchain/install
# 按m选中Network/ChinaDNS
# 按m选中Network/shadowsocks-libev-polarssl
make menuconfig
# Build the package
make -j V=99 package/shadowsocks-libev/openwrt/compile
make -j V=99 package/ChinaDNS-C/openwrt/compile
# 文件位置在 openwrt/bin/...
2.安装到路由器
# 用sftp客户端上传libpolarssl、ChinaDNS-C、shadowsocks-libev-polarssl 3个ipk包到路由器/tmp 目录
# 若未开启sftp,先安装sftp,再上传
ssh root@192.168.1.1
opkg update
opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start
# 安装中文包,然后在网页界面系统设置中切换中文
opkg install luci-i18n-chinese
cd /tmp
opkg install shadowsocks-libev-polarssl_1.4.8_ar71xx.ipk

opkg install libpolarssl_1.3.8-1_ar71xx.ipk
opkg install ChinaDNS-C_1.0.0_ar71xx.ipk
# 通过vi /etc/shadowsocks.json打开后,编辑
{
"server":"服务器ip",
"server_port":7236,
"local_port":1080,
"password":"你的密码",
"timeout":300,
"method":"rc4-md5"
}
# 测试,在浏览器配置类似 SwichySharp 的插件或系统下设置 Socks5 代理测试 ShadowSocks 是否正常运行
# 浏览器代理地址192.168.1.1,端口1080
ss-local -c /etc/shadowsocks.json
3.翻墙成功了,但还需要手动设置代理,用ipset配合dnsmasq实现路由器下所有设备自动流量分流。
# 配置 iptable 前,先检查下自己的 OpenWRT 中是否已经安装iptables-mod-nat-extra,若没有,先安装。
opkg update
opkg install iptables-mod-nat-extra
# 安装后继续
cd /usr/bin
touch shadowsocks-firewall
# 通过vi shadowsocks-firewall命令配置文件
# 将下列内容复制进去:
#!/bin/sh
#create a new chain named SHADOWSOCKS
iptables -t nat -N SHADOWSOCKS
# Ignore your shadowsocks server's addresses
# It's very IMPORTANT, just be careful.
iptables -t nat -A SHADOWSOCKS -d 173.230.155.72 -j RETURN
# Ignore LANs IP address
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# Ignore Asia IP address
iptables -t nat -A SHADOWSOCKS -d 1.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 36.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 39.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 42.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 106.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 110.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 112.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 113.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 114.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 115.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 117.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 118.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 123.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 126.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 175.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 183.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 211.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 221.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 222.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 223.0.0.0/8 -j RETURN
# Anything else should be redirected to shadowsocks's local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
# 保存退出,chmod +x shadowsocks-firewall给其运行权限。
# 注意:服务器地址"173.230.155.72"换成自己的服务器地址,local_port:1080
# 修改启动配置vi /etc/init.d/shadowsocks
START=95
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
CONFIG=/etc/shadowsocks.json
start() {
service_start /usr/bin/ss-redir -c $CONFIG
service_start /usr/bin/ss-tunnel -c $CONFIG -l 8964 -L 8.8.8.8:53 -u
/usr/bin/shadowsocks-firewall
}
stop() {
service_stop /usr/bin/ss-redir
service_stop /usr/bin/ss-tunnel
/etc/init.d/firewall restart
}
# 保存退出
4.启动shadowsocks
/etc/init.d/chinadns start # 运行chinadns
/etc/init.d/chinadns enable # 开机启动
chmod +x /etc/init.d/shadowsocks # 添加执行权限
/etc/init.d/shadowsocks start # 运行shadowsocks
/etc/init.d/shadowsocks enable # 开机启动
重启路由器,大功告成!
/etc/init.d/shadowsocks stop # 关闭shadowsocks
/etc/init.d/shadowsocks disable # 取消开机启动
=========================
参考文章:
http://www.jianshu.com/p/4800eec60516
https://www.gitbook.io/book/softwaredownload/openwrt-fanqiang
http://blog.berry10086.com/Tech/Openwrt/openwrt-shadowsocks-ipset/
-------------------------------------------------------------------------------------------------------------------------
适用于OpenWrt的路由器

设置

首先对指定域名下的所有请求进行标记,以区分需要进行翻墙操作的请求,然后让所有被标记的请求使用VPN专用的路由表进行路由
需要用到ipsetdnsmasq ipiptables等工具

Step 1

建立需要翻墙的IP集合,名为vpn
$ ipset create vpn hash:ip
为了以后能在开机时自动建立,将该代码作为启动脚本加入/etc/rc.local文件中

Step 2

自动解析需要的翻墙的域名加入IP集合
/etc/dnsmasq.d/目录下建立vpn.conf文件,并在其中加入一下代码:
# 对此域名的解析使用Google的公共DNS服务器(防止DNS污染)
server=/google.com/8.8.8.8
# 将此域名对应的所有IP地址加入之前建立的 vpn ip集合中
ipset=/google.com/vpn
对于其它需要翻墙的域名都如法炮制,随意添加。
注意 一般网站都会使用多个顶级域名来提供服务,如果网站能打开但是页面图片什么的看不到就是还需要补充些域名

Step 3

标记vpn集合中的网络请求,方便后续的路由操作
# 符合VPN地址集合的请求都以`8`进行标记
iptables -t mangle -A fwmark -m set --match-set vpn dst -j MARK --set-mark 7
为了以后能在开机时自动生效,将该代码作为启动脚本加入/etc/rc.local文件中.
-----------------
相关帖子:http://briteming.blogspot.com/2016/01/openwrtshadowsocks.html

https://github.com/mba811/openwrt-Ss

https://blog.chionlab.moe/2016/01/23/openwrt-bypass-gfw-solution/

http://hbprotoss.github.io/posts/da-jian-zhi-neng-fan-qiang-lu-you-qi.html

https://leamtrop.com/2017/05/14/shadowsocks-proxy-on-lede/

https://heiybb.com/wndr4300-openwrt-shadowsocks-chinadns-fkgfw.hf#directory00561916399607527153