上次用一个简单的模型向大家描述了×××通讯的原理。IPSEC通过包封装包的方法,通过Internet建立了一个通讯的隧道,通过这个通讯的隧道,就可以建立起网络的连接。但是这个模型并非完美,仍然有很多问题需要解决。

在讲述其他问题以前,我们对×××定义几个概念。

×××节点:一个×××节点,可能是一台×××网关,也可能是一个客户端软件。在×××组网中间,属于组网的一个通讯节点。它应该能够连接 Internet,有可能是直接连接,比如adsl、电话拨号等等,也可能是通过nat方式,例如:小区宽带、cdma上网、铁通线路等等。

×××隧道:在两个vpn节点之间建立的一个虚拟链路通道。两个设备内部的网络,能够通过这个虚拟的数据链路到达对方。与此相关的信息是当时两个×××节点的IP地址,隧道名称、双方的密钥。

隧道路由:一个设备可能和很多设备建立隧道,那么就存在一个隧道选择的问题,即到什么目的地,走哪一个隧道?

用前面的通讯模型来说,老李老张就是隧道节点,他们通过邮政系统建立的密码通讯关系,就是一个数据隧道,小张和小李把信发给他们老爸的时候,他们老爸要作出抉择,这封信怎么封装,封装以后送给谁。假如还有一个老王和他们的儿子,也要通讯,这时候隧道路由就比较好理解了。送给小王的数据,就封装给老王,送给小李的数据,就封装发给老李。如果节点非常多,那么这个隧道路由就会比较复杂。

理解了以上的问题,我们就知道,ipsec要解决的问题其实,可以分为以下几个步骤:
&O1548; 找到对方vpn节点设备,如果对方是动态IP地址,那么必须能够通过一种有效途径能够及时发现对方IP地址的变化。按照通讯模型,就是老李老张如果经常搬家的话,必须有一个有效的机制,能够及时发现老李老张地址的变化。
&O1548;建立隧道,建立隧道说起来简单,作起来不容易。如果两个设备都有合法的公网IP,那么建立一个隧道是比较容易的。如果一方在nat之后,那就比较罗嗦了。一般通过内部的vpn节点发起一个udp连接,再封装一次ipsec,送到对方,因为udp可以通过防火墙进行记忆,因此通过udp再封装的ipsec 包,可以通过防火墙来回传递。
&O1548; 建立隧道以后,就确定隧道路由,即到哪里去,走哪个隧道。很多×××隧道配置的时候,就定义了保护网络,这样,隧道路由就根据保护的网络关系来决定。但是这丧失了一定的灵活性。

所有的ipsec ×××展开来讲,实现的无非就是以上几个要点,具体各家公司,各有各的做法。但是可以肯定,目前在市场销售的×××,肯定都已经解决了以上的问题。

第一个问题 怎样找到vpn节点设备。

假如设备都是动态拨号方式的话,那么一定需要一个合适的静态的第三方来进行解析。相当于两个总是不停搬家的人,要合适找到对方,一定需要一个大家都认识的朋友,这个朋友不搬家,两个人都能够联系上他。

静态的第三方,常见的有3种实现方式:

通过网页,这是深信服公司发明的一种技术,通过Web页解析ip地址。大家可以登录一下[url]http://www.123cha.com/[/url] ,就可以查找到当前的IP地址。因此,动态的设备,可以通过这种方式,把自己当前的IP地址提交上去。其他设备可以通过网页再查询回来。这样,设备之间就可以互相通过这个网页找到。因为网页是相对固定的,所以这种方式能够很有效地解决这个问题。这种方式能够有效地分散集中认证的风险,而且很容易实现备份,属于比较巧妙的一种解决方案。当然,对于Web页可能存在比较多的攻击,因此,要注意安全防范。

通过一个集中的服务器,实现统一解析,然后给用户进行分组。每个vpn设备只能看到同组的其他设备,不能跨组访问。也可以通过目录服务器实现。这种方式适合集中式的×××,在企业总部部署服务器,实现全局设备的统一认证和管理。它不太适合零散用户的认证,因为存在一个信任问题,客户会置疑管理服务器如果出现了问题,有可能其他设备就能够连接到自己的vpn域里面。这种大型的集中vpn管理软件,在很多国内外的vpn厂商都有专门的设备或软件,它除了能够进行动态IP地址解析,还能够实现在线认证等等功能。如果管理中心比较职能的话,可以集中制订通讯策略,下面的vpn设备配置参数比较少。

还有一种方式,是DDNS,即动态域名。动态域名是一种相对比较平衡的技术。Vpn设备拨号以后,把自己当前的IP地址注册给一级域名服务器,并且更新自己的二级域名IP地址,internet其他用户,通过这个二级域名就可以查找到它。例如:动态域名服务器的名称是99ip.net,是abc. 99ip.net,则vpn设备通过一个软件,提交给服务器,把abc.99ip.net,漂移成当前的IP地址。但是,有时也会遇到dns缓存问题。 Vpn厂家如果自身提供ddns服务的话,就可以通过内部协议,把查询速度加快,并且避免dns缓冲带来的问题。

以上讲述了三种动态IP地址的解析方法,国内一般厂家提供的无外乎这几种方法。如果再有比较偏门的技术,也许就不是主流技术了。

解决了动态IP地址问题,按照之前的通讯模型,不考虑×××设备很多的情况,就可以组网。因此,一旦这种技术被越来越多的厂家掌握,基于IPsec vpn设备和软件是一定会价格下降的。It技术从朝阳变成夕阳就是转眼之间的事情。

第二个问题 隧道如何建立
解决了Ip地址动态寻址的问题,现在来说一下Nat穿越的问题。我们知道,Udp和TCP是可以穿越防火墙的。直接的IPsec封装,不能穿越防火墙,因为防火墙需要更改端口信息,这样回来的数据包,才能转到正确的内部主机。用UDP显然比较合适,因为使用tcp的话,不仅三次握手占据时间很长,而且还有来回的确认。而实际上,这些工作属于ipsec内部封装的报文要干的事情,放在这里完成是不合适的。因此,用udp来封装ipsec报文,以穿越nat,几乎是唯一可以选择的方案。

用udp穿越nat防火墙,这只解决了问题的一半,因为这要求至少有一方处于Internet公网上面。有可路由的IP地址。而有时会发生两个vpn节点都在nat之后的情景,这只能通过第三方转发来完成。即两个设备都可以与第三方设备互通,第三方设备为双方进行转发。这个可以通过之前的模型解析,老张老李不能直接通讯,他们都可以与老王通讯,老王就可以在中间进行转发。凡是小李小张的通讯,交给他们老爸以后,老王最后再进行转交。这是隧道路由的概念就很清晰了,不能一个隧道直接到达,可以在几个隧道之间转发。

所以,IPsec vpn并不神秘。所有核心的工作无非就是围绕以下几个方面展开:
&O1548; 如何找到与本×××节点相关的其他节点。
&O1548; 协商出一个可以通讯的隧道。如果是nat之后,应该怎么处理。
&O1548; 建立隧道路由表,确定不同的目标地址,走不同的隧道。

假定以上的问题都得到了解决,通过某种方式,动态IP地址的×××节点可以相互找到对方,并且能够建立隧道,因此也能够实现隧道路由通讯。是不是一个完整的×××就能够实现了呢??

答案仍然是否,解决了以上问题,并不代表一个很好用的×××产品,仍然有其他很多问题。之后的问题是围绕着复杂性展开的,简单的原理实现之后,剩下的工作就是要解决掉全部相关的边缘问题。才能够实现一个好用的东西。能够用是一回事,好用是另外一回事。