Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙

Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙

本站发布的三种 shadowsocks 在 openwrt 上的自动翻墙方案:

1、Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 (停止更新)
3、Shadowsocks + GfwList 实现 OpenWRT / LEDE 路由器自动翻墙

本方案依靠GFWList,List中的域名站点走代理,不在List中的域名不走代理,根据域名判断。然而其实本质上依然是根据IP判断是否代理IP走代理,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型号和系统选取相应版本:

shadowsocks-libev: https://dl.bintray.com/aa65535/opkg/shadowsocks-libev/

(注:作者放出预编译包的地址可能变动,如果以上地址找不到,请移步aa65535的github页面,找到对应的repo查看最新的地址: https://github.com/aa65535

先安装必要的包,如果要用openssl的shadowsocks,那么:

opkg install iptablesmodnatextra ipset libopenssl

如果要用mbedtls版本的shadowsocks:

opkg install iptablesmodnatextra ipset libmbedtls

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

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 dnsmasqfull

cd /tmp

opkg install shadowsockslibev_x.x.xx_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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/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() {

# Proxy Mode

service_start /usr/bin/ssredir c $CONFIG b 0.0.0.0 f $SERVICE_PID_FILE

}

stop() {

# Proxy Mode

service_stop /usr/bin/ssredir

}

修改文件权限:

chmod +x /etc/init.d/shadowsocks

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

/etc/init.d/shadowsocks enable

/etc/init.d/shadowsocks start

2、配置dnsmasq和ipset

2.1. 将如下规则加入自定义防火墙规则中(最后的1080是shadowsocks的本地端口 酌情修改):

ipset N gfwlist iphash

iptables t nat A PREROUTING p tcp m set