在openwrt上使用gfwlist模式

以往使用的路由翻墙模式是chnroute模式,简单来讲就是ip不在中国的全部使用代理,优点就在于方便,缺点也很明显,有些站点虽然在境外但是并没有被墙,这种情况是不应该再用代理的。

这一次改用gfwlist模式,也就是通常所说的黑名单模式。路由本身已经装好chinadns,ss,和dns-forwarder三件套,这个模式下我们可以停用chinadns了。

首先:安装dnsmasq-full,卸载dnsmasq。不要弄错顺序,不然处理起来很麻烦。(这一步是因为dnsmasq-full支持ipset)

第二步:wan口设置页面,设置dns服务器为127.0.0.1或者留空。(路由器本身提供dns服务)

第三步: DHCP/DNS设置页面:DNS转发填写能够正常访问的公共DNS。忽略解析文件不能勾选,并填写解析文件:/tmp/resolv.conf.auto (使用dnsmasq-full提供dns服务)

第四步 : 防火墙设置页面:自定义规则 (后方的端口为ss的本地端口)

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

第五步:SSH登录路由器,在etc目录下建立dnsmasq.d文件夹,并上传gfwlist文件。格式如下所示,您可以自行添加。

server=/twimg.com/127.0.0.1#5353
ipset=/twimg.com/gfwlist

第七步:打开etc目录下的dnsmasq.conf文件,添加如下内容,指向您添加的文件夹

conf-dir=/etc/dnsmasq.d

第八步:ss访问控制设置页面:被忽略ip列表我们选择为留空,此时ss会全局代理。接下来我们要给额外忽略ip中添加两个地址 0.0.0.0/1 和 128.0.0.0/1,这样做之后,ss才会只对gfwlist中的域名代理。

第九步:我们在第五步的代码中可以看到对于gfwlist中的域名我们通过5353端口进行解析。这里我们要用到dns-forwarder,打开大的设置界面,把监听端口改为5353即可。

第十步:以上工作全部完成后,我们重启路由,通过这个网址测试是否成功。

关于openwrt的升级

openwrt更新到了18.06.2,虽然是小版本的更新,鉴于最近路由翻墙不是很稳定,决定升级。

官网下载升级包,sysupgrade.tar,在路由的备份升级界面直接升级即可。

需要注意的是,升级之后自行安装的应用将全部被覆盖,只能保留配置文件。所以如果你为了翻墙对基础设置进行了修改,升级之后有无法上网的风险,需要逐项检查。

首先:WAN口设置,把自定义的dns服务器设置成国内的公共DNS。
接着:DHCP/DNS,把DNS转发清空,把忽略解析文件的勾去掉。

连上网络之后,在软件包页面更新软件列表,更新完毕之后,搜索luci-i18n-base-zh-cn安装进行汉化。

然后就是翻墙三件套的安装,分别是ss,dns-forwarder,chinadns,下载地址
需要下载ipk文件并上传到路由器手动安装。
这里需要注意的是:路由器传输文件需要使用scp协议。而xftp不支持scp协议。我们选择WINSCP这个软件。

另外vps有些高阶端口会被封,所以再能够ping通的情况下可以先修改一下端口试试。

关于软件包的升级

执行以下命令可批量升级软件包

opkg update
opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

openwrt一些升级说明

关于dnsmasq

openwrt的默认dnsmasq并不支持ipset,需要安装dnsmasq-full版本。ipset是为了支持对域名的转发代理,而chinadns是对ip进行转发代理。所以如果你选择域名匹配翻墙需要安装dnsmasq-full版本。

这里就有了一个问题,当卸载dnsmasq之后,无法解析域名,也就无法安装dnsmasq-full了。这里需要卸载和安装同步进行以避免此类问题。代码如下:

opkg remove dnsmasq && opkg install dnsmasq-full

关于chinadns

chinadns的原理很简单,可设置两个dns,一个是国内的dns,一个是国外的可信dns。当接到解析任务的时候,会同时向两个dns发送解析请求。

首先国外的可信dns拥有优先权,如果国外dns先返回结果就采用,如果是国内ip,直接访问,如果是国外ip则通过代理访问。

如果国内dns先返回结果,如果是国内的ip则直接访问。如果是国外的ip则抛弃掉,采用国外dns的结果。

看到这里,大家可能都和我有一样的疑问,如果国内dns率先返回的是假的国内ip,这样不就解析失败了。

但是实际情况很有趣,国外被污染的域名返回的仍然是国外ip,至于原因,也许只有他们自己知道了。所以这一点暂时没有担心的必要。

其实chinadns主要思想的是提高访问速度,如果你把所有的解析任务交给国外的dns,那么对于国内网站来说,你访问的不一定是最快,最合适的服务器。而且经过代理访问dns必然大大的加大解析时间。不管如何chinadns仍然是目前最优的dns优化选择。

以下代码用来更新chinadns的中国路由信息。

 wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /etc/chinadns_chnroute.txt