解决最近GFW升级导致VPN失效问题

2013/02/05

最近,公司的VPN总是掉线,后来才看到,方校长的研究文章。「网络流量分类研究进展与展望 」。通过机器学习的方法封锁翻墙了。SSH隧道、IPSEC隧道、SSL, 以及P2P均被破解。无论如何换端口或者ip,只要流量稍大一点,就立刻掉线。
研究了几天后,终于找到对策:VPN通过SSH隧道映射穿越GFW。该方法可以绕过企业级的防火墙,同样,绕过GFW似乎也非常好使。下面简单说说配置的过程。
基本原理: 客户端 –> 本地映射端口 <-- SSH隧道 --> 远程VPN服务器

前期准备

1、可以翻墙的SSH账户(最好和VPN在一台主机上)
2、可以翻墙的VPN账户(openVPN、pptp 等)

配置方法

1、本地设置端口转发的脚本并运行
#! /usr/bin/env python
#coding=utf-8

import pexpect
import re
local_port = "本地转发端口"   #pptp默认是1723 openVPN默认是1194
username = "ssh用户名"     
password = "ssh密码"              
ssh_host = "ssh的地址"
vpn_host = "vpn的地址"     #如果ssh和vpn是一台机子,这里可以是127.0.0.1
vpn_port = "vpn端口"
cmd = "ssh  -C -f -N -g -o CompressionLevel=9 -o Cipher=none "
cmd += username + "@" + ssh_host + " -L "
cmd += local_port +":"+ vpn_host + ":" + vpn_port
pattern = re.compile("^.*assword:\s*")
child = pexpect.spawn(cmd)
child.expect(pattern)
child.sendline(password)
child.expect(pexpect.EOF)
2、设置VPN的地址和端口到本地映射地址
按照上面脚本,如果是openVPN,那么连接的地址应该是127.0.0.1:1194。
3、特别注意
由于SSH端口转发不支持UDP,所以openVPN要把连接方式改成TCP的才能顺利连接。 上面是简单的介绍,如果还有疑问可以在微博私信我。

Related Posts