March 23rd, 2011

对ssh和vpn代理服务进行二次中转的探讨

  现有北京和美国VPS各一个分别为VPS_BJ和VPS_CA,流量和配置都比较给力,xen虚拟化,从我所在的客户端直接访问北京VPS非常极速,但访问美国VPS有点偏卡,主要原因是我客户端所在的接入网不给力。另一方面,国内最近对https盯的很严,特别是对翻墙小白来说,访问Gmail等服务有点困难。人家方sir有6个vpn,俺不能比,俺只能把手头有限的几个服务发挥到极致。

  想法一:能通过53端口的OpenVPN蹭网,并且能蹭上后让翻墙小白无障碍访问Gmail等服务。做法是在VPS_BJ上搭建53端口的OpenVPN实现蹭网。然后在此VPS_BJ上另跑一个ssh -D进程连接到VPS_CA,实现动态端口转发,从而在VPS_BJ上创建了一个Socks5代理。客户端只要通过此OpenVPN蹭上网后,然后设置代理为VPS_BJ上创建的代理端口即可无障碍访问Gmail等服务。

 image

  其中VPS_BJ上的ssh进程参数是

1
ssh –CND 10.0.0.1:23 username@vps_ca

  这里有几点是需要注意的:首先,bind_address一定要写成VPN内网IP,这样Socks5代理就只在内网中有效,保证了这个代理只有连上OpenVPN后才能使用,极有效的防止了滥用。其次端口最好绑定一个1000以内的常见但不用的端口,如23 telnet,原因你懂的,不过绑定1024以内的端口需要root权限,谨慎操作。最后,为了防止这个ssh连接死掉或者网络故障挂掉,非常有必要结合inittab中的respawn或者自己写expect脚本实现ssh的自动重连,本文在此不做讨论。

  想法二:我从客户端直接ssh -D连接到VPS_CA有点卡,经常掉线很郁闷。希望VPS_BJ能在中间起个中转的作用,看似绕了一个弯,但实际上速度却更快。实现方法也非常简单明了,直接在VPS_BJ上起一个ssh -L的本地端口转发进程即可,千万不要忘了-g参数,以在所有的interfaces上监听被转发的端口:

1
ssh -g -L 7001:vps_ca:22 username@vps_ca

  之后从PC照旧ssh -D连接VPS_BJ的被转发端口即可。

image

  上述解决方案从VPS_CA通过ssh -R反向连回来也行,如下操作:

1
ssh –R *:7001:localhost:22 username@vps_bj

  需要注意的是,因为ssh -R也是默认只监听lookback这个网口的,需要修改VPS_BJ的sshd_config打开GatewayPorts,同时bind_address参数要写成*才行。

image

  显而易见,从复杂性上,反向远程端口转发不如正向的本地端口转发的方案。另外,上述两个方案也同样需要有对ssh连接进行断线或定时自动重连的考虑。

Tags: , , , , , ,

December 2nd, 2010

利用53端口的OpenVPN蹭网

      验证53端口是否开放有个最简单的办法,直接nslookup几个域名,看返回结果。如果能正确返回的话则说明53端口是开放的。

      只要主机/VPS支持,搭建OpenVPN的过程其实非常简单,Linode的这篇搭建OpenVPN的知识库教程写的太好了,不差于网上许多牛人的Blog,更别说那些转发来转发去不标注出处的抄袭了。

  1. 安装OpenVPN
  2. 生成各种密钥
  3. 配置服务器和客户端的configure文件
  4. 修改IPv4流的转发和配置iptables
  5. 建立连接,查log监控

      感谢中国移动、中国联通、中国电信,感谢那些提供通过Web验证来计费上网的宿舍。ISP们,乃们颤抖了吧。

Tags: , , ,