标题：IPsec VPN
概述
IPSEC是一套比较完整成体系的VPN技术，它规定了一系列的协议标准。如果不深入探究IPSEC的过于详细的内容，我们对于IPSEC大致按照以下几个方面理解。 
VPN国家标准：
标准制定单位：华为技术有限公司、中兴、深信服科技有限公司、无锡江南信息安全工程技术中心
为什么要导入IPSEC协议
导入IPSEC协议，原因有2个，一个是原来的TCP/IP体系中间，没有包括基于安全的设计，任何人，只要能够搭入线路，即可分析所有的通讯数据。IPSEC引进了完整的安全机制，包括加密、认证和数据防篡改功能。 
另外一个原因，是因为Internet迅速发展，接入越来越方便，很多客户希望能够利用这种上网的带宽，实现异地网络的的互连通。 
IPSEC协议通过包封装技术，能够利用Internet可路由的地址，封装内部网络的IP地址，实现异地网络的互通。
包封装协议
设想现实一种通讯方式。假定发信和收信需要有身份证（成年人才有），儿童没有身份证，不能发信收信。有2个儿童，小张和小李，他们的老爸是老张和老李。现在小张和小李要写信互通，怎么办？ 
一种合理的实现方式是：小张写好一封信，封皮写上 "小张-->小李", 然后给他爸爸，老张写一个信封，写上“老张-->老李”，把前面的那封信套在里面，发给老李，老李收到信以后，打开，发现这封信是给儿子的，就转给小李了。小李回信也一样，通过他父亲的名义发回给小张。 
这种通讯实现方式要依赖以下几个因素： 
* 老李和老张可以收信发信 
* 小张发信，把信件交给老张。 
* 老张收到儿子的来信以后，能够正确的处理（写好另外一个信封），并且重新包装过的信封能够正确送出去。 
* 另外一端，老李收到信拆开以后，能够正确地交给小李。 
* 反过来的流程一样。 
把信封的收发人改成Internet上的IP地址，把信件的内容改成IP的数据，这个模型就是IPsec的包封装模型。小张小李就是内部私网的IP主机，他们的老爸就是VPN网关，本来不能通讯的两个异地的局域网，通过出口处的IP地址封装，就可以实现局域网对局域网的通讯。 
引进这种包封装协议，实在是有点不得已。理想的组网方式，当然是全路由方式。任意节点之间可达（就像理想的现实通讯方式是任何人之间都可以直接写信互通一样）。 
Internet协议最初设计的时候，IP地址是32位，当时是很足够了，没有人能够预料到将来Internet能够发展到现在的规模（相同的例子发生在电信短消息上面，由于160字节的限制，很大地制约了短消息的发展）。按照2的32次方计算，理论上最多能够容纳40亿个左右IP地址。这些IP地址的利用是很不充分的，另外大约有70%左右的IP地址被美国分配掉了（谁让人家发明并且管理Internet呢？）所以对于中国来说，可供分配的IP地址资源非常有限。 
既然IP地址有限，又要实现异地lan-lan通讯，包封包，自然是最好的方式了。
安全协议（加密）
依然参照上述的通讯模型。 
假定老张给老李的信件要通过邮政系统传递，而中间途径有很多好事之徒，很想偷看小张和小李（小张小李作生意，通的是买卖信息）通讯，或者破坏其好事。 
解决这个问题，就要引进安全措施。安全可以让小李和小张自己来完成，文字用暗号来表示，也可以让他们的老爸代劳完成，写好信，交给老爸，告诉他传出去之前重新用暗号写一下。 
IPSEC协议的加密技术和这个方式是一样的，既然能够把数据封装，自然也可以把数据变换，只要到达目的地的时候，能够把数据恢复成原来的样子就可以了。这个加密工作在Internet出口的VPN网关上完成。
安全协议（数据认证）
还是以上述通讯模型为例，仅仅有加密是不够的。 
把数据加密，对应这个模型中间，是把信件的文字用暗号表示。 
好事之徒无法破解信件，但是可以伪造一封信，或者胡乱把信件改一通。这样，信件到达目的地以后，内容就面目全非了，而且收信一方不知道这封信是被修改过的。 
为了防止这种结果，就要引入数据防篡改机制。万一数据被非法修改，能够很快识别出来。这在现实通讯中间可以采用类似这样的算法，计算信件特征（比如统计这封信件的笔划、有多少字），然后把这些特征用暗号标识在信件后面。收信人会检验这个信件特征，由于信件改变，特征也会变。所以，如果修改人没有暗号，改了以后，数据特征值就不匹配了。收信人可以看出来。 
实际的IPSEC通讯的数据认证也是这样的，使用md5算法计算报文特征，报文还原以后，就会检查这个特征码，看看是否匹配。证明数据传输过程是否被篡改。
安全协议（身份认证）
还是假定小张小李通讯模型。 
由于老张和老李不在一个地方，他们互相不能见面，为了保证他们儿子通讯的安全。老张和老李必须要相互确认对方是否可信。这就是身份认证问题。 
假定老李老张以前见过面，他们事先就约定了通讯暗号，比如1234567890对应abcdefghij， 那么写个255，对应就是一个bee。 
常见的VPN身份认证可以包括预共享密钥，通讯双方实现约定加密解密的密码，直接通讯就可以了。能够通讯就是朋友，不能通讯就是坏人，区分很简单。 
其他复杂的身份认证机制包括证书（电子证书比如x509之类的），比较罗里啰嗦，这里就不具体展开了，怕有兄弟看了打瞌睡。如果需要，可以找我要更具体的技术白皮书以及相关的身份认证文档。 
如果有身份认证机制，密钥的经常更换就成为了可能。
其他
解决了上述的几个问题，基本可以保证VPN通讯模型能够建立起来了。 
但是并不完美，这是最简单的VPN。即通过对端两个静态的IP地址，实现异地网络的互联。美国的很多VPN设备就作到这一级，因为美国IP地址充裕，分配静态IP地址没有问题。苦的是我等中国客户，2端都需要静态IP地址，相当于2根Internet专线接入。 
VPN要在中国用起来，还要解决一堆的相关问题。。
IPSEC通过包封装包的方法通过Internet建立了一个通讯的隧道，通过这个通讯的隧道，就可以建立起网络的连接。但是这个模型并非完美，仍然有很多问题需要解决。 
在讲述其他问题以前，我们对VPN定义几个概念。
VPN节点一个VPN节点，可能是一台VPN网关，也可能是一个客户端软件。在VPN组网中间，属于组网的一个通讯节点。它应该能够连接 Internet，有可能是直接连接，比如adsl、电话拨号等等，也可能是通过nat方式，例如：小区宽带、cdma上网、铁通线路等等。 
VPN隧道：在两个vpn节点之间建立的一个虚拟链路通道。两个设备内部的网络，能够通过这个虚拟的数据链路到达对方。与此相关的信息是当时两个VPN节点的IP地址，隧道名称、双方的密钥。
隧道路由一个设备可能和很多设备建立隧道，那么就存在一个隧道选择的问题，即到什么目的地，走哪一个隧道？ 
用前面的通讯模型来说，老李老张就是隧道节点，他们通过邮政系统建立的密码通讯关系，就是一个数据隧道，小张和小李把信发给他们老爸的时候，他们老爸要作出抉择，这封信怎么封装，封装以后送给谁。假如还有一个老王和他们的儿子，也要通讯，这时候隧道路由就比较好理解了。送给小王的数据，就封装给老王，送给小李的数据，就封装发给老李。如果节点非常多，那么这个隧道路由就会比较复杂。 
理解了以上的问题，我们就知道，ipsec要解决的问题其实，可以分为以下几个步骤： 
找到对方vpn节点设备，如果对方是动态IP地址，那么必须能够通过一种有效途径能够及时发现对方IP地址的变化。按照通讯模型，就是老李老张如果经常搬家的话，必须有一个有效的机制，能够及时发现老李老张地址的变化。
建立隧道建立隧道说起来简单，作起来不容易。如果两个设备都有合法的公网IP，那么建立一个隧道是比较容易的。如果一方在nat之后，那就比较啰嗦了。一般通过内部的vpn节点发起一个udp连接，再封装一次ipsec，送到对方，因为udp可以通过防火墙进行记忆，因此通过udp再封装的ipsec 包，可以通过防火墙来回传递。 
建立隧道以后，就确定隧道路由，即到哪里去，走哪个隧道。很多VPN隧道配置的时候，就定义了保护网络，这样，隧道路由就根据保护的网络关系来决定。但是这丧失了一定的灵活性。 
所有的ipsec VPN展开来讲，实现的无非就是以上几个要点，具体各家公司，各有各的做法。但是可以肯定，目前在市场销售的VPN，肯定都已经解决了以上的问题。
IPSEC VPN 的类型：