
网络拓朴
1) 在NW300R上编辑openvpn client配置如下:
cat /etc/config/openvpn
config 'openvpn' 'client' option 'enable' '1' option 'client' '1' option 'dev' 'tun' option 'proto' 'udp' option 'keepalive' '10 120' option 'resolv_retry' 'infinite' option 'nobind' '1' option 'persist_key' '1' option 'persist_tun' '1' option 'comp_lzo' '1' option 'verb' '3' option 'tun_ipv6' '0' option 'remote' ' ' option 'ca' '/etc/openvpn/client.ca' option 'cert' '/etc/openvpn/client.cert' option 'key' '/etc/openvpn/client.key' option 'max-routes' '3000'
注意your_openvpn_port在服务器端最好设置成非缺省端口1194,因为这个端口在实际使用时由于GFW监控而不稳定。
openvpn相关的CA证书/etc/openvpn/client.ca等需要通过scp传上去。
2) /etc/init.d/openvpn start启动openvpn
3)可以输入route命令来校验(注意如下的路由表显示所有外网流量都将经过vpn服务器,这是因为在服务器端有设置push “redirect-gateway def1″)
root@OpenWrt2:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.1 255.255.255.255 UGH 0 0 0 br-lan 10.8.0.5 * 255.255.255.255 UH 0 0 0 tun0 10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0 192.168.1.0 * 255.255.255.0 U 0 0 0 br-lan default 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 default 192.168.1.1 0.0.0.0 UG 0 0 0 br-lan
或者通过ifconfig命令可以看到多了一个tun0接口
这时可以通过ping 10.8.0.1来确认openvpn已通
4) 修改NW300R的DNS服务器设置,确保DNS解析不被污染;否则DNS解析会走192.168.1.1而未经VPN保护
root@OpenWrt2:~# cat /etc/resolv.conf
search lan nameserver 127.0.0.1
root@OpenWrt2:~# cat /etc/config/dhcp
config 'dnsmasq' option 'domainneeded' '1' option 'boguspriv' '1' option 'localise_queries' '1' option 'rebind_protection' '1' option 'rebind_localhost' '1' option 'local' '/lan/' option 'domain' 'lan' option 'expandhosts' '1' option 'readethers' '1' option 'leasefile' '/tmp/dhcp.leases' option 'resolvfile' '/etc/openvpn/resolv.conf' config 'dhcp' 'lan' option 'interface' 'lan' option 'ignore' '1' config 'dhcp' 'wan' option 'interface' 'wan' option 'ignore' '1'
root@OpenWrt2:~# cat /etc/openvpn/resolv.conf
nameserver 8.8.8.8 nameserver 8.8.4.4
5) 设置智能路由
这里用到了chnroutes项目,点击下载openvpn版本,并找一台有python的机器执行生成最新的路由规则脚本然后上传到路由器。
该脚本会生成两个命令:vpnup, vpndown分别是启动和关闭openvpn时需要修改的路由规则(原理是把所有中国IP路由到192.168.1.1)。
执行vpnup命令后再用route命令列出路由表会发现多了2000多路由规则。。。
这时分别找一个中国和一个外国的IP来traceroute
root@OpenWrt2:~# traceroute tao123.com traceroute to tao123.com (121.14.24.241), 30 hops max, 38 byte packets 1 192.168.1.1 (192.168.1.1) 1.496 ms 1.322 ms 1.440 ms 2 61.130.120.156 (61.130.120.156) 2.910 ms 2.218 ms 3.183 ms 3 220.191.156.181 (220.191.156.181) 2.214 ms 2.136 ms 13.653 ms 4 61.164.19.205 (61.164.19.205) 5.299 ms 2.298 ms 2.576 ms 5 61.164.17.61 (61.164.17.61) 8.297 ms 7.966 ms 8.335 ms 6 202.97.56.241 (202.97.56.241) 24.566 ms^C root@OpenWrt2:~# traceroute facebook.com traceroute to facebook.com (69.63.189.11), 30 hops max, 38 byte packets 1 10.8.0.1 (10.8.0.1) 231.700 ms 210.645 ms 224.737 ms 2 184.105.143.85 (184.105.143.85) 239.952 ms 259.713 ms 266.340 ms 3 10gigabitethernet2-3.core1.fmt1.he.net (64.62.250.5) 273.158 ms 285.133 ms 285.376 ms 4 10gigabitethernet1-1.core1.pao1.he.net (66.160.158.242) 284.708 ms 277.205 ms 277.986 ms 5 paix.pr02.pao1.tfbnw.net (198.32.176.108) 275.467 ms 321.888 ms^C
可以注意到第一行走的路由正确了!
6) 设置iptable
iptables -I FORWARD -o br-lan -j ACCEPT #允许br-lan端口流量被转发
iptables -I FORWARD -o tun0 -j ACCEPT #允许tun0端口流量被转发
iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE #tun0出口的流量SNAT出去
7) 设置客户端
因为NW300R关掉了DHCP(如果开启NW300R就需要设一个不同的子网如:192.168.2.1,这样还需要特殊设置来使得两个子网的机器可以互相访问),所以使用DHCP连上的客户端的gateway和dns都是192.168.1.1,这样是不能自动翻墙的,需要要手工配一下需要自动翻墙的网络设备的gateway和dns都为192.168.1.2,当然如果你只有一个无线路由器,就没这个问题了。这个部分我还没找到有多个无线路由器时比较好的解决办法,还请高手指教一下。
My name is Hugo Zhu.



