标题：dvpn
DVPN 简介
6.1.1 概述
6.1.2 dvpn 基本概念介绍  1. dvpn 域
所有通过dvpn 实现互连的私有网络以及网络中的防火墙、路由器设备共同构成dvpn 域。
2. dvpn 接入设备
在网络中用来构建dvpn 动态虚拟私有网络的防火墙、路由器设备，所有支持dvpn特性的防火墙、路由器都可以作为dvpn 接入设备。
3. server 设备
dvpn 域中，承担server 功能的dvpn 接入设备。所有的其他dvpn 接入设备必须在server 上进行注册后才能接入dvpn 域中。
4. client 设备
dvpn 域中作为client 的dvpn 接入设备。client 设备必须在指定的server 设备上完成注册才能接入dvpn 域。
5. dvpn id
一个dvpn 域的唯一标识。在同一台dvpn 接入设备上，不同的dvpn 域的id 不同。
6. map
client 设备在server 设备上进行注册时，在client 和server 之间将建立一个注册通道，称为map。map 在client 设备完成注册后仍然存在，直到client 设备退出dvpn域或退出网络。
7. session
dvpn 网络数据通讯隧道。所有的数据报文都通过会话隧道进行传递。在dvpn 域中的两个接入设备之间可以建立一个session，实现私有网络的直接互联。
8. redirect
报文重定向机制。当两个client 之间还没有建立session 时，他们的数据通讯需要通过server 进行转发。server 在转发时将判断这两个client 之间是否可以建立独立的session，如果可以，server 将发送重定向报文给发起数据通信的源client，重定向报文中包含了目的client 的信息。
9. 主动端和被动端
session 会话中，session 两端会协商确定一个主动端和一个被动端，client 和server之间的session 会话，client 端为session 的主动端，server 为session 的被动端；client 之间的session 会话，发起会话建立请求的client 为主动端，另一个为session的被动端。
6.1.3 基本工作原理
dvpn 在各个接入设备之间运行dvpn 私有协议，server 设备记录着所有已经注册成功的client 的信息，client 设备记录所有已经建立数据通道的session 信息。表项内容包括：目标设备的私网地址（tunnel 接口地址），目标设备的公网地址（wan接口的公网ip 地址），目标设备的udp 端口号（采用udp 协议时），还有会话通路状态标识等。下面对server 与client 之间的交互过程作以简单说明：
1. 注册阶段
当client 端配置好接口属性，指定了server 地址，并且接口状态up 后，将向server端发起注册协商，注册协商过程要完成算法协商、密钥协商、身份验证（可选）、信息注册、策略的发布等。
注册协商过程，client 设备和server 设备之间会创建一个map，所有的注册协商通过map 完成。在整个client 生命周期中，client 和server 各自存在一个对应的map。只有client 退出dvpn 域，map 才会被删除。如果client 端删除注册使用的map，client 会释放所有的资源（包括所有的session 通道），回到初始化状态。
具体的注册过程可以参见右上方面的流程图，在注册过程中如果出现错误，注册过程会停止，并且返回到初始状态。
(1) client 向server 发送算法协商请求消息；
(2) server 向client 发送算法协商回应报文；
(3) client 向server 发送密钥协商的请求消息和对server 的认证请求消息；
(4) server 向client 发送密钥协商的回应消息和对client 的认证消息，以及回应client 的认证请求消息；
(5) client 向server 发送自己的身份认证消息；
(6) server 向client 发送身份认证的结果信息；
(7) client 向server 发送注册请求信息，主要包含client 的所有信息；
(8) server 回应client 的注册请求信息，主要包含所有的数据加密策略，密钥信息，以及vpn id 信息等。
2. 会话建立阶段
client 注册成功后，会立即和server 建立会话session，通过会话完成实际数据的dvpn 转发。
若server 端接收到的目的地址并非发往本地私网地址的数据报文，而是发往vpn网络中的另一个节点的报文，则server 转发该数据报文，同时向该数据报文的源节点发送下一跳重定向通告（redirect），通知源client 所要到达目的地之的下一跳的相关信息。此时收到重定向报文的client 立即向对端client 发送会话建立请求，经过会话协商，在两个client 之间建立独立的session 会话通道（同时协商该session 的ipsec sa）。这两个client 之间的数据可以直接通过该session 会话通道进行数据转发，而不需要通过server 进行转发了。
当删除session 时，会判断该session 是否为注册map 创建的session，如果没有对应的map 则直接删除session，否则需要删除session 对应的map。
6.1.4 基本网络结构
dvpn 采用client/server 模式，对于同一个dvpn 域的n 个接入设备中，必须设置一个为server 工作方式（使用固定的公网ip 地址），其他设置为client 方式，并在每一个client 端手工配置server 的信息。当每个client 到server 注册成功之后，client 和server 之间就自动地建立了session 隧道（会话）。在网络运行中，server 可以根据需要向client 发送redirect（重定向）报文。client 在接收到重定向报文后，从中得到其他client 的信息，在client 之间建立session 隧道，实现dvpn域中的全连接。
建立隧道的方式采用udp dvpn 封装格式，对dvpn 控制报文、需要转发的数据报文，使用udp 进行封装。所以udp dvpn 可以自由地穿过nat 网关建立dvpn隧道，满足client 为私有ip 地址时的需求。
6.1.5 传统vpn 与dvpn 的比较
1. 传统vpn 存在的弊端
在现有的vpn 组网方案中，三层vpn（virtual private network）一般采用gre或mpls/bgp vpn 两种方式。两种vpn 虽然存在各自的优点，但是在实际的应用中都存在以下弊端：
组网及配置复杂。三层vpn 技术都采用的是点到点的隧道方案，当接入点数量为n，且需要建立一个全联通的vpn 网络时，整个网络需要手工配置n×(n－1) / 2 个点到点的vpn 隧道连接。
可维护性及可扩展性差。对于一个已经组建好的vpn 网络，若需要增加节点或修改某个节点的配置，那么其他所有节点都必须针对这个节点修改本地配置，维护成本较高。
gre 还存在无法穿透nat 网关的缺陷。gre 方式建立vpn 隧道，如果出口有napt 网关，那么就必须要一个公网地址直接对应一个内部地址来解决，需要大量的公网ip 地址，这导致了gre 不能够应用于nat 网关内部。ipsec构建的vpn 在原来的版本也是没有办法穿越nat 网关，目前通过将ipsec报文封装在udp 报文中进行发送，实现了nat 网关的穿越。
gre 无法适用于动态ip 的情况。gre 方式建立vpn 隧道依赖于固定的ip 地址，根本无法为拨号用户建立vpn。
l2tp 和gre 没有能够提供对传输的数据的加密保护，ipsec 对通过ipsec vpn 进行转发的数据提供了最安全的保护。
ipsec 在动态路由的支持存在一定的缺陷，ipsec 的vpn 隧道是基于数据流的，而不像gre 和l2tp 基于接口建立vpn。在实现两个私有网络互联以后，两个私有网络之间没有办法实现路由的学习，这样给网络的动态规划带来了一定的问题。
2. dvpn 的特点
dvpn 不但继承了传统vpn 的各种优点，更大程度上解决了传统vpn 目前还没有解决的问题。配置简单、网络规划简单、功能强大，比传统的vpn 更加符合目前以及未来的网络应用。其特点如下：
配置简单。一个dvpn 接入设备可以通过一个tunnel 逻辑接口和多个dvpn接入设备建立会话通道，而不用为每一个通道配置一个逻辑的接口作为隧道的端点，大大的简化了配置的复杂度，提高了网络的可维护性和易扩充性。如果需要在已有的dvpn 域中加入一个新的私有网络，只需要在dvpn 的client接入设备上配置需要加入的dvpn 域的server 信息，新的dvpn client 就可以成功的添加到dvpn 域中。
自由穿越nat 网关技术。采用udp 方式的dvpn。由于使用了udp 报文进行封装，可以自由穿越nat 网关。解决内网dvpn 接入设备和公网dvpn 接入设备之间的vpn 连接，使nat 网关内部的私有网络和nat 网关外部的私有网络共同构建一个虚拟私有网络。
支持依赖动态ip 地址构建vpn。当在一个dvpn 域内部构建隧道时，只需要指定相应的server 的ip 地址，并不关心自己当前使用的ip 地址是多少，更加适应如普通拨号、xdsl 拨号等使用动态ip 地址的组网应用。
支持自动建立隧道技术。dvpn 中的server 维护着一个dvpn 域中所有接入设备的信息，dvpn 域中的client 可以通过server 的重定向功能自动获得需要进行通信的其它client 的信息，并最终在两个client 之间自动建立会话隧道（session）。作为client 的dvpn接入设备只需配置自己的相关信息和server的信息，不需要知道其他client 的信息，极大地减少了网络的维护管理工作。
注册过程加密技术。在client 向server 进行注册的过程中，需要先完成算法套件以及各种密钥的协商。使用协商出来的算法对注册过程中的关键信息（例如用户名、密码等）进行加密保护，还可以对注册的报文进行合法性检测，保证关键注册信息的安全性。
身份认证技术。在client 向server 进行注册的过程中，client 可以根据配置需要对server 的身份使用pre-shared-key 进行验证，保证client 接入一个合法的server；同时server可以根据需要使用aaa对需要接入到dvpn域的client进行身份验证，保证只有通过身份验证的client 才可以接入到dvpn 域。
策略的统一管理技术。client 在server 端注册成功后，server 会将dvpn 域中的策略发布给该client。策略主要包括会话协商使用的算法套件、会话的保活时间、会话的空闲超时时间、ipsec 使用的加密验证算法、ipsec sa 的重协商时间等。在整个dvpn 域中，所有的session 会使用相同的策略。
会话协商过程中的加密技术。在session 协商过程中，所有的会话的控制报文都会使用server 发布的算法套件进行ipsec 加密保护。即在建立session 的会话协商过程中，根据server 发布数据的加密验证算法，为session 的数据通信协商ipsec sa。协商过程使用dh（diffie-hellman）进行sa 的密钥协商。对于需要通过该session 进行转发的数据，如果需要加密处理，则通过ipsec 使用session 协商出来的ipsec sa 对报文进行加密处理后，通过dvpn进行转发，实现了转发数据报文的安全性。session 的ipsec sa 支持重协商功能，可以根据需要指定进行ipsec sa 重协商的时间，进一步保证数据的安全性。
支持多个vpn 域。dvpn 允许用户在一台dvpn 设备上支持多个vpn 域。即一台防火墙不仅可以属于vpn a，也可以属于vpn b；同一设备可以在vpna 中作为client 设备，同时还在vpn b 中作为server 设备使用。在同一台dvpn 设备上最多可以支持200 个dvpn 域，可以同时作为200 个dvpn 域的server 设备。大大提高了组网的灵活性，也可以更加充分的使用网络设备资源，减少了用户的投资。在实际的组网中为了保证各个dvpn 域之间的隔离，如果在同一台dvpn 设备上支持多个dvpn 域，需要通过私网路由来实现不同dvpn 域的隔离。
动态路由的支持。dvpn 可以对需要通过tunnel 接口发送的路由报文，通过所有的session 会话进行广播，从而实现整个dvpn 域内的路由自动学习。实际应用中，dvpn 配合动态路由协议，可以简化对需要接入到dvpn 域的各个私有网络的规划，简化整个网络的配置，提高网络的维护性和自动化。