Openwrt配置Shadowsocks

之前家里用的是DB120-WG,双USB口,16M Flash,64M RAM。用起来爽爽的,刷OpenWrt,接移动硬盘,transmission和Aria2离线下载,设置Shadowsocks,自动配置翻墙。可惜有次吵架,被老婆一脚给踩坏了,唉。后来通过闲鱼重新购入一枚Netgear WNDR3400,这家伙体质没有DB120-WG来得好,Flash、RAM小,无线的驱动不理想,不过还好基本功能能满足,可以刷OpenWrt和dd-Wrt。

想法

以前上网用的是浏览器(Firefox, Chrome),加代理控制插件(SwitchyOmega,AutoProxy),然后是代理(Shadowsocks, SSH)。现在用路由器来管理,思路就是路由器直接判断网址是否需要走代理,这样就可以透明代理上网了。

List中的域名站点走代理,不在List中的域名不走代理,根据域名判断。同时List中的域名需要通过其它方法获得正确的域名解析。正好ss-tunnel也提供了此功能。

服务器设置

服务器同样用的也是Shadowsocks-libev,应该可以节约一些资源,毕竟VPS内存不大。如果需要用ss-tunnel走VPS来做域名解析代理,ss-server参数后需要增加-u,enable udprelay mode。

然后就是一个黑科技Google BBR,大大地增加了代理速度。以前未使用BBR的时候,速度大概就200KB/s,开户BBR后速度可达到2MB/s,这还是我办的宽带是20M的情况下。开启BBR简单的办法就是将内核升级到4.9,或者自己Patch内核。具体参考了以下两篇文章:

路由器设置

安装必要软件

首先了解路器SoC架构,然后增加以下内容到/etc/opkg.conf。注意将签名验证给注释掉。

/etc/opkg.conf
1
2
src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/OpenWrt/base/{architecture}
src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/OpenWrt/luci

然后就是安装需要的软件了。

1
2
3
4
opkg update
opkg install iptables-mod-nat-extra iptables-mod-tproxy ipset
opkg install Shadowsocks-libev
opkg remove dnsmasq && opkg install dnsmasq-full

配置

配置Shadowsocks信息

/etc/shadowsocks-libev/config.json
1
2
3
4
5
6
7
{
"server": "x.x.x.x",
"server_port": "xxxx",
"password": "password",
"local_port": "1080",
"method": "rc4-md5"
}

新建Shadowsocks init文件。

/etc/init.d/Shadowsocks
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
#!/bin/sh /etc/rc.common

START=95
STOP=15

SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
SERVICE_PID_FILE=/var/run/shadowsocks.pid
TUNNEL_PID_FILE=/var/run/ss-tunnel.pid
CONFIG=/etc/shadowsocks-libev/config.json
DNS=8.8.8.8:53
TUNNEL_PORT=5353

start() {
# 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 -f $TUNNEL_PID_FILE
}

stop() {
# Proxy Mode
service_stop /usr/bin/ss-redir
# Tunnel
service_stop /usr/bin/ss-tunnel
}

修改文件权限,并设置开机启动。

1
/etc/init.d/shadowsocks enable

配置dnsmasq和ipset

增加防火墙规则,同时在firewall.user中增加,开机后便自动增加。

1
2
ipset -N gfwlist iphash
iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080

配置Dnsmasq

修改/etc/dnsmasq.conf,并新增目录/etc/dnsmasq.d

/etc/dnsmasq.conf
1
2
3
4
5
6
7
all-servers
server=119.29.29.29
server=114.114.114.114
cache-size=2500
min-cache-ttl=300

conf-dir=/etc/dnsmasq.d

dnsmasq_gfwlist_ipset.conf放到目录/etc/dnsmasq.d中,规则主要是处理哪些域名需要进行特殊处理。根据格式可自行修改,也可做adblock.conf,这样可进行广告处理,直接将DNS结果返回空。

1
2
3
4
#使用不受污染干扰的DNS解析该域名 可以将此IP改为自己使用的DNS服务器
server=/google.com/127.0.0.1#5353
#将解析出来的IP保存到名为gfwlist的ipset表中
ipset=/google.com/gfwlist

其中的127.0.0.1#5353可另行处理,可用8.8.8.8#53或其它未被污染的服务器替代。

主要参考了以下文章

PS:上次路器配置好后一直没有动过,现在OpenWrt的分支LEDE更活跃,基本转LEDE了。