openvpn的http代理——只要我能正常访问网站,谁也不能阻止我用openvpn回家! 回首页
背景:
我家里有三个openvpn服务器,分别跑在:1.ros路由器、2.内网的linux、3.内网的NAS设备
目的:
突破一些情况下外网环境对openvpn的网络封锁——
1.当openvpn被外网环境中七层过滤和封杀的时候就连不回北京的家了,我在长沙的一个四星宾馆住着的时候就遇到这个问题,只能用pptp和l2tp连回家里。
2.一些办公环境下,只能通过http访问公网,要想连回家只能通过http协议代理了。
3.一些电信运营商的网络,openvpn、PPTP、L2TP协议都被限制流量了,但http协议未限制。
我需要建立一个随时随地都能用openvpn回家的http代理服务。
实施:
1.一个跑tcp协议的openvpn服务
我将原openvpn服务的配置复制了一份,将协议改为tcp,重新定义了一个网段,改了lock和pid文件路径,然后重做了一个启动/停止脚本。
启动后你看到两个openvpn服务在运行:
下面这两句基于我家的网络情况不做设置,这个VPN服务器不是网关,而是内网的一台虚机,网关上有个网桥,把eth0和eth1桥接了,网关上已经做了路由和NAT。
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 192.168.10.0/24 -o eth1 -j MASQUERADE
2.一个简单http代理服务器
http代理服务器我选择了polipo,源码编译安装后,在/etc/polipo/config下面配置这4行:
3.客户端
复制一份原openvpn客户端配置,配置下面3行:
remote 【tcp openvpn服务端本地地址】 【端口】
http-proxy 【http代理服务器地址】 【代理端口】 【代理服务器帐号密码.txt】
http-proxy-retry
密码文件里面帐号名和密码各占一行。
4.ADSL网关
设置相关端口转发到http代理服务器
全部配置完成!
--------------------------------------------------------------------------------
其它:
OpenVPN服务端日志出现:
Need IPv6 code in mroute_extract_addr_from_packet
解决:
if you want to patch the server: the file you're looking for is 'mroute.c' , around line 159 (for the 2.2.1 code base).
if you can control the clients: do not bind the TCP/IP v6 protocol to the tun or tap-win32 adapters and the message should not appear any longer.
在控制面板的网络和共享中心中打开OpenVPN使用的TAP-win32网卡,选择属性,去掉IPV6前的对勾即可。
调试网络的话。Windows7会自发建立一条IPV6隧道,通常我们用ipconfig /all就会看到很多条隧道
以管理员身份打开命令行,然后以下面3条命令把IPv6的接口关闭即可
netsh interface teredo set state disable
netsh interface 6to4 set state disabled
netsh interface isatap set state disabled
若想还原IPv6隧道则用以下命令:
netsh interface teredo set state default
netsh interface 6to4 set state default
netsh interface isatap set state default
openvpn文献:
http://openvpn.net/index.php/open-source/documentation/howto.html
http://wiki.contribs.org/OpenVPN_SiteToSite