openWRT + 55 搭梯子

一直用 GoAgentX 配 PAC 跑 VPN

但是 PAC 模式下对于前段时间被封的 Gmail STMP IMAP协议没用

只好用路由器来翻了…

整体思路是这样的

首先路由器刷 openWRT 提供一个折腾的平台

然后用路由器的 dnsmasq 来获得一个正确的解析

普通域名指定采用国内 DNS 服务器

对于被墙域名者指定 openDNS 来解析(是的,本方案是基于域名做判断的)

然后将访问被墙域名的数据包打上标签后由 iptables 进行转发

转发到在路由器上运行的 55 ,客户端所提供的一个端口

最后 ss 将数据发送到墙外的 55 服务器(自己搭建,参考此文),实现翻墙

由于是在路由器上进行转发,所以 STMP IMAP 是能被支持的

而且此路由器下的所有用户都无需做任何配置就能直接智能翻

国内域名直连出去,被墙域名走 55 出去

下面开始折腾(路由器以百度的 newifi mini 、电脑以 Mac 为例)

先把要用的文件下好:

1. 路由器的 openWRT 固件(我下的这个版本

2. 55 的 ipk 包,就是 openWRT 下应用程序安装文件(官网右下角有用于 openWRT 的推荐版本,注意选择对应自己路由器处理器的,newifi mini 是 ramips 架构,也可以从这下最新版本的 ss,请选对应架构、无 spec、PolarSSL版本)(不用 openSSL 是因为它太大了)

3. (此条给有 VPS 或虚拟主机的人,需要服务器有 curl 扩展) dnsmasq 用的翻墙域名列表来自 gfwlist ,是需要做一定处理才能被使用的,这个项目就是用来提供这么一个自动处理和更新的功能,点右边下载 zip 包解压备用

4. 这里还有一些要用到的其他文件,也请一并下好,那啥是bxb8,嗯

=====================下面操作是给有符合上面下载3的条件的人看=====================

在4中下载的文件夹中打开“gfwlist2dnsmasq-修改”

用里面的“config.php”替换3中下载解压的文件夹中的“config.php”

我提供的这个“config.php”实际上只是修改了原版最下面的解析用 DNS 和 ipsetname

原版用的8.8.8.8已经被墙了,我这里修改的 DNS 用了 openDNS 的 443 端口,这个还能用

再用我提供的“data”文件夹中两个文件替换原版“data”文件夹中的文件(“dnsmasq.template”是模板文件,这里用空的,“gfwlist_domain_extra.txt”是手动添加的额外的需翻墙域名,根据自己需要再修改就可以了)

把替换好的原版文件夹内所有文件,除“README.md”和“updategfwlist.sh”外一起上传到你虚拟主机或者VPS 的“public_html”上

当然自己在“public_html”里再新建一个文件夹那更好了,方便管理嘛

然后输入网址指向你上传的地方,后面加上“?get=1”

操作正确的话你应该能得到base64的输出(此处请用 chrome 试验,Safari 有问题),说明你服务器端配置正确

然后打开我提供的 “updategfwlist.sh”文件,在上面我中文标注的地方填好你配置的服务器端地址(不要加“?get=1”)

这个文件和原版相比,还修改了一个地方,就是生成的新域名文件存放地址,在第14行

至此,本部分操作结束

=====================上面操作是给有符合上面下载3的条件的人看=====================

现在开始刷路由器,具体操作请百度自己路由器的刷机说明,值得注意的是,刷机请务必关闭无线,用有线连接

如果是用 newifi mini ,刷了我前面提供的固件的,路由器登录 ip 是192.168.99.1,用户名 root,密码是 admin

如果你的路由器是作为二级路由,请登录路由器管理界面(以下简称 luci)后修改 lan 口的 ip 和主路由区别开(我的路由器修改为192.168.2.1),并取消 DHCP 设置中作为唯一 DHCP 的勾勾

值得一提的是,在启动项中,按键显示“启用”,表示当前已经启用,而不是表示点击这个按键后启用,这个逻辑和通常理解的是相反的,别搞错了

然后记得去修改密码,嗯

刷路由的时候,打开4中下载的两个后缀为 json 的 ss 配置文件,在里面中文提示处填好你 ss 服务器的 ip 和密码,如果 ss 服务器端口不是8080、加密方式不是“aes-256-cfb”也请一并修改好,两个 json 都请修改(1080端口的 json 文件是提供一个1080给局域网内所有计算机用来全局翻墙,路由器本身不用,计算机需要使用时设置 SOCKS 代理为路由器 IP,端口1080即可,1081端口是给路由器自动翻墙用,所有符合标签的包都会被转发到这个端口走 ss 出去)

按以上在 luci 中配置好后, SSH 登录路由器(Mac 直接用终端就可以,win 用 PuTTy)

第一次登录要确认一次,输入 yes 即可,然后输入之前设置的密码,在输入过程中不会有显示

如果重新刷机了会更换 RSA,此时和电脑端的不一致便会报错,解决方法见这

接着依次执行下列命令(以下指令需要路由器已经联网,作为二级路由器的请参考我上面提的设置 DHCP,其他上网方式请自行配置好)

如果你在前面有部署域名列表更新服务(也就是下载3里面的东西),那你需要在上面 ipset 后面加一个空格以及“coreutils-base64”后再执行

来解释一下,第一个是用来移除本身自带的 dnsmasq,openWRT 自带的功能不完整,所以需要卸载后安装一个完整版

第二个是用来更新软件源的,最好每次在线安装包的时候都更新一次,有时候本地没更新的镜像的话会不能在线安装

第三个是安装后面这一串的包,“dnsmasq-full”是完整版 dnsmasq,“libpolarssl”是提供 ss 连接所需加密的支持,“vsftpd”是提供路由器的 FTP 支持,能大大方便操作,“ipset”就是提供 ipset 指令的支持,然后可能会要单独添加的“coreutils-base64”是提供 base64 功能,在后面更新 list 的时候是需要的

然后依次执行下列指令以添加 FTP 的自启动和现在立即启动

现在打开你的 FTP 工具连接路由器(Mac 我用的 Transmit,win 的话用 WinSCP 比较多吧)

上传在 2 中下载的 ss 安装包(ipk格式)到 /tmp 目录

在 /etc 中上传你已经修改好的两个 json 文件,并上传4中下载的根目录下“dnsmasq.conf”文件(不是“dnsmasq”文件夹里面的那个)(这个“dnsmasq.conf”文件拒绝了 ISP 默认的 DNS,全局指定了多个知名 DNS 服务器,并同时做查询,更重要的是它还将配置文件夹给指出来,方便放入和管理更多的域名)

在 /etc 中新建名为“dnsmasq.d”的文件夹,把4中下载的“dnsmasq”文件夹中提供的三个文件全部上传上去(“bogus-nxdomain.china.conf”这里面是 DNS 污染黑名单,当你输入一个不存在的域名时,ISP 会给你跳到一个广告页,这里就收集了这些广告页的IP并做了屏蔽, “dnsmasq.conf”这个就是由 gfwlist 自动生成的 dnsmasq 用列表,需要翻的域名都在这里面)

在 /etc/init.d 中上传4中下载的“shadowsocks.sh”文件,赋755权限,这个文件是用来自启动 ss 服务,并把打了“gfwlist”标签的数据转发到1081端口,同时把一些常见的域名的 ip 段直接转发到1081也能提高一些速度(ip 后面带斜杠的含义请百度可变长子网掩码)

如果你有部署域名列表更新服务,则把前面修改过的“updategfwlist.sh”上传到 /usr/bin 目录下,赋权755,再登录路由器管理页面,在计划任务中添加命令

这个命令的格式对应的含义见下

所以意思就是说在5点20的时候会执行/usr/bin/updategfwlist.sh一次,然后5点21的时候再执行一次,重复一下的原因是怕第一次没成功

换到 SSH 界面,运行以下命令确认看是否能正常获取 gfw 列表

注意看他最后给的提示是否成功,如果提示失败可再运行一次,或者去掉参数1再次运行,若仍然失败那就查查原因咯

接下来是所有人都要做的,在 SSH 界面依次执行以下指令

其中“ss.ipk”请替换为与你上传的 ipk 文件名一致的名称以便能够正确安装 ss

在 luci 中的启动项里,把 ss 和 ss.sh 都配置为启动(注意我之前有提过的逻辑是反过来的问题)

然后配置好时区啊无线什么的再拔插电源重启就 OK 了,验证下看能否自动翻

P.S.如果你刷的是我提供的这个固件,wifi 要用配置文件来配置,参考如下

P.P.S. 我曾遇到开机后不能正常翻,输入指令重启 ss.sh 后恢复

试过各种方法比如修改启动优先级,在 rc.local 中添加重启指令等,但都没效果

考虑重启 ss.sh 后恢复应该是 ss 依赖的某个服务还没启动好就执行了 ss.sh,使得 ss 不能正常启动

于是乎在 ss.sh 中添加延时指令得以解决(以下为 ss.sh 节选)

其中 sleep 60 便是延时 60 秒后启动

其实这个延时前便已经完成了路由器主要进程的启动,所以就算仍在延时中也并不会影响上网,只会影响 LED 和系统对时这两个进程,问题不大

至此,openWRT 上用 SS 进行智能翻墙已经搞定,嗯哼