所需设备清单:
一台自由的主机
一台已经刷了OpenWRT的路由器
一根网线
一个2G的U盘
在此之前请确保你已经有了一台刷过OpenWRT的路由器,然后给路由器上电,通过网线直连,连接路由器:
telnet 192.168.1.1设置密码:
passwd而后退出即可用SSH进行登录了:
exitssh root@192.168.1.1接着修改路由的无线配置,从而可以开启Wifi:
vim /etc/config/wireless注释掉option disabled 1一行,并设置Wifi的加密方式和密码:
代码如下 | 复制代码 |
config wifi-device radio0 option type mac80211 option channel 11 option hwmode 11ng option path 'platform/ar933x_wmac' option htmode HT20 list ht_capab SHORT-GI-20 list ht_capab SHORT-GI-40 list ht_capab RX-STBC1 list ht_capab DSSS_CCK-40 # REMOVE THIS LINE TO ENABLE WIFI: # option disabled 1 config wifi-iface option device radio0 option network lan option mode ap option ssid OpenWrt option encryption psk2 option key 'password' |
然后修改网络配置:
vim /etc/config/network注释掉option ifname 'eth0'并增加WAN口设置,
代码如下 | 复制代码 |
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd48:f746:e8a5::/48' config interface 'lan' # option ifname 'eth0' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option ip6assign '60' config interface 'wan' option ifname 'eth0' option proto 'dhcp' |
而后重启路由,即可通过Wifi连接到路由器,此时将路由通过网线接入网络或者上级路由即可作为一个普通的路由器使用了。
reboot安全模式
如果期间由于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虚拟机进行下述操作的:
代码如下 | 复制代码 |
cfdisk /dev/sdb mkfs.ext4 /dev/sdb1 mkswap /dev/sdb2 mkfs.ext4 /dev/sdb3 |
U盘准备完毕后就可以在路由上安装所需的软件了:
代码如下 | 复制代码 |
opkg update opkg install kmod-usb2 kmod-fs-ext4 opkg install kmod-usb-storage opkg install block-mount reboot |
接着重启路由器,而后配置fstab实现U盘分区的自动挂载:
代码如下 | 复制代码 |
reboot vim /etc/config/fstab |
修改如下配置:
代码如下 | 复制代码 |
config 'mount' option target /mnt/usb option device /dev/sda1 option fstype ext4 option enabled 1 config 'swap' option device /dev/sda2 option enabled 1 config 'mount' option target /mnt/home option device /dev/sda3 option fstype ext4 option enabled 1 |
而后重启路由器后:
reboot这时候你就可以通过df -h看到分区已经自动挂载了:
代码如下 | 复制代码 |
df -h Filesystem Size Used Available Use% Mounted on |
接着执行如下操作:
代码如下 | 复制代码 |
mkdir /tmp/root mount -o bind / /tmp/root cp /tmp/root/* /mnt/usb -a umount /tmp/root rm -r /tmp/root |
接着在opkg.conf配置中增加dest usb /mnt/usb,之后就可以将我们需要的OpenVPN安装到USB中了:
代码如下 | 复制代码 |
vim /etc/opkg.conf opkg update opkg --dest usb install openvpn-openssl ln -s /mnt/usb/usr/lib/libssl.so.1.0.0 /usr/lib/ ln -s /mnt/usb/usr/lib/libcrypto.so.1.0.0 /usr/lib/ ln -s /mnt/usb/usr/lib/liblzo2.so.2 /usr/lib/ ln -s /mnt/usb/usr/sbin/openvpn /usr/sbin/ |
到此已经可以运行OpenVPN了:
openvpn --version由于OpenVPN安装在USB中,所以后续启动OpenVPN会遇到找不到tun模块的状况,接下来配置tun模块:
代码如下 | 复制代码 |
ln -s /mnt/usb/lib/modules/3.10.4/tun.ko /lib/modules/3.10.4/ ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules.d/ modinfo tun |
接着我们关闭防火墙并看一下默认的一些转发和NAT规则:
代码如下 | 复制代码 |
/etc/init.d/firewall stop /etc/init.d/firewall disable iptables -L -n --line-number iptables -t nat -vnL POSTROUTING --line-number |
可以看到此时默认是没有任何转发规则的,因此此时连接到路由器的设备是无法上网的,配置路由每次上电重启时候自动加载tun模块并加入转发规则:
vim /etc/rc.local修改如下配置:
代码如下 | 复制代码 |
insmod tun iptables -I FORWARD -o tun0 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables-save |
exit 0
到此为止你的路由器已经可以再次正常接入互联网了,下面我们需要配置OpenVPN并进行流量的智能分发,即配置哪些流量走VPN。
首先我们先来配置OpenVPN,这包含两方面的配置,服务端和客户端。
服务端
代码如下 | 复制代码 |
wget http://ipxcore.com/openvpn-debian-install.sh chmod +x openvpn-debian-install.sh ./openvpn-debian-install.sh iptables -I INPUT -p udp --dport 1194 -j ACCEPT iptables -I INPUT -p tcp --dport 1194 -j ACCEPT iptables -I INPUT -p udp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables-save |
客户端
客户端需要配置在服务端生成的证书路径,首先从服务器下载打包的证书文件:
代码如下 | 复制代码 |
scp root@100.100.100.100:/root/keys.tgz ./ tar -zxvf keys.tgz vim 703n.ovpn 703n.ovpn |
配置如下:
代码如下 | 复制代码 |
client remote 100.100.100.100 1194 dev tun comp-lzo ca /root/etc/openvpn/easy-rsa/2.0/keys/ca.crt cert /root/etc/openvpn/easy-rsa/2.0/keys/client1.crt key /root/etc/openvpn/easy-rsa/2.0/keys/client1.key route-delay 2 route-method exe max-routes 3888 redirect-gateway def1 verb 3 |
到此为止,通过当前的配置文件已经可以启动OpenVPN并实现所有流量经过VPN转发了:
openvpn --config ./703n.ovpn为了实现流量的智能分发,同时也是为了节省VPN的流量,可以通过ChnRoutes实现,在Mac上下载ChnRoutes并执行:
python chnroutes.py -p android会生成两个文件vpnup.sh和vpndown.sh,将这两个文件头部的alias删除,并下载到路由器中之后,在配置文件底部增加如下设置:
代码如下 | 复制代码 |
script-security 2 up vpnup.sh down vpndown.sh |
好了,这时候再次启动OpenVPN,在Mac上分别traceroute下Baidu和Twitter就会发现,流量已经自动分发了。