本方案本质上依然是根据IP判断是否代理,列表内的IP走代理,列表外的直连;而这个IP列表我们可以通过dnsmasq-full来自动生成;dnsmasq-full可以将解析域名得到的IP加到一个ipset中,利用这个ipset来判断走不走代理。实际是完成了gfwlist到dnsmasq的ipset规则再到IP地址的转换。同样,本方案依然可以搭配ChinaDNS搭配使用,也可以使用ss-tunnel,或者是自己的DNS服务器。
本方案的优点明确,只有被墙的站点才走代理,但是gfwlist并不能100%涵盖被墙站点,而且有些国外站点直连速度远不如走代理,特别是你代理服务器速度较快,希望通过代理加速国外访问时,此方案就不是那么好用了。请酌情选择你所使用的方案。
一、安装
首次安装的话,先安装必要的包,确保路由器联网,先更新软件包列表(下载有问题的请手动到
openwrt.org下载所有需要的包并上传到路由器上使用opkg install XXX.ipk命令安装):
shadowsocks有openssl(文件名是shadowsocks-libev-X.XX.ipk)和polarssl(文件名是shadowsocks-libev-polarssl-X.XX.ipk)两个版本选择,ROM空间吃紧的就选择后者吧。
下载链接如下,请根据自己CPU型号选取相应版本:
先安装必要的包,如果要用polarssl版本的shadowsocks(polarssl体积更小):
|  | 
opkg install iptables-mod-nat-extra ipset libpolarssl | 
 
 
如果要用普通版本(openssl)的shadowsocks,那么(openssl兼容性更好):
|  | 
opkg install iptables-mod-nat-extra ipset libopenssl | 
 
 
然后卸载dnsmasq并安装dnsmasq-full以及剩下的包
|  | 
opkg remove dnsmasq && opkg install dnsmasq-full 
cd /tmp 
opkg install shadowsocks-libev_x.x.x-x_ar71xx.ipk | 
 
 
二、配置
1、配置 /etc/shadowsocks.json ,格式如下:
|  | 
{ 
      "server": "X.X.X.X", 
      "server_port": "443", 
      "password": "password", 
      "local_port": "1080", 
      "method": "rc4-md5" 
} | 
 
 
修改 /etc/init.d/shadowsocks ,其实就是把Client Mode注释掉再把Proxy Mode的注释去掉:
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 | 
#!/bin/sh /etc/rc.common 
  
START=95 
  
SERVICE_USE_PID=1 
SERVICE_WRITE_PID=1 
SERVICE_DAEMONIZE=1 
SERVICE_PID_FILE=/var/run/shadowsocks.pid 
CONFIG=/etc/shadowsocks.json 
  
start() { 
 # Client Mode 
 #service_start /usr/bin/ss-local -c $CONFIG -f $SERVICE_PID_FILE 
 # Proxy Mode 
 service_start /usr/bin/ss-redir -c $CONFIG -f $SERVICE_PID_FILE 
} 
  
stop() { 
 # Client Mode 
 #service_stop /usr/bin/ss-local 
 # Proxy Mode 
 service_stop /usr/bin/ss-redir 
} | 
 
 
然后启动shadowsocks,并设置开机运行:
|  | 
/etc/init.d/shadowsocks enable 
/etc/init.d/shadowsocks start | 
 
 
2、配置dnsmasq和ipset
将如下规则加入自定义防火墙规则中(最后的1080是shadowsocks的本地端口 酌情修改):
|  | 
ipset -N gfwlist iphash 
iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080 
iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080 | 
 
 
修改 
/etc/dnsmasq.conf  ,在最后加入  
conf-dir=/etc/dnsmasq.d  ,新建并进入目录 
/etc/dnsmasq.d  ,下载 
dnsmasq_list.conf 后放入该目录(这个列表本人每天更新一次)。
你可能需要自行修改这个文件,格式如下:
|  | 
#使用不受污染干扰的DNS解析该域名 可以将此IP改为自己使用的DNS服务器 
server=/google.com/127.0.0.1#5353 
#将解析出来的IP保存到名为gfwlist的ipset表中 
ipset=/google.com/gfwlist | 
 
 
下面详细说一下DNS的方案,有三种:
比如说DNS服务器IP是:3.4.5.6,端口是5050,那么使用替换功能将/etc/dnsmasq.d/dnsmasq_list.conf 里面的 127.0.0.1#5353 全部替换成 3.4.5.6#5050 即可。
最后重启路由器即可。
使用ss-tunnel转发UDP的DNS请求,修改 /etc/init.d/shadowsocks 文件,如需修改上游DNS,请修改DNS=8.8.8.8:53 字段,本地端口修改 TUNNEL_PORT=5353 :
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 | 
#!/bin/sh /etc/rc.common 
  
START=95 
  
SERVICE_USE_PID=1 
SERVICE_WRITE_PID=1 
SERVICE_DAEMONIZE=1 
SERVICE_PID_FILE=/var/run/shadowsocks.pid 
CONFIG=/etc/shadowsocks.json 
DNS=8.8.8.8:53 
TUNNEL_PORT=5353 
  
start() { 
 # Client Mode 
 #service_start /usr/bin/ss-local -c $CONFIG -f $SERVICE_PID_FILE 
 # Proxy Mode 
 service_start /usr/bin/ss-redir -c $CONFIG -f $SERVICE_PID_FILE 
 # Tunnel 
 service_start /usr/bin/ss-tunnel -c $CONFIG -u -l $TUNNEL_PORT -L $DNS 
} 
  
stop() { 
 # Client Mode 
 #service_stop /usr/bin/ss-local 
 # Proxy Mode 
 service_stop /usr/bin/ss-redir 
 # Tunnel 
 service_stop /usr/bin/ss-tunnel 
} | 
 
 
最后重启路由器即可。
此方案使用ChinaDNS来做防DNS污染,先下载并安装相应的包:
|  | 
opkg install ChinaDNS_x.x.x-x_ar71xx.ipk 
opkg install luci-app-chinadns_x.x.x-x_all.ipk | 
 
 
特别提醒:2015.1.8,由于ChinaDNS-C更名为ChinaDNS,所以包名有变化,此前安装过ChinaDNS-C的,需要手动卸载并重新安装新版。
安装完成后,进到luci,指向服务,点击ChinaDNS,填入上游服务器地址,可以保留默认的114.114.114.114,8.8.4.4,确保本地端口是5353(也就是和dnsmasq_list.conf里面的127.0.0.1#5353保持一致),勾选“启用压缩指针”,然后保存并应用。
或者不勾选“启用压缩指针”,但要酌情填写延迟时间,默认0.3秒:
最后重启路由器即可。如果依然有DNS污染,可以考虑换成TCP方式,参照《
TCP 方式查询解决 DNS 污染问题》文中的方法配置unbound的TCP查询,不使用ChinaDNS,用ubound代替之,可以配置unbound的端口为5353,然后确保dnsmasq_list.conf中的服务器为127.0.0.1#5353
--
 Blogger 于  2/05/2015 06:00:00 下午 发布在  
翻牆網 ATGFW.ORG  上