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