最近又折腾了一把路由,通过OpenWRT,OpenVPN和ChnRoutes实现的智能路由可以让你所有设备联网即自由,无需在各个设备上进行各种设置。
所需设备清单:
- 一台自由的主机
- 一台已经刷了OpenWRT的路由器
- 一根网线
- 一个2G的U盘
在此之前请确保你已经有了一台刷过OpenWRT的路由器,然后给路由器上电,通过网线直连,连接路由器:
设置密码:
而后退出即可用SSH进行登录了:
接着修改路由的无线配置,从而可以开启Wifi:
注释掉option disabled 1
一行,并设置Wifi的加密方式和密码:
然后修改网络配置:
注释掉option ifname 'eth0'
并增加WAN口设置,
而后重启路由,即可通过Wifi连接到路由器,此时将路由通过网线接入网络或者上级路由即可作为一个普通的路由器使用了。
安全模式
如果期间由于IP地址配置错误等原因导致无法连接到路由器,可以进入路由器的安全模式进行恢复:
1、拔掉路由器电源
2、链接电源后使用牙签不断抽插路由器的reset
按钮,当路由器的指示灯开始快速闪烁就说明已经进入了安全模式
3、安全模式不会加载任何配置,因此还需要通过最初提到的方式,直连并通过telnet 192.168.1.1
连接路由器
4、挂载root分区:mount_root
5、擦除先前的配置:firstboot
6、设置密码:passwd root
7、重启:reboot -f
而后就可以重新开始进行配置了,如果其中通过firstboot
擦除配置的过程中遇到错误,可以通过在OpenWRT中重新刷机的方式解决。
准备U盘
我所用的路由只有2MB存储空间,安装OpenWRT之后,空间已所剩无几,如果要安装后续提到的OpenVPN等软件,很明显空间是不够用的,但是我们可以通过路由器的USB接口使用U盘来做扩展。
我这里给2G的U盘分了3个区,1G(primary, bootable, ext4)/500MB(primary, swap)/500MB(primary, ext4)
,分区完后对其进行格式化,就完成了U盘的准备工作,我是通过Mac中的Ubuntu虚拟机进行下述操作的:
U盘准备完毕后就可以在路由上安装所需的软件了:
接着重启路由器,而后配置fstab实现U盘分区的自动挂载:
修改如下配置:
而后重启路由器后:
这时候你就可以通过df -h
看到分区已经自动挂载了:
接着执行如下操作:
接着在opkg.conf
配置中增加dest usb /mnt/usb
,之后就可以将我们需要的OpenVPN安装到USB中了:
到此已经可以运行OpenVPN了:
由于OpenVPN安装在USB中,所以后续启动OpenVPN会遇到找不到tun
模块的状况,接下来配置tun
模块:
接着我们关闭防火墙并看一下默认的一些转发和NAT规则:
可以看到此时默认是没有任何转发规则的,因此此时连接到路由器的设备是无法上网的,配置路由每次上电重启时候自动加载tun
模块并加入转发规则:
修改如下配置:
到此为止你的路由器已经可以再次正常接入互联网了,下面我们需要配置OpenVPN并进行流量的智能分发,即配置哪些流量走VPN。
首先我们先来配置OpenVPN,这包含两方面的配置,服务端和客户端。
服务端
客户端
客户端需要配置在服务端生成的证书路径,首先从服务器下载打包的证书文件:
703n.ovpn
配置如下:
到此为止,通过当前的配置文件已经可以启动OpenVPN并实现所有流量经过VPN转发了:
openvpn --config ./703n.ovpn
为了实现流量的智能分发,同时也是为了节省VPN的流量,可以通过ChnRoutes实现,在Mac上下载ChnRoutes并执行:
python chnroutes.py -p android
会生成两个文件vpnup.sh
和vpndown.sh
,将这两个文件头部的alias
删除,并下载到路由器中之后,在配置文件底部增加如下设置:
好了,这时候再次启动OpenVPN,在Mac上分别traceroute
下Baidu和Twitter就会发现,流量已经自动分发了。
Reference:
- http://www.imtxc.com/blog/2013/02/24/install-and-configure-openwrt-on-wr703n/
- http://blog.zhen9ao.me/blog/2012/04/10/how-to-config-openwrt-with-openvpn-on-tp-link-wr703n/
- http://www.dd-wrt.com/phpBB2/viewtopic.php?t=65650
- https://blog.ipredator.se/howto/openwrt/configuring-openvpn-on-openwrt.html
- http://ipxkb.info/auto-install-openvpn-on-debian/
EOF