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连接进行断线或定时自动重连的考虑。

Related Posts:

Tags: , , , , , ,

  1. March 26th, 2011 at 14:22 | #1

    翻墙不易啊
    不过你这算个特殊需求,一般人跳一次就够了

  2. March 26th, 2011 at 22:14 | #2

    @yaker 恩,实验室屋子里30多个人用2M的ADSL,直连老是掉线,实在被逼的没辙了

  3. March 31st, 2011 at 21:54 | #3

    非专业人士给专业人士顶一个

  4. April 15th, 2011 at 13:51 | #4

    看来博主是一位北邮的高材生啊!

  5. May 10th, 2011 at 22:02 | #5

    很给力啊

  6. woodlgz
    July 6th, 2011 at 19:44 | #6

    日光博客 :
    看来博主是一位北邮的高材生啊!

    博主牛人。看博客学习了很多

  7. October 12th, 2011 at 18:18 | #7

    嗯~进来学习一下~

  8. October 14th, 2011 at 06:32 | #8

    好厉害啊

  9. October 26th, 2011 at 12:46 | #9

    博客写得很好,长见识了

  10. March 27th, 2012 at 12:09 | #10

    这方面的研究非常有必要

  11. April 7th, 2014 at 18:26 | #11

    受教了。

  1. No trackbacks yet.