xqd的小站

M.J

教你如何实现Openwrt路由器智能翻墙。

  上一篇文章教给大家的翻墙方案中需要客户端一直运行一个后台程序,非常的不方便。那么问题来了,有没有可能连上网就智能翻墙呢?     答案是的!!那就是下文中将要介绍的方案,通过Shadowsocks + GfwList 来实现 Openwrt路由器自动翻墙,任何设备只要连上这台路由器,不需要任何设置就可以浏览被墙的站点了。

       Openwrt是用于路由器的高度模块化,高度智能化的嵌入式Linux发行版,具有强大的扩展性,有数百个编译好的软件可供安装。Openwrt版本的Shadowsocks,具有透明代理,UDP转发等功能,透明代理实现流量转发,DNS的污染问题则通过UDP转发解决(DNS查询使用UDP协议)。

       本方案实施的前提条件:一台支持刷为Openwrt的路由器,一台PC机,Shadowscosks账号(服务器需要支持UDP转发,运行命令 netstat -nlp 查看服务器的UDP端口是否打开,local address应和TCP端口的一样,服务器ip:端口号)。

       本方案翻墙流程大致如下:客户端发出某域名的DNS请求–如果是Gfwlist里的被墙域名,则远程解析该站点(UDP转发)–解析到的IP存入ipset表中–设置iptables规则,ipset表中的ip地址全部走SS代理端口–正常浏览被墙网站。

一,安装Openwrt到路由器。

Openwrt官方Wiki查看你目前使用的路由器是否支持刷写成Openwrt固件。如果支持,进入路由器的官方Wiki界面,下载相应的Openwrt固件,当然也可以去专业论坛(比如恩山论坛)下载一些大神编译的Openwrt固件(一般会集成很多常用的功能)。

下载完成后,直接在路由器原厂固件的系统更新界面刷入.bin文件后等待重启即可。PS:如果你的路由器采用联发科MT7620A方案(如小米mini,联想Newifi mini等等),那么是肯定支持刷为Openwrt固件的。

二,配置Openwrt。

用一条网线连接路由器和电脑,打开192.168.1.1,用户名root,密码随意输入,进入Luci后台界面。

  1,配置SSH服务。点击系统–管理,先修改默认root用户的密码,SSH接口选择Lan,端口默认22,保存&应用即可。

  2,配置网络。点击网络–接口,选择WAN口,点击修改,协议选择PPPoE,然后输入你的宽带帐号和密码,保存&应用即可。确保路由器联网即可(可以打开几个网页测试下)。

  3,安装所需的软件。点击系统–软件包,刷新列表,完成后,查找dnsmasq-fullipset两个软件包并安装。

  也可安装@aa65535大神的增强版dnsmasq-full,此版本可设置min-cache-ttl选项,修改DNS缓存最小有效期,从而减少DNS查询的次数。

  如需将默认的英文界面改为中文界面,搜索i18n-chinese并安装,然后在系统–语言和界面里修改即可。Attention!!!安装dnsmasq-full前需移除原本的dnsmasq。如下图示:

 

三,安装Openwrt上的Shadowsocks客户端。

Shadowsocks并不在Openwrt官方软件源里,因此需要下载.ipk文件自行安装。

Openwrt版Shadowsocks下载:Shadowsocks-libev (非spec版本),注意与自己路由器的CPU芯片型号相对应,如博主的TP-841N v7路由器要下载ar71xx的版本(可以在Openwrt官方wiki查看路由器的CPU型号)。根据依赖的SSL库又可分为OpenSSLPolarSSL两个版本,OpenSSL版支持加密方式多,体积大,PolarSSL版体积小, 加密方式少,任意选一下载即可。

使用Winscp将下载的.ipk文件上传到路由器的/tmp目录下,地址192.168.1.1,端口22,需登录root账户。

打开Putty连接到路由器,依次运行如下命令。

opkg update
cd /tmp
opkg install shadowsocks-libev-XXXX.ipk    #安装Shadowsocks客户端。

 

四,配置Shadowsocks及相关软件。

       1,配置Shadowsocks。

  配置 /etc/shadowsocks.json:运行命令vi /etc/shadowsocks.json,格式如下:

{
"server": "X.X.X.X",
"server_port": 443,
"local_port": 1080,
"password": "password",
"timeout": 60,
"method": "chacha20"
}

  新建文件/etc/init.d/shadowsocks,启用ss-redir(透明代理)和ss-tunnel(DNS查询转发),并修改ss-tunnel的配置,参考如下。

#!/bin/sh /etc/rc.common

START=95

SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1

CONFIG=/etc/shadowsocks.json

start() {
#service_start /usr/bin/ss-local -c $CONFIG -b 0.0.0.0
service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0
service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -l 5353 -L 8.8.8.8:53 -u
#ss-tunnel本地DNS转发端口为5353,远端DNS查询地址为8.8.8.8:53(Google DNS),也可修改为别的DNS。
}

stop() {
#service_stop /usr/bin/ss-local
service_stop /usr/bin/ss-redir
service_stop /usr/bin/ss-tunnel
}

设置开机启动:进入Luci界面-系统-启动项,启用shadowsocks。

  2,配置dnsmasq-full和ipset。

  进入Luci界面-网络-防火墙-自定义规则,加入以下规则(最后的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

  运行命令: vi /etc/dnsmasq.conf
  修改内容如下:

conf-dir=/etc/dnsmasq.d
cache-size=1500      #修改dnsmasq缓存大小,默认为150。
min-cache-ttl=720    #修改DNS缓存最小有效期(秒)。仅适用于aa65535的dnsmasq-full版本。

  新建并进入目录 /etc/dnsmasq.d,下载dnsmasq_list.conf并放在该目录下(本人仅添加了谷歌,Youtube,脸书,推特等等常用域名,该列表持续更新中。注意域名太多反而会影响Dnsmasq-full的性能!)。

  如需自行修改或添加域名,参考格式如下:

server=/.github.com/127.0.0.1#5353 #使用UDP转发的方式解析该域名,实际查询的DNS是Google DNS。
ipset=/.github.com/gfwlist  #将解析出来的IP保存到名为gfwlist的ipset表中。

五,验证。

PC端的Dns要设为自动获取,最好重启下路由器和PC。

  1,百度搜索“ip”,显示为本地运营商的ip。
  2,可以顺利访问Google,Youtube等网站。

 

至此整个Openwrt路由器智能翻墙配置完成。任何接入该路由器的设备(手机,PC,平板,etc…)即可无障碍的浏览墙外的世界了。

 

  参考文章:https://cokebar.info/archives/962

2015年3月31日 0 / /
标签:  暂无标签

6 + 8 =

回到顶部