实战:不需公网IP架设OpenVPN网络(上)

日期: 2008-07-27 作者:Du XiaoGang 来源:TechTarget中国 英文

    OpenVPN实际上是在应用层做的传输,传输协议可以选择UDP/TCP,其中UDP更为常用,原因有专门文章论述。

    为何需要OpenVPN网络?

    如果我想在家里访问单位的网络资源,VPN是个不错的选择,但一般来说,架设VPN需要有VPN服务器,也就是说至少需要有一个真实IP,这个并不是谁个人都有的. 但别忘了OpenVPN支持UDP传输,在BT大行其道的今天,UDP很多时候就是NAT穿透的代名词,那么,OpenVPN能不能也使用这种模式呢? 如果能,那将会解决不少问题,设想:

    1.我是一个学生,我在写论文,但我目前不在学校,因而不能下载学校论文数据库的资料,老让同学下也不是办法,而且不方便,这样我可以考虑在学校任意电脑上开一个OpenVPN软件,然后让它穿越NAT对外提供服务,这样我就可以在校外网络上和学校里一样使用.

    2.我是一个上班族,我想在家里做一些要在单位网络里才能完成的事情,但单位没有VPN或者有VPN但我没帐号,我可以在单位的工作机上放个OpenVPN然后回家接入再用,呵呵.

    听起来不错,但如何实现呢? 这里我先说明一些技术前提: 你应该知道平常怎么配置OpenVPN,即有真实IP时候怎么配置,如果不了解,上GOOGLE搜索吧,文章很多.

    处于防火墙或者NAT设备后面的主机想要对外提供服务,比如和其他同样处于不通网络NAT设备之后的主机通信,可以使用UDP打洞技术,这个细节网上也有很多文章讲,可以参考http://www.ppcn.net/n1306c2.aspx

    解决UDP穿越防火墙问题

    在能使用UDP成功打洞之前,要先解决以下几个问题:

    1.确认通信双方所处NAT的类型,NAT可以大致的分成两类: 锥形NAT和对称NAT(关于NAT的详细分类可以参考RFC3489第5节,那里分了4类,前三类归为锥形NAT,第4类为对称NAT). 做UDP穿透的一般原则是,锥形NAT之间可以做UDP穿透,而对称NAT不能,事实上,当一端为锥形一段为对称也是有可能的,但这不能保证,主要看对称NAT有没有规律可循。

    如何确定自身的NAT类型呢? 可以利用STUN的客户端查看,软件可以从这里获取:

    Linux版: http://sourceforge.net/projects/stun/

    Java版(适用各种操作系统): http://jstun.javawi.de/

    这些软件很好使用,比如Linux版的stun,编译好后运行 ./client stun01.sipphone.com 即可。Java版则直接双击jar文件执行,它会将结果记录在同目录的log文件里. 你只需要确认通信双方都不是对称NAT即可. 如果双方均为对称NAT那本文所描述的方法没有希望了. 如果查类型失败,这可能的原因有两种:

    a.无法访问该STUN服务器,你可以试试后面STUN列表中的其他服务器,如果你是教育网用户且不能访问国外流量,那么暂时没有办法用,因为还没有找到国内的开放STUN服务器。

    b.你所在网络的防火墙把UDP禁了,这种情况我见过,很变态,没有任何办法。

    确认了两端NAT类型都不是对称NAT则继续往下看,否则希望不大,但也还有机会。

    2.通信建立前需要通信双方告知对方自己经NAT设备转换后的IP/PORT,IP/PORT也可以通过STUN服务器得到,公网上有不少这种免费STUN服务,只是国内的很少见。

    前两个问题归结一下,其实就是如何找到免费的STUN服务器,下面的列表是我试过能用的,但都在国外,这对教育网用户不是个好消息,国内的还在寻找中,也希望有人能提供线索。

    stun01.sipphone.com
    stun.ekiga.net
    stun.fwdnet.net
    stun.ideasip.com
    stun.iptel.org
    stun.rixtelecom.se
    stun.schlund.de
    stunserver.org
    stun.softjoys.com
    stun.voiparound.com
    stun.voipbuster.com
    stun.voipstunt.com
    stun.voxgratia.org
    stun.xten.com

    3.现在已经能知道自己经NAT映射后的真实地址了,但如何才能告诉对方呢,目前广泛使用的BT应用中实际上都有一个中介服务器,但我们不会有,否则的话我直接就拿它做VPN服务器了。

    解决这个问题有点麻烦,在我的这个例子里是用的GMail做交互,客户端注册一个GMail帐号,服务端注册一个GMail帐号,这样就有了一个速度很慢的管道,但至少能完成通信了,流程也就可以通了。

    到了这里,能查自己的IP/PORT,有通信两端交互的管道,剩下的问题就是定一个简单的协议把这些真正的跑起来。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Du XiaoGang
Du XiaoGang

暂无

相关推荐