ShadowSocks 路由器自动科学上网

用路由器来科学上网的好处是一次配置, 全家上网无忧。

本文的方案本质上依然是根据IP判断是否代理,列表内的IP走代理,列表外的直连;而这个IP列表我们可以通过dnsmasq-full来自动生 成;dnsmasq-full可以将解析域名得到的IP加到一个ipset中,利用这个ipset来判断走不走代理。实际是完成了gfwlist到 dnsmasq的ipset规则再到IP地址的转换。同样,本方案依然可以搭配ChinaDNS搭配使用,也可以使用ss-tunnel,或者是自己的 DNS服务器。

1. ShadowSocks路由器软件安装

首次安装的话,先安装必要的包,确保路由器联网,先更新软件包列表(下载有问题的请手动到openwrt.org下载所有需要的包并上传到路由器上使用opkg install XXX.ipk命令安装):

opkg update

shadowsocks有openssl(文件名是shadowsocks-libev-X.XX.ipk)和polarssl(文件名是shadowsocks-libev-polarssl-X.XX.ipk)两个版本选择,ROM空间吃紧的就选择后者吧。

下载链接如下,请根据自己CPU型号选取相应版本:

shadowsocks-libev: http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/

先安装必要的包,如果要用polarssl版本的shadowsocks(polarssl体积更小):

opkg install iptables-mod-nat-extra ipset libpolarssl

如果要用普通版本(openssl)的shadowsocks,那么(openssl兼容性更好):

opkg install iptables-mod-nat-extra ipset libopenssl

期间可能遇到如下错误提示:

kmod: failed to insert /lib/modules/3.10.44/ip_set.ko
kmod: failed to insert /lib/modules/3.10.44/ip_set_bitmap_ip.ko
kmod: failed to insert /lib/modules/3.10.44/ip_set_bitmap_ipmac.ko
...

没关系这是因为安装的包需要重启系统,我们做完剩下的步骤最后再重启。

然后卸载dnsmasq并安装dnsmasq-full以及剩下的包

opkg remove dnsmasq && opkg install dnsmasq-full
cd /tmp
opkg install shadowsocks-libev_x.x.x-x_ar71xx.ipk

2. ShadowSocks配置

a. 配置 /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的注释去掉:

#!/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 -b 0.0.0.0 -f $SERVICE_PID_FILE
    # Proxy Mode
    service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
    # Tunnel
    #service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -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
}

然后启动shadowsocks,并设置开机运行:

/etc/init.d/shadowsocks enable
/etc/init.d/shadowsocks start

b. 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的方案,有三种:

方案一:

在代理服务器上搭建DNS服务来解析国外网站,可用dnsmasq或者pdnsd,监听非53端口。

比如说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 :

#!/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 -b 0.0.0.0 -f $SERVICE_PID_FILE
 # Proxy Mode
 service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
 # Tunnel
 service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -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污染,先下载并安装相应的包:

chinadns-openwrt: http://sourceforge.net/projects/openwrt-dist/files/chinadns/

luci-app-chinadns: http://sourceforge.net/projects/openwrt-dist/files/luci-app/chinadns/

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保持一致),勾选“启用压缩指针”,然后保存并应用。

chinadns配置

或者不勾选“启用压缩指针”,但要酌情填写延迟时间,默认0.3秒:

chinadns 配置2

最后重启路由器即可。如果依然有DNS污染,可以考虑换成TCP方式,如果不使用ChinaDNS,用ubound代替之,可以配置unbound的端口为5353,然后确保dnsmasq_list.conf中的服务器为127.0.0.1#5353

 

Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>