NAP6官方旗舰店
搜索
发新帖
午饭无线 推广广告R7800 完胜 华硕路由器NETGEAR Vs ASUS T-Mobile定制版NETGEAR团购
开启左侧

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

[复制链接]
8365 44

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本方案的优点明确,只有被墙的站点才走代理,但是gfwlist并不能100%涵盖被墙站点,而且有些国外站点直连速度远不如走代理,特别是你代理服务器速度较快,希望通过代理加速国外访问时,此方案就不是那么好用了。请酌情选择你所使用的方案。

本方案主要涉及到的开源项目
https://github.com/aa65535/openwrt-shadowsocks

https://github.com/aa65535/openwrt-chinadns

https://github.com/aa65535/openwrt-dist-luci

https://github.com/madeye/shadowsocks-libev

https://github.com/clowwindy/ChinaDNS

一、安装
首次安装的话,先安装必要的包,确保路由器联网,先更新软件包列表(下载有问题的请手动到openwrt.org下载所有需要的包并上传到路由器上使用opkg install XXX.ipk命令安装):
  1. 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体积更小):
  1. opkg install iptables-mod-nat-extra ipset libpolarssl
复制代码
如果要用普通版本(openssl)的shadowsocks,那么(openssl兼容性更好):
  1. opkg install iptables-mod-nat-extra ipset libopenssl
复制代码
期间可能遇到如下错误提示:
  1. kmod: failed to insert /lib/modules/3.10.44/ip_set.ko
  2. kmod: failed to insert /lib/modules/3.10.44/ip_set_bitmap_ip.ko
  3. kmod: failed to insert /lib/modules/3.10.44/ip_set_bitmap_ipmac.ko
  4. ...
复制代码
没关系这是因为安装的包需要重启系统,我们做完剩下的步骤最后再重启。

然后卸载dnsmasq并安装dnsmasq-full以及剩下的包
  1. opkg remove dnsmasq && opkg install dnsmasq-full
  2. cd /tmp
  3. opkg install shadowsocks-libev_x.x.x-x_ar71xx.ipk
复制代码

二、配置
游客,如果您要查看本帖隐藏内容请回复

然后启动shadowsocks,并设置开机运行:
  1. /etc/init.d/shadowsocks enable
  2. /etc/init.d/shadowsocks start
复制代码
2、配置dnsmasq和ipset

将如下规则加入自定义防火墙规则中(最后的1080是shadowsocks的本地端口 酌情修改):
  1. ipset -N gfwlist iphash
  2. iptables -t nat -A PREROUTING -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 后放入该目录。

自动生成dnsmasq_list.conf 的脚本本人放在这里:https://github.com/cokebar/gfwlist2dnsmasq

你可能需要自行修改这个文件,格式如下:
  1. #使用不受污染干扰的DNS解析该域名 可以将此IP改为自己使用的DNS服务器
  2. server=/google.com/127.0.0.1#5353
  3. #将解析出来的IP保存到名为gfwlist的ipset表中
  4. ipset=/google.com/gfwlist
复制代码

下面详细说一下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 :
  1. #!/bin/sh /etc/rc.common

  2. START=95

  3. SERVICE_USE_PID=1
  4. SERVICE_WRITE_PID=1
  5. SERVICE_DAEMONIZE=1
  6. SERVICE_PID_FILE=/var/run/shadowsocks.pid
  7. CONFIG=/etc/shadowsocks.json
  8. DNS=8.8.8.8:53
  9. TUNNEL_PORT=5353

  10. start() {
  11.         # Client Mode
  12.         #service_start /usr/bin/ss-local -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
  13.         # Proxy Mode
  14.         service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
  15.         # Tunnel
  16.         service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -u -l $TUNNEL_PORT -L $DNS
  17. }

  18. stop() {
  19.         # Client Mode
  20.         #service_stop /usr/bin/ss-local
  21.         # Proxy Mode
  22.         service_stop /usr/bin/ss-redir
  23.         # Tunnel
  24.         service_stop /usr/bin/ss-tunnel
  25. }
复制代码
最后重启路由器即可。

方案三:

此方案使用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/
  1. opkg install ChinaDNS_x.x.x-x_ar71xx.ipk
  2. 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保持一致),勾选“启用压缩指针”,然后保存并应用。

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

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


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

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

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


最后重启路由器即可。对于特殊情况,如长宽用户无法使用方案一和方案二时(长宽用户不支持方案三)

PS1:发现有不少人之前用过chnroute方案,然后改成gfwlist方案,此时记得把忽略解析文件的勾选去掉并把原来的设置填回去:

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

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


PS2:默认只有连接路由的设备翻了墙,为了让路由器自身也能够翻墙(如使用路由器获取gfwlist更新dnsmasq_list.conf时候,gfwlist的URL是被墙站点,此时需要路由器自身也要翻墙)做出如下配置,先在自定义防火墙规则中额外加一条:
  1. iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
复制代码
然后再WAN口配置中如图所示,将DNS手动指定为127.0.0.1:

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

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

最后在DHCP/DNS设置中将你的ISP的DNS填入(或者使用114DNS等公共DNS)

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

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




精彩评论44

tsy1102  班长  发表于 2016-6-18 23:04:47 | 显示全部楼层
一步一步跟着学
robinsome  班长  发表于 2016-7-18 16:46:05 | 显示全部楼层
谢谢分享

举报 使用道具

回复
flyshadow  工兵  发表于 2016-7-29 22:13:08 | 显示全部楼层
不错,感谢分享!!!!
dd235698  班长  发表于 2016-8-11 18:37:48 | 显示全部楼层
不错,感谢分享!!!!
wenqh  工兵  发表于 2016-8-18 22:02:55 | 显示全部楼层
终于找到完整教程了
梅林DD  班长  发表于 2016-8-21 20:22:32 | 显示全部楼层
学习学习,谢谢楼主
wiisson  班长  发表于 2016-8-25 10:40:27 | 显示全部楼层
学习学习,谢谢
bslayer  班长  发表于 2016-8-25 21:48:20 | 显示全部楼层
我要看看

举报 使用道具

回复
最无穷  班长  发表于 2016-8-27 14:43:48 | 显示全部楼层
好像知道怎么弄的e
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩推荐

热点动态

精彩图文

快速回复 返回顶部 返回列表