基于域名黑名单的翻墙方式,好处是:
- 配置简单可控,只有需要的时候才走VPN
- 对P2P友好,同时也能节约大量的VPN流量
当然该方法也适用于OpenWrt的路由器
首先对指定域名下的所有请求进行标记,以区分需要进行翻墙操作的请求,然后让所有被标记的请求使用VPN专用的路由表进行路由
需要用到ipset、dnsmasq ip及iptables等工具
建立需要翻墙的IP集合,名为vpn
$ ipset create vpn hash:ip
为了以后能在开机时自动建立,将该代码作为启动脚本加入/etc/rc.local
文件中
自动解析需要的翻墙的域名加入IP集合
在/etc/dnsmasq.d/
目录下建立vpn.conf
文件,并在其中加入一下代码:
# 对此域名的解析使用Google的公共DNS服务器(防止DNS污染)
server=/google.com/8.8.8.8
# 将此域名对应的所有IP地址加入之前建立的 vpn ip集合中
ipset=/google.com/vpn
对于其它需要翻墙的域名都如法炮制,随意添加。
注意 一般网站都会使用多个顶级域名来提供服务,如果网站能打开但是页面图片什么的看不到就是还需要补充些域名
标记vpn集合中的网络请求,方便后续的路由操作
# 符合VPN地址集合的请求都以`8`进行标记
iptables -t mangle -A fwmark -m set --match-set vpn dst -j MARK --set-mark 7
为了以后能在开机时自动生效,将该代码作为启动脚本加入/etc/rc.local
文件中
建立VPN专用的路由表
在/etc/iproute2/rt_tables
文件中添加一个行记录
# 增加一个序号为200 名为gfw的路由表
200 gfw
新版的Rom(0.8.74)已经默认有一个叫vpn
的路由表了,所以得取个另外的名字,囧...
在建立VPN连接时让所有已被标记为需要翻墙的请求使用专用的VPN路由表
- 拷贝仓库中的vpnup文件到
/etc/ppp/ip-up.d/
目录下 - 执行
chmod a+x vpnup
使vpnup
文件具有可执行权限
然后在VPN断开时不再使用专用的VPN路由表
- 拷贝仓库中的vpndown文件到
/etc/ppp/ip-down.d/
目录下 - 执行
chmod a+x vpndown
使vpndown
文件具有可执行权限
如果MiWiFi
的Rom版本在0.7.6
以下,可以跳过此步,直接前往Step 7
0.7.6
以上的版本改变了VPN建立时相关脚本的逻辑,需要额外进行两处设置
- 拷贝仓库中的70-vpn文件至
/etc/hotplug.d/iface/
目录覆盖原文件,并执行chmod a+x 70-vpn
命令 - 执行
chmod a-x /etc/ppp/ppp.d/vpn-up
打完收工,设置PPTP/L2TP
为自动开机链接,最后重启路由器 ~