HTML/JavaScript

2017年11月29日星期三

iPerf3使用简介

iPerf3使用简介

iPerf3使用简介

介绍

iperf3是用于测试网络中最大可使用带宽的工具,可以支持UDP、TCP、SCTP、IPv4、IPv6协议的各种参数,对于每个测试都会生成测试结果,包括带宽数值,丢包或其他的参数。iPerf最初由NLANR / DAST开发。iPerf3主要由ESnet / Lawrence Berkeley国家实验室开发。它是在三个条款的BSD许可下发布的。本文大部分内容均来自 https://iperf.fr/。若有侵权请告知,谢谢。lvpin333@gmail.com

iPerf3 –help

本文基于 iPerf 3.1.3 for windows 来完成

C:\Users\win7>iPerf3 --help
Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Server or Client:
  -p, --port      #         服务端侦听端口号配置,默认值为5201
  -f, --format    [kmgKMG]  生成格式时Bandwidth单位设置“-f K 、 -f M 、-f KB 、 -f MB ”
  -i, --interval  #         生成报告间隔时间,取值范围 0.01 ~ 60
  -F, --file name           xmit/recv the specified file
  -B, --bind      <host>    绑定到指定的interface
  -V, --verbose             详细输出
  -J, --json                以JSON格式进行输出
  --logfile f               将结果输出到文件中“--logfile lvpin.txt”
  -d, --debug               调试输出
  -v, --version             显示版本信息并退出
  -h, --help                显示帮助信息并退出
Server specific:
  -s, --server              运行在server模式
  -D, --daemon              运行server并作为守护进程
  -I, --pidfile file        写入PID文件
  -1, --one-off             处理1个客户端连接并退出“-1“
Client specific:
  -c, --client    <host>    运行客户端模式,并连接到 <host>
  -u, --udp                 使用UDP流量发送(默认是TCP)
  -b, --bandwidth #[KMG][/#] 目标带宽以 bits/sec为单位 (0 表示不限制),默认UDP使用1 Mbit/sec,默认TCP无限制,突发模式使用”/" 并配置数据包数量
  -t, --time      #         测试时间,以秒为单位,默认值是10秒
  -n, --bytes     #[KMG]    需要发送的字节数(bytes)(instead of -t)
  -k, --blockcount #[KMG]   需要发送数据包的数量(blocks)(instead of -t or -n)
  -l, --len       #[KMG]    读取和写入缓冲区的长度,默认值是TCP 128kb、UDP 8 kb
  --cport         <port>    bind to a specific client port (TCP and UDP, default: ephemeral port)
  -P, --parallel  #         并行客户端的数量“-P 2”
  -R, --reverse             反向接收模式(服务器发送,客户端接收)
  -w, --window    #[KMG]    设置windows size 大小
  -M, --set-mss   #         设置MMS大小
  -N, --no-delay            关闭Nagle's Algorithm
  -4, --version4            仅在IPv4模式下运行
  -6, --version6            仅在IPv6模式下运行
  -S, --tos N               设置IP head TOS值
  -Z, --zerocopy            use a 'zero copy' method of sending data
  -O, --omit N              忽略前 "N" 秒的数据信息(用于跳过TCP慢启动)
  -T, --title str           在每行输出前加上特定的字符串
  --get-server-output       从服务器上获得结果
  --udp-counters-64bit      use 64-bit counters in UDP test packets

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at: http://software.es.net/iperf/
Report bugs to:     https://github.com/esnet/iperf

iPerf3 示例

基础测试

Server:

C:\Users\lvpin>iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Client:

C:\Users\win7>iperf3 -c 10.24.50.11
Connecting to host 10.24.50.11, port 5201
[  4] local 10.24.50.12 port 63263 connected to 10.24.50.11 port 5201
[ ID] Interval           Transfer      Bandwidth
[  4] 0.00-1.00   sec    106 MBytes    890 Mbits/sec
[  4] 1.00-2.00   sec    99.6 MBytes   836 Mbits/sec
[  4] 2.00-3.00   sec    90.6 MBytes   760 Mbits/sec
[  4] 3.00-4.00   sec    88.2 MBytes   740 Mbits/sec
[  4] 4.00-5.00   sec    90.4 MBytes   758 Mbits/sec
[  4] 5.00-6.00   sec    90.0 MBytes   755 Mbits/sec
[  4] 6.00-7.00   sec    90.6 MBytes   760 Mbits/sec
[  4] 7.00-8.00   sec    90.1 MBytes   756 Mbits/sec
[  4] 8.00-9.00   sec    89.9 MBytes   754 Mbits/sec
[  4] 9.00-10.00  sec    90.2 MBytes   757 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer      Bandwidth
[  4] 0.00-10.00  sec    926 MBytes    777 Mbits/sec         sender
[  4] 0.00-10.00  sec    926 MBytes    777 Mbits/sec         receiver

iperf Done.

UDP发包测试

Server:

C:\Users\lvpin>iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Client:

C:\Users\win7>iperf3 -c 10.24.50.11 -u
Connecting to host 10.24.50.11, port 5201
[  4] local 10.24.50.12 port 51135 connected to 10.24.50.11 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec   296 KBytes  2.42 Mbits/sec  37
[  4]   1.00-2.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   2.00-3.01   sec   152 KBytes  1.24 Mbits/sec  19
[  4]   3.01-4.00   sec   160 KBytes  1.32 Mbits/sec  20
[  4]   4.00-5.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   5.00-6.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   6.00-7.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   7.00-8.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   8.00-9.00   sec   160 KBytes  1.31 Mbits/sec  20
[  4]   9.00-10.00  sec   160 KBytes  1.31 Mbits/sec  20
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  1.69 MBytes  1.42 Mbits/sec  0.032 ms  0/215 (0%)
[  4] Sent 215 datagrams

iperf Done.

IPv6测试

Server:

C:\Users\lvpin>iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Client:

C:\Users\win7>iperf3 -c 2123::22
Connecting to host 2123::22, port 5201
[  4] local 2123::1 port 64568 connected to 2123::22 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   111 MBytes   932 Mbits/sec
[  4]   1.00-2.00   sec   107 MBytes   899 Mbits/sec
[  4]   2.00-3.00   sec   100 MBytes   839 Mbits/sec
[  4]   3.00-4.00   sec  99.4 MBytes   834 Mbits/sec
[  4]   4.00-5.00   sec   100 MBytes   841 Mbits/sec
[  4]   5.00-6.00   sec   100 MBytes   841 Mbits/sec
[  4]   6.00-7.00   sec   100 MBytes   839 Mbits/sec
[  4]   7.00-8.00   sec   100 MBytes   843 Mbits/sec
[  4]   8.00-9.00   sec   100 MBytes   843 Mbits/sec
[  4]   9.00-10.00  sec   100 MBytes   840 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  1019 MBytes   855 Mbits/sec                  sender
[  4]   0.00-10.00  sec  1019 MBytes   855 Mbits/sec                  receiver

iperf Done.

TCP参数配置测试

Server:

C:\Users\lvpin>iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Client:
windows size:2048
mms :800
缓冲区大小:256
关闭Nagle’s算法

C:\Users\win7>iperf3 -c 10.24.50.11 -w 2048 -M 800  -N -l 256
Connecting to host 10.24.50.11, port 5201
[  4] local 10.24.50.12 port 64580 connected to 10.24.50.11 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  5.17 MBytes  43.3 Mbits/sec
[  4]   1.00-2.00   sec  4.97 MBytes  41.7 Mbits/sec
[  4]   2.00-3.00   sec  4.85 MBytes  40.7 Mbits/sec
[  4]   3.00-4.00   sec  4.63 MBytes  38.9 Mbits/sec
[  4]   4.00-5.00   sec  5.25 MBytes  44.1 Mbits/sec
[  4]   5.00-6.00   sec  5.24 MBytes  43.9 Mbits/sec
[  4]   6.00-7.00   sec  4.69 MBytes  39.3 Mbits/sec
[  4]   7.00-8.00   sec  4.82 MBytes  40.5 Mbits/sec
[  4]   8.00-9.00   sec  5.34 MBytes  44.8 Mbits/sec
[  4]   9.00-10.00  sec  5.00 MBytes  41.9 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  50.0 MBytes  41.9 Mbits/sec                  sender
[  4]   0.00-10.00  sec  50.0 MBytes  41.9 Mbits/sec                  receiver

iperf Done.

在Linux环境中模拟广域网延迟

Emulating wide area network delays with Linux

NetEm (already enabled in the Linux kernel) provides Network Emulation functionality for testing protocols by emulating the properties of wide area networks. 

To simulate an additional latency of 80 ms, just type sudo tc qdisc add dev eth0 root netem delay 80ms 
It just adds a fixed amount of delay to all packets going out of the local Ethernet. 

To stop the additional latency, just type sudo tc qdisc change dev eth0 root netem delay 0ms 

Lines to add to the file /etc/rc.local before exit 0, to add 40ms of latency :

    # Add +40ms latency
    tc qdisc add dev eth0 root netem delay 40ms

Note: If your network interface is not eth0, replace eth0 with the name of your network interface

参考文献

  1. https://iperf.fr

2017年9月6日星期三

【Cisco】【安全】【CCNA】SSL VPN简介

SSL VPN简介

SSL VPN简介

介绍

IPsec VPN和SSLVPN是互补的技术,可以同时使用也可以单独使用!通过浏览器天生拥有的SSL加密技术实现灵活,是低成本的互联网远程访问解决方案,SSL VPN通常情况下不需要预先安装任何客户端软件。

SSL VPN也被称为WebVPN,主要用于远程访问连接。远程访问通过安全套接层(Secure Socket Layer、SSL)来提供SSL VPN网关。

SSL VPN网关允许远程用户使用Web浏览器建立安全的虚拟专用网(VPN)隧道,SSL是一个运用程序加密技术,它提供了网页游览器,邮件,即时聊天和其它数据流安全的Internet通讯。
SSL最开始是由Netscape开发,并且在1996年改版,后来成为了IETF标准TLS的基础。虽然SSL和TLS在有些方面不同而且不能互相兼容,但是协议的架构基本是相同的。
两个协议主要的目标是提供数据的私密性和完整性,提供了运用程序安全的通讯,默认SSL工作端口TCP/443,SSL VPN功能允许从任意位置连接到公司,提供远程访问支持,从而安全的将企业网络访问权限扩展到任何授权的用户上。

SSLVPN的特性

  1. 不需要预先安装客户端软件
  2. 使用标准的网页游览器建立远程VPN连接
  3. 使用游览器拥有的SSL加密技术提供数据私密性
  4. 提供细致的访问控制
  5. 客户端运用程序可以通过多种方式动态的下载,例如:连接时在线下载,通过java,activex或者exe文件分发。
  6. 提供连接互联网的系统灵活的建立VPN连接,不管这个系统是否被公司管理
  7. 在任何地点都能轻松的穿越防火墙和网络
  8. 支持透明的无线漫游
  9. 可以使用集成的IOS防火墙提供增强的安全性

SSL VPN三种接入方式

SSL VPN应用程序的可访问性相对于IPsec VPN有一定的限制 SSL VPN的优势来自任意的互联网访问,提供无障碍的连接功能,几乎无需安装其他的桌面软件。

SSL VPN提供三种SSL VPN接入方式:无客户端(clientless),简单客户端(thin-client)和完整隧道客户端(full-tunnel client)支持。

enter image description here

无客户端模式(Clientless)

无客户端模式提供web只有的安全访问和访问基于web的的内容。无客户端模式提供对私有Web资源的安全访问(无客户端模式仅限于基于Web的内容),并提供对Web内容的访问。远程用户使用客户机上的Web浏览器访问内部或公司网络。
无客户端模式下支持以下应用程序:

· WEB浏览(HTTP、HTTPS)运行远程用户浏览网页。
· 文件共享(通过CIFS实现)在WEB页面提供文件服务器链接表项,运行用户进行相关操作浏览、创建、删除、下载、重命名等..
· 基于WEB的电子邮件,例如Microsoft Outlook Web Access

简单客户端模式(Thin-Client Mode)

简单客户端模式(也称为端口转发),简单客户端模式提供远程访问基于TCP的服务,如POP3,SMTP,IMAP,Telnet和SSH应用程序。 简单客户端模式通过Java小程序进行代理转发,该小程序在会话建立时从SSL VPN设备动态下载。 此模式扩展了Web浏览器的加密功能的功能

隧道模式(Tunnel mode)

厚客户端模式(第3层)(也称为隧道模式或全隧道客户端):隧道模式可远程访问广泛的应用程序支持,并通过下载SSL VPN Client(SVC)软件或Cisco AnyConnect 来自VPN服务器设备的VPN客户端软件。 此模式提供轻量级的集中配置且易于支持的SSL VPN隧道客户端,可为几乎任何应用程序提供完整的网络层(第3层)访问。

SSL Protocol

SSL是一个层次化的协议,每个层都有不同的功能。SSL protocol可以分为Record Layer(记录层)、Handshake Protocol(握手协议)、Application Data Protocol(应用数据协议)。它们的关系如下图所示,具体细节后面介绍。

+--------------------------------------------------------------------------------------------+
|                                     Application Layer                                      |
+------------------------------------------------------------------------------+-------------+
                                                                               |             
                                                                               |             
+----------------------+------------------------+------------------+-----------V-------------+————>
|SSL Handshake Protocol|SSL Cipher Spec Protocol|SSL Alert Protocol|Application Data Protocol|        |
+----------------------+------------------------+------------------+-------------------------+        |
                                                                                                     SSL Protocol Stack
+--------------------------------------------------------------------------------------------+        |
|                                     SSL Record Protocol                                    |        |
+--------------------------------------------------------------------------------------------+————>   

+--------------------------------------------------------------------------------------------+
|                                      Transport layer                                       |
+--------------------------------------------------------------------------------------------+

+--------------------------------------------------------------------------------------------+
|                                       Network layer                                        |
+--------------------------------------------------------------------------------------------+

SSL记录协议(SSL Record Protocol)

SSL Record Protocol 为SSL提供两种服务,保密性,加密应用层数据;消息完整性,通过使用消息验证码(MAC,message authentication code)
SSL Record Protocol 是为上层使用的基础协议。其中之一就是握手协议。用于交换加密和认证的密钥。
如下描述了SSL记录协议的完成操作。记录协议将应用层的消息镜像分段,压缩数据,应用消息验证码(MAC),加密,添加报文头部,并将数据发送到TCP段中。收到的数据执行反向过程,被解密,被验证,解压缩,重新组合然后传输到应用程序。

                            +----------------------------+
Application Data            |||||||||||||||||||||||||||||| | 【原始应用数据】
                            +----------------------------+ V
                                                           |
                            +--------++--------++--------+ V
Fragment                    |||||||||||||||||||||||||||||| | 【拆分数据段】
                            +--------++--------++--------+ V
                                                           |
                            +--------+                     V
Compress                    |--------|                     | 【对数据段进行无损压缩】
                            +--------+                     V
                                                           |
                            +--------+-+                   V
Add MAC                     |--------|*|                   | 【添加消息验证码】
                            +--------+-+                   V
                                                           |
                            +----------+                   V
Encrypt                     |XXXXXXXXXX|                   | 【数据进行加密】
                            +----------+                   V
                                                           |
                          +-+----------+                   V
Append SSL Record Header  |+|XXXXXXXXXX|                   | 【添加SSL Record Header】
                          +-+----------+                   V
  1. 第一步 分段(Fragmentation)将应用层的数据拆分成SSL 可接受的段大小。

  2. 第二步 压缩(Compress)可选,默认的压缩算法为空,可以指定压缩的算法。

  3. 第三步 添加消息验证码(Message Authentication Code),添加MAC的目的是进行完整性校验,防止数据在传输的过程中被篡改。

  4. 第四步 加密(Encrypted )使用加密算法来对消息进行加密。

  5. 第五步 添加头部(SSL Record Header),头部信息由如下部分组成。
    Content Type (8 bits):提交更高层的协议来处理enclosed fragment.
    Major Version (8 bits):标识SSL使用的主要版本
    Minor Version (8 bits):标识SSL使用的次要版本,对于SSLv3,值为0。
    Compressed Length (16 bits):纯文本片段的长度

密码变更协议(Change CipherSpec Protocol )

Change CipherSpec Protocol由单个消息组成,单个字节,值为1。这个消息的目的是将待处理状态(pending state)复制到当前状态(current state),这个消息,服务器要发送到客户端,客户端也要发送到服务器,当双方都收到之后,后续所有的交互报文将被加密。

告警协议(SSL Alert Protocol)

告警协议用于向对等实体传递与SSL相关的警报。协议中的每个消息由两个字节组成。 第一个字节取值“warning”(1)或“fatal”(2)来传达消息的严重性。 如果级别是致命的,SSL立即终止连接。第二个字节包含一个指示特定警报的代码。

握手协议(Handshake Protocol )

SSL是复杂的握手协议。这个协议允许服务器端和客户端之间彼此认证,并协商加密算法,MAC算法,以及用于SSL业务数据的加密密钥。在发送业务数据之前,必须先使用握手协议进行SSL协商,协商成功之后加密业务数据,进行传输。
下图描述了SSL 建立交换的过程,总共有4个阶段。

Created with Raphaël 2.1.2ClinetClinetServerServer--------------------------------------Handshake Protocol Action------------------------------------ClientHelloServerHello(Certificate*,ServerKeyExchange*,CertificateRequest*)ServerHelloDoneCertificate*,ClientKeyExchange, CertificateVerify*,[ChangeCipherSpec],Finished[ChangeCipherSpec],FinishedApplication DataApplication Data

阶段1 , 用于启动建立连接。客户端发送Client Hello消息。Client Hello消息包含如下内容:
· Version: 客户端最高支持的SSL版本。
· Random: 客户端生成,32位时间戳和28位字节组成,由安全随机数生成器生成。这些值,这个随机值用于在密钥交换期间防止防重放攻击。
· Session ID:可变长度会话标识符。值为0标识客户端希望在新的会话上建立连接。非0值标识希望使用现有的连接参数上创建新的连接。
· CipherSuite:客户端支持加密算法的列表,按照优先级进行降序排列。
· Compression Method:客户端支持的压缩算法的列表。

发送Client Hello消息之后,客户端等待收到Server Hello消息,对于Server Hello消息遵循如下规范。

  1. 版本字段包含服务器所支持的最高版本
  2. 随机字段有服务器生成,与客户端的随机字段没有关联性。
  3. 如果客户端的SessionID字段为非零服务器使用相同的SessionID值。反之SessionID字段使用新的会话值。
  4. CipherSuite字段包含客户端提出的加密算法,服务器在加密算法中选其一。
  5. Compression 字段包含客户端提出的压缩算法,服务器在压缩算法中选其一。

CipherSuite用于指定密钥交换算法。密钥算法列表支持如下:
· RSA:密钥有接收方的RSA公钥加密。
· Fixed Diffie-Hellman: 这个是DH密钥交换(Diffie-Hellman key exchange),其中服务器证书包含证书颁发机构(CA)签名的DH公共参数(Diffie-Hellman public parameters)即,公共密钥证书包含DH公钥参数。客户端在证书中提供其Diffie-Hellman公钥参数,如果客户端需要认证或者在密钥交换消息中。基于固定DH(Fixed Diffie-Hellman)计算方法,来参数两个对等体之间的固定密钥。
· Ephemeral Diffie-Hellman:此技术用于创建临时(一次性)的密钥。在这种情况下DH公钥交换,并使用发送者特有的RSA或DSS 进行签名。接收方,可以使用相应的公钥来验证签名,用于认证公钥。这个选项是其他三个DH中最安全的,因为他会生成临时的认证密钥。
· Anonymous Diffie-Hellman:匿名DH,使用基本的DH算法,没有认证,不安全,容易被中间人攻击。

密钥交换算法在CipherSpec中定义,标识加密算法的相关参数。

阶段2,服务器通过发送其证书开始Phase 2,如果需要认证, 该消息包含一个或多个X.509证书,除了anonymous Diffie-Hellman之外,任何商定密钥交换方法都需要证书信息,如果使用的是 Fixed Diffie-Hellman,证书消息(Certificate Message)将用于密钥交换消息(Key Exchange Message),在此消息中包括服务器的公共的DH参数(Public Diffie-Hellman Parameters),接下来,如果需要,可能会发送一个server_key_exchange消息。
如下两种情况不包括在内
1. 服务器发送了具有固定Diffie-Hellman参数的证书
2. 使用RSA密钥交换。
接下来,非匿名服务器(不使用匿名Diffie-Hellman的服务器)可以从客户端请求证书。ertificate_request消息包括两个参数:ertificate_type 和 certificate_ authorities. (证书类型和证书颁发机构)证书类型表示公钥算法的类型在certificate_request消息中的第二个参数可以信任的CA列表。
第二阶段最后消息需要server_done message 消息它由服务器发送,用于结束hello和相关消息。

阶段3,发送此消息后,服务器等待客户机响应。在收到server_done message消息之后,客户端校验服务器提供的证书,并检查hello参数是否可以接受,如果都可以接受,并服务器请求了客户端证书,那么客户端将发送证书给服务器,开始第三阶段。如果没有适合的证书使用,客户端将发送no_certificate alert 告警信息。

接下来客户端需要发送client_key_exchange消息,消息的内容取决于密钥交换的类型。最后,在这个阶段上,客户端发送一个certificate_verify消息 ,用于客户端准确验证(explicit verification)该消息仅除包含fixed Diffie-Hellman参数的所有证书之外才发送。

阶段4,完成安全连接的设置。 客户端发送一个change_cipher_spec消息,并将待处理的CipherSpec复制到当前的CipherSpec中。然后,客户端立即按照新的算法,密钥和秘密发送完成的消息。 完成的消息验证密钥交换和认证过程是否成功。响应这两个消息,服务器发送自己的change_cipher_spec消息,将待处理传送到当前CipherSpec,并发送其完成的消息。 此时握手完成,客户端和服务器可以开始交换应用层数据。

SSL握手交互过程如下图所示,取自这里,更多报文字段相关细节,请参见RFC 6101和SSL Handshake With Two Way Authentication with Certificates
enter image description here

参考文献

  1. RFC 6101
  2. SSL Handshake With Two Way Authentication with Certificates
  3. 浅析数字证书
  4. Secure Socket Layer
  5. SSL: Foundation for Web Security - The Internet Protocol Journal - Volume 1, No. 1
  6. Keyless SSL: The Nitty Gritty Technical Details
  7. Cisco ASA设备使用指南 第20章 基于客户端的远程访问
  8. Network Security Technologies and Solutions –Chapter 18 Secure Sockets Layer VPN (SSL VPN)

2017年8月17日星期四

【Cisco】【安全】【CCNA】GETVPN简介

GETVPN简介

GET VPN简介(Group Encrypted Transport VPN)

介绍

GETVPN有三大特点
1. 实现实时任意到任意的连接(Any-to-Any Connectivity)
2. 扩展性高
3. 可以实现实时连接
GET VPN相比于传统VPN(IPSec VPN)可以很好的解决如下问题。

影响QOS

(在新IOS上已不是问题)在传统的IPSec VPN中,流量从终端设备发送出来携带DSCP值,数据包经过加密点,采用Tunnel mode进行封装,Tunnel mode方式会将整个原始数据进行加密,然后产生一个新的IP头,新产生的IP头不会继承原有数据包的DSCP值,因此数据包通过加密设备之后DSCP值为0,影响了正常的QOS工作。

同理在GETVPN中采用IP头部预留技术,会将原始的IP头部复制一份到最外层,同时对原有的IP头部进行安全保护,因此GETVPN能更好的与QOS配合使用。

          +-------++----+     
          |IP Head||Data|     
          +-------++----+     
           \             \    
            \             \   
             \             \  
+-------++---++-------++----+ 
|IP Head||ESP||IP Head||Data| 
+-------++---++-------++----+ 
    ^             |           
    |             |           
    |             |           
    +-----Copy----+ 

组播数据流和实时流量传输

在传统的IPSec VPN中,中心站点需要将同一份数据包传送到两个分支站点(分支站点A、分支站点B),那么需要分别与分支站点建立安全关联(SA),中心站点发送数据到分支站点A的流量,不能被中心站点B所解密,反之亦然。所以当需要涉及一对多传输或多对多传输的情况时,IPSec VPN需要建立很多个安全关联(SA)增加了网络的复杂度维护的难度。
并且在站点和站点通信时,必须预先进行IKE协商,产生安全关联(SA),才能传输数据,因此对于实时性的流量(语音、视频)会增加网络延迟,影响用户体验。

GET VPN中引入新概念称之为信任组成员“Trust Group Members”。所有需要加密或解密的站点,需要先加入这个信任组中,并且在这个信任组中至少存在一个密钥服务器(Key Server),密钥服务器(Key Server)的主要任务就是认证组成员,组成员一旦认证成功这个组成员就拥有了一个与其他组成员相同的安全关联,这个安全关联可以用于进行加密和解密数据。由于具有相同的安全关联,那么在相同组内的的站点彼此之间就可以互相通信。
由于GETVPN的安全关联并不是被流量触发而产生,而是由组成员注册到服务器后进行下发的,因此可以减少因为协商安全关联而造成的网络延迟。这一点相比IPSec VPN要更加友好。

覆盖路由问题

在传统的IPSec VPN中,需要在站点和站点之间运行动态路由协议,来保证站点内部的路由互相学习,所以需要在Tunnel接口上运行IPSec VPN和动态路由协议,因此产生了覆盖路由的问题。
覆盖路由是指,上层Tunnel接口的动态路由协议,依赖于底层的路由协议运行。

GET VPN因为保留原始的IP头部信息,是一种典型的无隧道VPN技术,因此消除了隧道类型IPSec VPN带来的覆盖路由的问题。

GET VPN三大组件

密钥服务器(GCKS,Group Controller/Key Servers)

GCKS是以组的形式进行维护密钥的设备。单一个组成员(Group Member)进行注册的时候,密钥服务器(Key Server)会向这个组成员(Group Member)发送密钥和策略。同时密钥服务器(Key Server)会在密钥超时之前进行密钥更新。
GCKS发送两种形式的密钥,传输加密密钥(TEK、Traffic Encryption Key)、加密密钥的密钥(KEK、Key Encryption Key)。

组解释域(GDOI,Group Domain of Interpretation )

GDOI协议用于在组成员和组控制器/密钥服务器(GCKS)之间建立安全关联,为安全的组通信提供支持,它会为获得授权的组成员间建立SA (安全关联),GDOI 消息用来为组创建、维持或删除SA,被定义在IETF RFC 3547 中。GDOI协议使用UDP/848端口号。

组成员(Group Member)

组成员是一台路由器,他在密钥服务器上注册,并且从密钥服务器获取IPsec SA,使用这个SA与属于这个组的其它设备通讯,组成员在密钥服务器上注册并且提供了一个组ID,并且从服务器获取用于这个组的安全策略和密钥。

GET VPN如何工作(How GET VPN Works)

  1. 每个组成员向密钥服务器发送一个注册请求。密钥服务器通过使用GDOI 协议对组成员进行认证和授权,并向其发送IPsec 策略和密钥,该密钥将用于加密/解密IP组播和单播包。

  2. 组成员向IPsec SA 注册成功后,会接收到相应的密钥,于是它可以绕过密钥服务器,直接和其他组成员交换加密的IP 组播和单播数据包,从而实现了安全通信。TEK 用来确保所有组成员间通信的安全。

  3. 若有必要,密钥服务器会向组内的所有组成员发送密钥更新消息。该消息包括新的IPsec 策略和密钥,在当前IPsecSA 过期后,组成员就会使用新的IPsec 策略和密钥。密钥更新消息要在SA 过期之前发送出去以确保组成员始终存在有效的组密钥。

摘自PDF注释信息:
1. 每一个组成员发送注册请求到密钥服务器。通过GDOI协议,密钥服务器认证和授权组成员,并且发送策略和用于加解密IP单播和组播的密钥
2. 当组成员注册成功获取IPsec SA后,就会获取相应的密钥,组成员之间能够直接加密IP组播和单播,旁路掉密钥服务器建立安全的通讯。TEK用于加密在组成员之间的流量。
3. 如果需要,密钥服务器发送密钥更新信息到组内的所有成员。这个密钥更新信息包含新的IPsec策略和当IPsec SA超时以后使用的密钥,密钥更新信息会在SA超时之前发送,保障组密钥一直可用。

GDOI协议在密钥服务器和组成员之间分发安全策略(IPsec SA)和密钥。密钥服务器有责任创建和维护IPsec SA和密钥,并且下载IPsec SA和密钥给所有认证的组成员。这样收到IPsec SA后认证的组成员就能够和组内的其它成员加密通讯了。

GDOI协议被ISAKMP第一阶段交换后进行保护,所以GDOI密钥服务器需要和GDOI组成员拥有相同的ISAKMP策略。GDOI注册过程是一个单播交换使用UDP848,如果使用NAT-T就是4500。

在GDOI注册过程中,每一个组成员将收到一个组播组地址,每一个注册到这个组播组的成员都请求希望收到一个组播密钥,当注册成功以后,密钥服务器发送一个组播密钥更新给所有在这个组注册成功的成员。

GDOI Message Exchange (Unicast Exchange)

Created with Raphaël 2.1.2Key ServerKey ServerGroup MemberGroup Member-----------ISAKMP Phase 1-----------HDR, HASH. Initiator Nonce, Group IDHDR, HASH, Responder Nonce, SAHDR, HASHHDR, HASH, Keys-----------ISAKMP Phase 1-----------

HDR : HDR is an ISAKMP header payload
HASH: 每一个HASH都是一个伪随机数
Initiator Nonce、Responder Nonce: Ni、Nr
SA:Security Association
Keys: Key Download、KD

Group Member ACL

什么流量需要加密可以在密钥服务器上通过ACL静态的指定,这个策略既可以定义单播流量也可以定义组播流量,这个ACL定义了什么流量需要加密。这个信息会送到所有通过认证的组成员,创建可信任的域内通讯。这个策略从密钥服务器上下载并且附加在组成员本地配置ACL后面,任何组成员本地配置的ACL都优先于从密钥服务器上下载ACL。

Cisco推荐使用私有的地址规划从一个简单主类网络到所有的需要被保护的组成员内部接口网络,例如:使用主类网10.0.0.0/8到所有的组成员内网接口网段,一个A类网络可以划分成很多/24的子网,这样就大大降低了密钥服务器定义策略的负责程度,使用一个连续的网络块,你只需要定义一个ACL条目,例如:access-list 101 permit ip 10.0.0.0 0.255.255.255 10.0.0.0 0.255.255.255。

实验

拓扑

            +-------------+             +-------------+           
            |Key-Server-R4|             |Key-Server-R5|           
            +---/---------+             +---------/---+           
                |S1/1                         S1/1|                 
                |                                 |               
                |                                 |               
                |     S1/4+-------------+S1/5     |               
                +---------| Internet-R8 |---------+               
                          +------+------+                         
                                 |S1/0                               
                                 |                                
                                 |S1/0                             
 +---------------+    S1/1+------+------+S1/3      +---------------+
 |Group Member-R1+--------| Internet-R7 |----------+Group Member-R3|
 +---------------+S1/0    +------+------+      S1/0+---------------+
                                 |S1/2                               
                                 |                                
                                 |S1/0                            
                         +-------+-------+                         
                         |Group Member-R2|                         
                         +---------------+                                                 

IP地址规划

R1#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/0              192.168.17.1    YES manual up                    up       
Loopback1              1.1.1.1         YES manual up                    up     

R2#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/0              192.168.27.2    YES manual up                    up       
Loopback1              2.2.2.2         YES manual up                    up      

R3#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/0              192.168.37.3    YES manual up                    up       
Loopback1              3.3.3.3         YES manual up                    up   

R4#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/1              192.168.48.4    YES manual up                    up       
Loopback1              4.4.4.4         YES manual up                    up   

R5#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/1              192.168.58.5    YES manual up                    up       
Loopback1              5.5.5.5         YES manual up                    up   

R7#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/0              192.168.78.7    YES manual up                    up      
Serial1/1              192.168.17.7    YES manual up                    up      
Serial1/2              192.168.27.7    YES manual up                    up      
Serial1/3              192.168.37.7    YES manual up                    up 
Loopback1              7.7.7.7         YES manual up                    up   

R8#show ip int br
Interface              IP-Address      OK? Method Status                Protocol 
Serial1/0              192.168.78.8    YES manual up                    up       
Serial1/4              192.168.48.8    YES manual up                    up      
Serial1/5              192.168.58.8    YES manual up                    up       
Loopback1              8.8.8.8         YES manual up                    up 

配置

!Key-Server-R4(Master)
crypto key generate rsa general label ccie43413-rsa
!
access-list 199 permit ip 192.168.0.0 0.0.255.255 192.168.0.0 0.0.255.255
!         
crypto isakmp policy 10                                  !isakmp第一阶段配置
 encr 3des
 authentication pre-share
 group 2
crypto isakmp key ccie43413 address 192.168.17.1         !isakmp第一阶段配置,与R1建立isakmp
crypto isakmp key ccie43413 address 192.168.27.2         !isakmp第一阶段配置,与R2建立isakmp
crypto isakmp key ccie43413 address 192.168.37.3         !isakmp第一阶段配置,与R3建立isakmp
crypto isakmp key ccie43413 address 192.168.58.5         !isakmp第一阶段配置,与R5建立isakmp
!
!
crypto ipsec transform-set gdoi-trans esp-3des esp-sha-hmac !设置传输转换集
 mode tunnel
!
!
crypto ipsec profile getvpn-profile                      !配置profile
 set security-association lifetime seconds 1800          !设置安全关联的寿命时间
 set transform-set gdoi-trans                            !调用配置传输转换集
!
crypto gdoi group getvpn-group                           !配置gdoi部分
 identity number 43413                                   !在同一个GETVPN域内的ID
 server local
  rekey retransmit 10 number 2                           !rekey重传,多少秒之后重新发送,重传次数
  rekey authentication mypubkey rsa ccie43413-rsa        !调用之前产生的RSA
  rekey transport unicast                                !指定采用单播的方式更新密钥
  sa ipsec 1                                             !配置IPSec sa 的id,不同的id在插入的时候顺序不一样
   profile getvpn-profile                                !调用配置“crypto ipsec profile”
   match address ipv4 199                                !配置感兴趣的数据流
   replay time window-size 5                             !配置防重放攻击 见“Group Encrypted Transport VPN (Get VPN) Design and Implementation Guide“3.5.7 TBAR
  address ipv4 192.168.48.4                              !配置本地KS服务器server地址
  redundancy
   local priority 100                                    !配置KS优先级,值越大越优先
   peer address ipv4 192.168.58.5                        !配置远端KS服务器server地址
!
------------------------------------------------------------------------------------------------------------------------------------
!Key-Server-R5(Standby)
crypto key generate rsa general label ccie43413-rsa
!
access-list 199 permit ip 192.168.0.0 0.0.255.255 192.168.0.0 0.0.255.255
!         
crypto isakmp policy 10
 encr 3des
 authentication pre-share
 group 2
crypto isakmp key ccie43413 address 192.168.17.1   
crypto isakmp key ccie43413 address 192.168.27.2   
crypto isakmp key ccie43413 address 192.168.37.3   
crypto isakmp key ccie43413 address 192.168.48.4    !difference   
!
!
crypto ipsec transform-set gdoi-trans esp-3des esp-sha-hmac 
 mode tunnel
!
!
crypto ipsec profile getvpn-profile
 set security-association lifetime seconds 1800
 set transform-set gdoi-trans 
!
crypto gdoi group getvpn-group
 identity number 43413
 server local
  rekey retransmit 10 number 2
  rekey authentication mypubkey rsa ccie43413-rsa
  rekey transport unicast
  sa ipsec 1
   profile getvpn-profile
   match address ipv4 199
   replay time window-size 5
  address ipv4 192.168.58.5                         !difference
  redundancy
   local priority 80                                !difference
   peer address ipv4 192.168.48.4                   !difference
!
------------------------------------------------------------------------------------------------------------------------------------
!Group Member-R1、Group Member-R2、Group Member-R3
crypto isakmp policy 10
encr 3des
authentication pre-share
group 2
!
crypto isakmp key ccie43413 address 192.168.48.4
crypto isakmp key ccie43413 address 192.168.58.5
!
crypto gdoi group getvpn
identity number 43413
server address ipv4 192.168.48.4
server address ipv4 192.168.58.5
!
crypto map getvpn-map 10 gdoi
set group getvpn

interface s1/0
crypto map getvpn-map
!

参考文献

  1. Chapter 17. Group Encrypted Transport VPN (GET VPN)

  2. Group Encrypted Transport VPN (Get VPN) Design and Implementation Guide

  3. Network Security Technologies and Solutions, Chapter 17: Group Encrypted Transport VPN (GET VPN)

  4. 网络安全技术解决方案(修订版), 第17章 群组加密传输VPN(GETVPN)

  5. RFC 6407,RFC 3547

  6. GETVPN(Knowledge Base)

2017年8月10日星期四

【Cisco】【安全】【CCNA】IPSec DMVPN高可靠性(实验)

IPSec DMVPN高可靠性

IPSec DMVPN高可靠性

这一部分主要是实验部分,如下的配置信息仅为关键配置部分。由于IPSec VPN属于公共配置,没有特别的地方,所以没有列出。具体参见附录。

单云双中心配置

单云双中心是在单个DMVPN环境内,提供两个NHS进行冗余和备份。

拓扑

+-------+                     +-------+
|Hub--R8|                     |Hub--R3|
+-------+                     +-------+
     S1/0\                   /S1/0     
          \                 /          
           \               /           
            \             /            
             \           /             
          S1/0\         /S1/3           
               +-------+               
               |Switch |               
               +-------+               
          S1/1/         \S1/2           
             /           \             
            /             \            
           /               \           
          /                 \          
     S1/0/                   \S1/0      
+--------+                    +--------+
|Spoke-R1|                    |Spoke-R2|
+--------+                    +--------+

IP地址规划

R1#show ip int br
Interface              IP-Address      OK? Method Status                Protocol    
Serial1/0              192.168.17.1    YES manual up                    up   

R2#show ip int br
Interface              IP-Address      OK? Method Status                Protocol  
Serial1/0              192.168.27.2    YES manual up                    up 

R3#show ip int br
Interface              IP-Address      OK? Method Status                Protocol     
Serial1/0              192.168.37.3    YES manual up                    up

R8#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/0              192.168.78.8    YES manual up                    up 

R7#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/0              192.168.78.7    YES manual up                    up      
Serial1/1              192.168.17.7    YES manual up                    up      
Serial1/2              192.168.27.7    YES manual up                    up      
Serial1/3              192.168.37.7    YES manual up                    up       

配置

!Hub-R8
interface Tunnel1
 ip address 172.168.1.8 255.255.255.0
 no ip redirects
 ip nhrp map multicast dynamic          !动态的方式产生NHRP,对于下面的Spoke来说,是动态的方式进行学习NHRP。
 ip nhrp map 172.168.1.3 192.168.37.3   !对于Hub-2,是静态的方式进行注册。
 ip nhrp map multicast 192.168.37.3     !对于Hub-2,是静态的方式进行注册。
 ip nhrp network-id 10
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Hub-R3
interface Tunnel1
 ip address 172.168.1.3 255.255.255.0
 no ip redirects
 ip nhrp map multicast dynamic          !动态的方式产生NHRP,对于下面的Spoke来说,是动态的方式进行学习NHRP。
 ip nhrp map 172.168.1.8 192.168.78.8   !对于Hub-1,是静态的方式进行注册。
 ip nhrp map multicast 192.168.78.8     !对于Hub-1,是静态的方式进行注册。
 ip nhrp network-id 10
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Spoke-R1
interface Tunnel1
 ip address 172.168.1.1 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.8 192.168.78.8        !向Hub-R8进行注册
 ip nhrp map 172.168.1.3 192.168.37.3        !向Hub-R3进行注册
 ip nhrp map multicast 192.168.78.8
 ip nhrp map multicast 192.168.37.3
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.3
 ip nhrp nhs 172.168.1.8
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Spoke-R2
interface Tunnel1
 ip address 172.168.1.2 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.8 192.168.78.8        !向Hub-R8进行注册
 ip nhrp map 172.168.1.3 192.168.37.3        !向Hub-R3进行注册
 ip nhrp map multicast 192.168.78.8
 ip nhrp map multicast 192.168.37.3
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.3
 ip nhrp nhs 172.168.1.8
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

双云双中心

双云双中心是在两个不同的DMVPN域内,提供冗余备份,不仅仅是NHS冗余备份,更是ISP不同链路上的备份。

拓扑

 +-------+           +-------+   
 | Hub-R1|           | Hub-R2|   
 +-------+           +-------+   
    |S1/0                   |S1/1
    |                       |    
    |                       |    
    |                       |    
    |S1/1                   |S1/2
 +-------+           +-------+   
 |ISP--R7|           |ISP--R8|   
 +/------+S1/4       +------/+   
  |S1/3   \         /S1/3   |S1/4
  |        \       /        |    
  |         \     /         |    
  |          \   /          |    
  |           \ /           |    
  |            \            |    
  |           / \           |    
  |          /   \          |    
  |         /     \         |    
  |S1/0    /       \S1/0    |S1/1
+\-------+ S1/1      +------\-+   
|Spoke-R3|           |Spoke-R4|   
+--------+           +--------+ 

IP地址规划

R1#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/0              192.168.17.1    YES manual up                    up

R2#show ip int br
Interface              IP-Address      OK? Method Status                Protocol    
Serial1/1              192.168.28.2    YES manual up                    up 

R3#show ip int br
Interface              IP-Address      OK? Method Status                Protocol     
Serial1/0              192.168.37.3    YES manual up                    up      
Serial1/1              192.168.38.3    YES manual up                    up 

R4#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/0              192.168.47.4    YES manual up                    up      
Serial1/1              192.168.48.4    YES manual up                    up 

R7#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/1              192.168.17.7    YES manual up                    up         
Serial1/3              192.168.37.7    YES manual up                    up      
Serial1/4              192.168.47.7    YES manual up                    up 

R8#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/2              192.168.28.8    YES manual up                    up      
Serial1/3              192.168.38.8    YES manual up                    up      
Serial1/4              192.168.48.8    YES manual up                    up  

配置

!Hub-R1
interface Tunnel1
 ip address 172.168.1.1 255.255.255.0     !NHRP ISP-R7 ip地址网段
 no ip redirects
 ip nhrp map multicast dynamic
 ip nhrp network-id 10                    !与R2 NHRP network-ID不同
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Hub-R2
interface Tunnel1
 ip address 172.168.2.2 255.255.255.0     !NHRP ISP-R8 ip地址网段
 no ip redirects
 ip nhrp map multicast dynamic
 ip nhrp network-id 20                    !与R1 NHRP network-ID不同
 tunnel source Serial1/1
 tunnel mode gre multipoint
end

!Spoke-R3
interface Tunnel1
 ip address 172.168.1.3 255.255.255.0     !NHRP ISP-R7 ip地址网段
 no ip redirects
 ip nhrp map 172.168.1.1 192.168.17.1     !向Hub-R1进行注册
 ip nhrp map multicast 192.168.17.1
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.1
 tunnel source Serial1/0
 tunnel mode gre multipoint
 !
interface Tunnel2
 ip address 172.168.2.3 255.255.255.0     !NHRP ISP-R8 ip地址网段
 no ip redirects
 ip nhrp map 172.168.2.2 192.168.28.2     !向Hub-R2进行注册
 ip nhrp map multicast 192.168.28.2
 ip nhrp network-id 20
 ip nhrp nhs 172.168.2.2
 tunnel source Serial1/1
 tunnel mode gre multipoint
end

!Spoke-R4
interface Tunnel1
 ip address 172.168.1.4 255.255.255.0     !NHRP ISP-R7 ip地址网段
 no ip redirects
 ip nhrp map 172.168.1.1 192.168.17.1     !向Hub-R1进行注册
 ip nhrp map multicast 192.168.17.1
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.1
 tunnel source Serial1/0
 tunnel mode gre multipoint
 !
interface Tunnel2
 ip address 172.168.2.4 255.255.255.0     !NHRP ISP-R8 ip地址网段
 no ip redirects
 ip nhrp map 172.168.2.2 192.168.28.2     !向Hub-R2进行注册
 ip nhrp map multicast 192.168.28.2
 ip nhrp network-id 20
 ip nhrp nhs 172.168.2.2
 tunnel source Serial1/1
 tunnel mode gre multipoint
 end

层次化IPSec DMVPN

同DMVPN域内实现节约NHRP条目的目的。在传统的DMVPN中,NHS拥有所有NHC的表项,随着NHC的数量增加,会增加NHS的负担。
所以设计层次化的拓扑,似的同一个域内设备互访,仅向Branch站点进行注册即可,如果涉及需要进行跨域通信的节点,那么再单独向Center站点进行注册,完成跨域的NHRP解析。从而实现NHRP条目简化。增加网络的利用效率。

拓扑

                   +---------+                   
                   |Center-R5|                   
                   +---------+                   
               S1/0|         |S1/1               
                   |         |                   
               S1/5|         |S1/5               
         +---------+         +---------+         
         |Branch-R7|         |Branch-R8|         
         +---------+         +---------+         
     S1/1|     S1/2|            |S1/3  |S1/4
         |         |            |      |         
         |         |            |      |         
     S1/0|     S1/0|            |S1/1  |S1/1     
+--------+   +--------+   +--------+   +--------+
|Spoke-R1|   |Spoke-R2|   |Spoke-R3|   |Spoke-R4|
+--------+   +--------+   +--------+   +--------+

IP地址规划

R1#show ip int br
Interface              IP-Address      OK? Method Status                Protocol     
Serial1/0              192.168.17.1    YES manual up                    up   

R2#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/0              192.168.27.2    YES manual up                    up

R3#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/1              192.168.38.3    YES manual up                    up

R4#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/1              192.168.48.4    YES manual up                    up

R7#show ip int br
Interface              IP-Address      OK? Method Status                Protocol   
Serial1/1              192.168.17.7    YES manual up                    up      
Serial1/2              192.168.27.7    YES manual up                    up      
Serial1/5              192.168.57.7    YES manual up                    up 

R8#show ip int br
Interface              IP-Address      OK? Method Status                Protocol  
Serial1/3              192.168.38.8    YES manual up                    up      
Serial1/4              192.168.48.8    YES manual up                    up      
Serial1/5              192.168.58.8    YES manual up                    up 

R5#show ip int br
Interface              IP-Address      OK? Method Status                Protocol     
Serial1/0              192.168.57.5    YES manual up                    up      
Serial1/1              192.168.58.5    YES manual up                    up

配置

!Spoke-R1
interface Tunnel1
 ip address 172.168.1.1 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.7 7.7.7.7           !向R7注册,确保R1-to-R2双向互通
 ip nhrp map multicast 7.7.7.7
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.7
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Spoke-R2
interface Tunnel1
 ip address 172.168.1.2 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.7 7.7.7.7           !向R7注册,确保R1-to-R2双向互通
 ip nhrp map multicast 7.7.7.7
 ip nhrp map 172.168.1.5 5.5.5.5           !向R5注册,确保R2-to-R4双向互通
 ip nhrp map multicast 5.5.5.5
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.7
 ip nhrp nhs 172.168.1.5
 tunnel source Serial1/0
 tunnel mode gre multipoint
end

!Spoke-R3
interface Tunnel1
 ip address 172.168.1.3 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.8 8.8.8.8           !向R8注册,确保R3-to-R4双向互通
 ip nhrp map multicast 8.8.8.8
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.8
 tunnel source Serial1/1
 tunnel mode gre multipoint
end

!Spoke-R4
interface Tunnel1
 ip address 172.168.1.4 255.255.255.0
 no ip redirects
 ip nhrp map 172.168.1.8 8.8.8.8           !向R8注册,确保R3-to-R4双向互通
 ip nhrp map multicast 8.8.8.8
 ip nhrp map 172.168.1.5 5.5.5.5           !向R5注册,确保R2-to-R4双向互通
 ip nhrp map multicast 5.5.5.5
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.8
 ip nhrp nhs 172.168.1.5
 tunnel source Serial1/1
 tunnel mode gre multipoint
end

!Branch-R7
interface Tunnel1
 ip address 172.168.1.7 255.255.255.0
 no ip redirects
 ip nhrp map multicast dynamic             !自己本身作为NHS,接收R1和R2的注册
 ip nhrp map 172.168.1.5 5.5.5.5           !向Center-R5注册,确保R7-to-R8双向互通
 ip nhrp map multicast 5.5.5.5
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.5
 tunnel source 7.7.7.7
 tunnel mode gre multipoint
end

!Branch-R8
interface Tunnel1
 ip address 172.168.1.8 255.255.255.0
 no ip redirects
 ip nhrp map multicast dynamic             !自己本身作为NHS,接收R3和R4的注册
 ip nhrp map 172.168.1.5 5.5.5.5           !向Center-R5注册,确保R7-to-R8双向互通
 ip nhrp map multicast 5.5.5.5
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.5
 tunnel source 8.8.8.8
 tunnel mode gre multipoint
end

!Center-R5
interface Tunnel1
 ip address 172.168.1.5 255.255.255.0
 no ip redirects
 ip nhrp map multicast dynamic
 ip nhrp network-id 10
 tunnel source 5.5.5.5
 tunnel mode gre multipoint
end

附录

crypto ikev2 keyring cisco-ikev2-keyring                       !配置IKEv2 keyring 
 peer dmvpn-node                                               !Configure a Peer and associated keys
  description symmetric pre-shared key for the hub/spoke
  address 0.0.0.0 0.0.0.0                                      !因为是动态的方式,所以地址为0.0.0.0
  pre-shared-key cisco123                                      !配置预共享密钥“cisco123”
 !        
!
crypto ikev2 profile cisco-ikev2-profile                       !配置ikev2 profile 
 match identity remote address 0.0.0.0                         !因为是动态的方式,所以地址为0.0.0.0
 authentication remote pre-share                               !均采用预共享密钥方式进行认证
 authentication local pre-share                                !均采用预共享密钥方式进行认证
 keyring local cisco-ikev2-keyring                             !调用之前配置的“keyring”
!
crypto ipsec transform-set cisco-ts esp-3des esp-md5-hmac      !配置transform
 mode tunnel
!
crypto ipsec profile cisco-ipsec-ikev2                         !配置IKEv2 profile
 set transform-set cisco-ts                                    !调用之前配置的transform
 set ikev2-profile cisco-ikev2-profile                         !调用之前的profile—>keyring
!
interface Tunnel1
 tunnel protection ipsec profile cisco-ipsec-ikev2             !接口下应用,保护tunnel口上的流量。

参考文献

  1. 《IPSecVPN实战指南》 7.4 DMVPN两种高可靠性

2017年7月23日星期日

【Cisco】【安全】【CCNA】IPSec VPN DMVPN

IPSec VPN DMVPN

IPSec VPN DMVPN

介绍

在之前介绍的IPSec VPN中大多都是 Site to Site 的模型。然而在实际应用中,中心到分支的结构,来看看这种情况下会遇到哪些问题。1

星形拓扑(Star Topology,Hub and Spoke )

          +-------+          
          |  Hub  |          
          +-------+          
         /    |    \         
        /     |     \        
       /      |      \       
+-----+    +-----+   +-----+
|Spoke|    |Spoke|   |Spoke|
+-----+    +-----+   +-----+

1. 每增加一个分支站点,在中心设备上就要多增加一份配置。
2. Spoke to Spoke时,流量会先到Hub上,第一次加密。再由Hub进行路由查找后进行二次加密发送到Spoke上,数据被两次加解密增加的处理数据包的成本。
3. 当Spoke to Spoke 的流量过大时,会占用Hub的带宽,如果前期流量规划不足,可能会影响到其他正常Spoke 的通信。

全网状拓扑(Full Match Topology)

      +------+       
      |  HUB |       
      +------+       
         /|\         
        / | \        
       /  |  \       
+-----+   |   +-----+
|Spoke|---+---|Spoke|
+-----+   |   +-----+
       \  |  /       
        \ | /        
         \!/         
       +-----+       
       |Spoke|       
       +-----+       

1. 当Spoke数量较多的时候配置量巨大,维护成本高。
2. 每一个Spoke建立的每一个连接都要产生一个新的SA(安全关联),对于设备性能有一定的要求。
3. 必须清楚知道其他站点的IP地址,如果采用动态地址需要额外的部署成本。

DMVPN(Dynamic Multipoint VPN)

· 通过虚拟网状连接,提供Full Match连通性(multipoint GRE,mGRE)
· 分支站点支持动态地址
· 增加新的分支站点,中心站点无需重新配置
· 分支站点的流量通过动态产生的隧道进行封装

DMVPN组成协议

DMVPN有很好的兼容性以及扩展性,但是DMVPN是通过不同的协议组合进行使用的,如下就要介绍DMVPN 四大组成协议。

动态多点GRE(multipoint GRE,mGRE)

相比于传统的GRE隧道,mGRE提供了典型的NBMA(Non-Broadcast Multiple Access,NBMA)网络,而NBMA网络就是一个很典型的Hub and Spoke 的网络模型。Spoke to Spoke 的流量经过Hub进行转发,这保证了底层上的连通性。2

下一跳解析协议(Next Hop Resolution Protocol,NHRP)

NHRP简介

通过mGRE保证了底层上的连通性,但是发现如果仅只有mGRE那么,当数据包要进行GRE封装的时候,发现并没有一个Destination地址去使用所以无法完成GRE封装,那么这个时候就需要NHRP解析 隧道地址和物理地址映射。
如果Spoke仅仅获取到了hub点的信息,那么Spoke to Spoke 的流量就必须通过Hub进行转发,这样无疑增加了Hub的负担。所以NHRP通过先注册,再请求的方式,不仅仅让hub点获取到Spoke点信息,还保证了Spoke to Spoke,NHRP映射关系的解析。

NHRP的本质其实就是为NBMA网络地址提供映射表信息(VPN IP to NBMA IP address mapping)

  • NHRP是一个“二层”缓存解析协议,这一点非常类似于 ARP 或 反向ARP(帧中继网络)(Spoke发送的广播、组播只能被Hub点收到)
    NHRP is a layer two resolution protocol and cache like ARP or Reverse ARP (Frame Relay)

  • 在DMVPN中使用,将Tunnel IP地址映射到NBMA IP 地址
    It is used in DMVPN to map a tunnel IP address to an NBMA address

  • 与ARP一样,NHRP也有静态和动态的区分(通常在Spoke点配置静态NHRP,在hub点配置动态NHRP)
    Like ARP, NHRP can have static and dynamic entries

为什么需要NHRP?(How mGRE Uses NHRP)

如下是一个典型的mGRE配置

interface Tunnel 0
 ip address 10.0.0.1 255.0.0.0
 tunnel source Dialer1
 tunnel mode gre multipoint
 tunnel key 1
  1. 当数据包进入到路由器之后,进行路由查找,下一跳一起传递到mGRE接口。
    When a packet is routed, it is passed to the mGRE interface along with a next-hop

  2. 下一跳是远程对等体的隧道地址。
    The next-hop is the tunnel address of a remote peer
    到此,如果仅知道对方的隧道地址,是无法获知远端Peer 的物理地址的。无法完成封装再发送的过程。所以这时候就需要NHRP将隧道上的IP地址映射到NMBA IP地址(物理接口IP地址)

  3. mGRE查找Tunnel地址所对应的 NHRP cache中的next-hop address,并查找远程对等体的NBMA地址
    mGRE looks up the NHRP cache for the next-hop address and retrieves the NBMA address of the remote peer

  4. mGRE将数据包封装到GRE / IP有效载荷中
    mGRE encapsulates the packet into a GRE/IP payload

  5. 新的数据包目的地址是NMBA的地址
    The new packet destination is the NMBA address

nhrp如何工作?(How NHRP Works)

NHRP本质目的是需产生NHRP Cache,产生 NHRP Cache有如下三种方式。3

  • 手动添加静态条目
  • Hub通过注册请求(Registration requests)学习
  • Spokes通过决议请求(Resolution requests)学习
    “Resolution” is for spoke to spoke

如下是NHRP工作流程图,简述如下,具体报文交互情况,请参见附录。

Created with Raphaël 2.1.2SpokeASpokeAHubHubSpokeBSpokeBNHRP Registration Request(注册请求)NHRP Resolution ReplyNHRP Registration RequestNHRP Resolution ReplyRegistration StageResolution Request"SpokeB"(决议请求)Destination“SpokeB” 。Resolution Request"SpokeB",Source“SpokeA” 。Resolution Reply。Resolution Stage

NHRP Registration Stage

当Spoke NHRP接口被UP起来的时候,Spoke 会向NHS发送注册报文,以通告自己的NBMA网络地址映射关系。即对于Hub来说采用的是动态学习的方式(Registration)来更新自己的NHRP表项,对于Spoke 来说在Registration Stage(注册阶段)()

NHRP Registration Request

NHRP注册请求用于向其NHS(Next Hop Server)注册NHC(Next Hop Resolution Protocol client )的NHRP(Next Hop Resolution Protocol)信息。

Spokes设备Tunnel接口启用的时候,Spokes设备向Hub设备发送注册消息。以向Hub通知该站的NBMA信息。这样机制可以保证Hub节点动态的学习到client NBMA表项。

HRP注册请求报文发送到NHS(Next Hop Server),用于通知NHS站点的NBMA信息。NHRP Packet Type: NHRP Registration Request (3)。

在NHRP协议报文中需要注意的是Request id 字段,Request id是请求消息中唯一的标识符。该值直接从请求数据包(NHRP Registration Request)复制到回复的数据包(NHRP Registration Reply)中。当请求者收到 回复(Registration Reply)的时候,会将回复中的 request id和本地上未完成的请求列表中进行比较,当发现匹配时,请求被确认。(来自RFC 2332)

NHRP Registration Reply

NHRP Registration Reply是NHS(Next Hop Server)发送给client以响应 NHRP Registration Request。NHRP Packet Type: NHRP Registration Reply (4)。

当Hub收到注册消息之后将回复Registration Reply消息,以示确认。并回复自己的NBMA网络地址信息。

NHRP Resolution Stage

NHRP决议阶段主要用于解决Spoke to Spoke 通信的情况。当完成Registration(注册)之后,Spoke to Spoke没有NHRP表项,所以 Spoke to Spoke 必须经过Hub,但是NHRP有Resolution 机制,可以优化流量路径,使得Spoke to Spoke不需要经由Hub转发,Resolution Request和Resolution Reply就是完成这一功能的。

NHRP Resolution Request and NHRP Resolution Reply

SpokeA,需要访问SpokeB,SpokeA先查询本地NHRP映射表,未发现SpokeB

  1. SpokeA发送Resolution Request到Hub节点。

  2. 如果请求的节点在Hub上有NHRP映射表,则Hub发送Resolution Request,到此请求节点上(SpokeB),并声明请求源节点(SpokeA)。
    如果请求的节点在Hub上没有映射表,则回复 NHRP Error Indication,终止请求。

  3. 当SpokeB收到了Hub发送过来的Resolution Request之后无误,学习SpokeA的NBMA地址信息,然后直接向SpokeA回复 Resolution Reply消息

  4. 当SpokeA收到了Resolution Reply消息之后学习SpokeB NBMA地址信息,此时双方均已学习到了NBMA地址映射关系,后续的所有流量将直接遵循路由转发,不再经过Hub进行流量转发。

有关这一部分的debug信息,请参加附录。

配置(关键配置)

拓扑,如下配置命令有疑问的地方请参考Cisco配置手册或附录。

                   +-------+                  
                   |  Hub  |                  
                   +-------+                  
                       |S1/0                  
                       |                      
                       |                      
                       |S1/0                  
                   +-------+                  
     +-------------|Switch |-------------+    
     |         S1/1+-------+S1/3         |    
     |                 |S1/2             |    
     |                 |                 |    
     |                 |                 |    
     |S1/0             |S1/0             |S1/0
 +-------+         +-------+         +-------+
 |Spoke-A|         |Spoke-B|         |Spoke-C|
 +-------+         +-------+         +-------+

接口ip地址配置,NHRP配置

Hub

!Hub
interface Serial1/0
 ip address 192.168.78.8 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.8 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413
 ip nhrp map multicast dynamic
 ip nhrp network-id 10
 tunnel source 192.168.78.8
 tunnel mode gre multipoint
 tunnel key 43413

SpokeA

!SpokeA
interface Serial1/0
 ip address 192.168.17.1 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.1 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413
 ip nhrp map 172.168.1.8 192.168.78.8
 ip nhrp map multicast 192.168.78.8
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.8
 tunnel source 192.168.17.1
 tunnel mode gre multipoint
 tunnel key 43413
end

SpokeB

!SpokeB
interface Serial1/0
 ip address 192.168.27.2 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.2 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413
 ip nhrp map 172.168.1.8 192.168.78.8
 ip nhrp map multicast 192.168.78.8
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.8
 tunnel source 192.168.27.2
 tunnel mode gre multipoint
 tunnel key 43413
end

SpokeC

!SpokeC
interface Serial1/0
 ip address 192.168.37.3 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.3 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413
 ip nhrp map 172.168.1.8 192.168.78.8
 ip nhrp map multicast 192.168.78.8
 ip nhrp network-id 10
 ip nhrp nhs 172.168.1.8
 tunnel source 192.168.37.3
 tunnel mode gre multipoint
 tunnel key 43413
end

Switch

!Switch
interface Serial1/0
 description To-Hub
 ip address 192.168.78.7 255.255.255.0
  ip ospf 1 area 0
!
interface Serial1/1
 description To-SpokeA
 ip address 192.168.17.7 255.255.255.0
 ip ospf 1 area 0
!
interface Serial1/2
 description To-SpokeB
 ip address 192.168.27.7 255.255.255.0
 ip ospf 1 area 0
!
interface Serial1/3
 description To-SpokeC
 ip address 192.168.37.7 255.255.255.0
 ip ospf 1 area 0
end

IPsec VPN 配置

对于IPSec VPN配置部分HuB、SpokeA,B,C配置均一致,直接使用即可。

crypto ikev2 keyring cisco-ikev2-keyring
 peer dmvpn-node
  description symmetric pre-shared key for the hub/spoke
  address 0.0.0.0 0.0.0.0
  pre-shared-key cisco123
 !        
!
crypto ikev2 profile cisco-ikev2-profile
 match identity remote address 0.0.0.0 
 authentication remote pre-share
 authentication local pre-share
 keyring local cisco-ikev2-keyring
!
crypto ipsec transform-set cisco-ts esp-3des esp-md5-hmac 
 mode tunnel
!
crypto ipsec profile cisco-ipsec-ikev2
 set transform-set cisco-ts 
 set ikev2-profile cisco-ikev2-profile
!
interface Tunnel1
 tunnel protection ipsec profile cisco-ipsec-ikev2

附录

NHRP工作过程报文收发

                           +-------+          
                           |  Hub  | 172.168.1.8  tunnel       
                           +-------+ 192.168.78.8 interface    
                          /         \         
                         /           \        
172.168.1.1 tunnel      /             \ 172.168.1.2 tunnel
192.168.17.1 interface /               \ 192.168.27.2 interface
               +-------+                +-------+
               |Spoke-A|                |Spoke-B|
               +-------+                +-------+

===========================================Registration=========================================================
Internet Protocol Version 4, Src: 192.168.17.1, Dst: 192.168.78.8【NHRP Registration Request】
Generic Routing Encapsulation (NHRP)
Next Hop Resolution Protocol (NHRP Registration Request)
    NHRP Fixed Header                                      【NHRP报文固定信息 RFC2332 "5.1 NHRP Fixed Header"】
        Address Family Number: IPv4 (0x0001)                     【RFC2332 "ar$afn"】
        Protocol Type (short form): IPv4 (0x0800)                【RFC2332 "ar$pro.type"】
        Protocol Type (long form): 0000000000                    【RFC2332 "ar$pro.type"】
        Hop Count: 255                                           【RFC2332 "ar$hopcnt"】
        Packet Length: 105                                       【RFC2332 "ar$pktsz"】
        NHRP Packet Checksum: 0xab06 [correct]                   【RFC2332 "ar$chksum"】
        Extension Offset: 52                                     【RFC2332 "ar$extoff"】
        Version: 1 (NHRP - rfc2332)                              【RFC2332 "ar$op.version"】
        NHRP Packet Type: NHRP Registration Request (3)          【RFC2332 "ar$op.type"】
        Source Address Type/Len: NSAP format/4                   【RFC2332 "ar$shtl"】
        Source SubAddress Type/Len: NSAP format/0                【RFC2332 "ar$sstl"】
    NHRP Mandatory Part                                    【NHRP报文必须携带的 特定信息 RFC2332 "5.2.0 Mandatory Part"】
        Source Protocol Len: 4                                   【RFC2332 "Src Proto Len"】
        Destination Protocol Len: 4                              【RFC2332 "Dst Proto Len"】
        Flags: 0x8002, Uniqueness Bit, Cisco NAT Supported       【RFC2332 "Flags"】
        Request ID: 0x00010007 (65543)                           【RFC2332 "Request ID"】*
        Source NBMA Address: 192.168.17.1                        【RFC2332 "Source NBMA Address"】(SpokeA,interface IP Address)
        Source Protocol Address: 172.168.1.1                     【RFC2332 "Source Protocol Address"】(SpokeA,Tunnel IP Address)
        Destination Protocol Address: 172.168.1.8                【RFC2332 "Destination Protocol Address"】(向Hub进行注册)
        Client Information Entry
    Responder Address Extension
    Forward Transit NHS Record Extension
    Reverse Transit NHS Record Extension
    NHRP Authentication Extension
    Cisco NAT Address Extension
    End of Extension

Internet Protocol Version 4, Src: 192.168.78.8, Dst: 192.168.17.1【NHRP Registration Reply】
Generic Routing Encapsulation (NHRP)
Next Hop Resolution Protocol (NHRP Registration Reply)
    NHRP Fixed Header
        Address Family Number: IPv4 (0x0001)
        Protocol Type (short form): IPv4 (0x0800)
        Protocol Type (long form): 0000000000
        Hop Count: 255
        Packet Length: 125
        NHRP Packet Checksum: 0x8443 [correct]
        Extension Offset: 52
        Version: 1 (NHRP - rfc2332)
        NHRP Packet Type: NHRP Registration Reply (4)           【标识 NHRP Packet Type】
        Source Address Type/Len: NSAP format/4
        Source SubAddress Type/Len: NSAP format/0
    NHRP Mandatory Part
        Source Protocol Len: 4
        Destination Protocol Len: 4
        Flags: 0x8002, Uniqueness Bit, Cisco NAT Supported
        Request ID: 0x00010007 (65543)                           【与Registration Request信息一致】
        Source NBMA Address: 192.168.17.1                        【与Registration Request信息一致】
        Source Protocol Address: 172.168.1.1                     【与Registration Request信息一致】
        Destination Protocol Address: 172.168.1.8                【与Registration Request信息一致】
        Client Information Entry
    Responder Address Extension
    Forward Transit NHS Record Extension
    Reverse Transit NHS Record Extension
    NHRP Authentication Extension
    Cisco NAT Address Extension
    End of Extension
===========================================Registration=========================================================


===========================================Resolution=========================================================

Internet Protocol Version 4, Src: 192.168.17.1, Dst: 192.168.78.8【NHRP Resolution Request】【SpokeA to NHS】
Generic Routing Encapsulation (NHRP)
Next Hop Resolution Protocol (NHRP Resolution Request)
    NHRP Fixed Header
        Address Family Number: IPv4 (0x0001)
        Protocol Type (short form): IPv4 (0x0800)
        Protocol Type (long form): 0000000000
        Hop Count: 255
        Packet Length: 85
        NHRP Packet Checksum: 0xf12e [correct]
        Extension Offset: 52
        Version: 1 (NHRP - rfc2332)
        NHRP Packet Type: NHRP Resolution Request (1)
        Source Address Type/Len: NSAP format/4
        Source SubAddress Type/Len: NSAP format/0
    NHRP Mandatory Part
        Source Protocol Len: 4
        Destination Protocol Len: 4
        Flags: 0xc802, Is Router, Authoritative, Stable Binding, Cisco NAT Supported
        Request ID: 0x00000006 (6)
        Source NBMA Address: 192.168.17.1                       【SpokeA,interface IP Address】
        Source Protocol Address: 172.168.1.1                    【SpokeA,Tunnel IP Address】
        Destination Protocol Address: 172.168.1.2               【SpokeB,Tunnel IP Address】
        Client Information Entry
    Responder Address Extension
    Forward Transit NHS Record Extension
    Reverse Transit NHS Record Extension
    NHRP Authentication Extension
    Cisco NAT Address Extension
    End of Extension

Internet Protocol Version 4, Src: 192.168.78.8, Dst: 192.168.27.2【NHRP Resolution Request】【Hub to SpokeB】
Generic Routing Encapsulation (NHRP)
Next Hop Resolution Protocol (NHRP Resolution Request)
    NHRP Fixed Header
    NHRP Mandatory Part
        Source Protocol Len: 4
        Destination Protocol Len: 4
        Flags: 0xc802, Is Router, Authoritative, Stable Binding, Cisco NAT Supported
        Request ID: 0x00000006 (6)
        Source NBMA Address: 192.168.17.1
        Source Protocol Address: 172.168.1.1
        Destination Protocol Address: 172.168.1.2
        Client Information Entry
    Responder Address Extension
    Forward Transit NHS Record Extension
    Reverse Transit NHS Record Extension
    NHRP Authentication Extension
    Cisco NAT Address Extension
    End of Extension

Internet Protocol Version 4, Src: 192.168.27.2, Dst: 192.168.17.1【NHRP Resolution Reply】【SpokeB to SpokeA】
Generic Routing Encapsulation (NHRP)
Next Hop Resolution Protocol (NHRP Resolution Reply)
    NHRP Fixed Header
        Address Family Number: IPv4 (0x0001)
        Protocol Type (short form): IPv4 (0x0800)
        Protocol Type (long form): 0000000000
        Hop Count: 255
        Packet Length: 133
        NHRP Packet Checksum: 0x1550 [correct]
        Extension Offset: 60
        Version: 1 (NHRP - rfc2332)
        NHRP Packet Type: NHRP Resolution Reply (2)
        Source Address Type/Len: NSAP format/4
        Source SubAddress Type/Len: NSAP format/0
    NHRP Mandatory Part
        Source Protocol Len: 4
        Destination Protocol Len: 4
        Flags: 0xf802, Is Router, Authoritative, Stable Association, Uniqueness Bit, Stable Binding, Cisco NAT Supported
        Request ID: 0x00000006 (6)                                  【与NHRP Resolution Request的值一致】
        Source NBMA Address: 192.168.17.1
        Source Protocol Address: 172.168.1.1
        Destination Protocol Address: 172.168.1.2                【RFC2332 "Destination Protocol Address"】(向Hub进行注册)
        Client Information Entry
            Code: Success (0)                                       【RFC2332 Page 18 "Code"】
            Prefix Length: 32                                       【RFC2332 “Prefix Length”】
            Unused: 0                                               
            Max Transmission Unit: 17912                            【RFC2332 “ Maximum Transmission Unit”】
            Holding Time (s): 7200                                  【RFC2332 “Holding Time”】
            Client Address Type/Len: NSAP format/4                  【RFC2332 “Cli Addr T/L”】
            Client Sub Address Type/Len: NSAP format/0              【RFC2332 “Cli SAddr T/L”】
            Client Protocol Length: 4                               【RFC2332 “Cli Proto Len”】
            CIE Preference Value: 0                                 【RFC2332 “Preference”】
            Client NBMA Address: 192.168.27.2                       【RFC2332 “Client NBMA Address”】(回复了请求的NBMA address)
            Client Protocol Address: 172.168.1.2                    【RFC2332 “Client Protocol Address”】(回复的请求的 Tunnel IP Address)
    Responder Address Extension
    Forward Transit NHS Record Extension
    Reverse Transit NHS Record Extension
    NHRP Authentication Extension
    Cisco NAT Address Extension
    End of Extension
===========================================Resolution=========================================================

完整的数据包可以在此下载。 数据包1数据包2

NHRP Resolution debug

SpokeA,需要访问SpokeB,SpokeA先查询本地NHRP映射表,未发现SpokeB
*Jul 20 15:22:43.523: NHRP: NHRP could not map 172.168.1.2 to NBMA, cache entry not found

  1. SpokeA发送Resolution Request到Hub节点。
    *Jul 20 15:22:43.527: NHRP: Sending packet to NHS 172.168.1.8 on Tunnel1

  2. 如果请求的节点在Hub上有NHRP映射表,则Hub转发NHRP Resolution Request报文,到此请求节点上(SpokeB)
    *Jul 20 15:23:03.479: NHRP: Receive Resolution Request via Tunnel1 vrf 0, packet size: 85
    *Jul 20 15:23:03.483: NHRP: Forwarding request due to authoritative request.
    如果请求的节点在Hub上没有映射表,则回复 NHRP Error Indication,终止请求。

  3. 当SpokeB收到了Hub发送过来的Resolution Request之后无误,学习SpokeA的NBMA地址信息,然后直接向SpokeA回复 Resolution Reply消息
    *Jul 20 15:22:13.443: NHRP: NHRP could not map 172.168.1.1 to NBMA, cache entry not found
    *Jul 20 15:22:13.459: NHRP: Updating with NHS cache for dst:172.168.1.1
    *Jul 20 15:22:13.547: NHRP: Send Resolution Reply via Tunnel1 vrf 0, packet size: 133

  4. 当SpokeA收到了Resolution Reply消息之后学习SpokeB NBMA地址信息,此时双方均已学习到了NBMA地址映射关系,后续的所有流量将直接遵循路由转发,不再经过Hub进行流量转发。
    *Jul 20 15:22:43.727: NHRP: Receive Resolution Reply via Tunnel1 vrf 0, packet size: 133
    *Jul 20 15:22:43.743: NHRP: Successfully attached NHRP subblock for Tunnel Endpoints (VPN: 172.168.1.2, NBMA: 192.168.27.2)

    debug部分的完整信息,请在此下载

DMVPN配置简单说明

Hub

!Hub
interface Serial1/0
 ip address 192.168.78.8 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.8 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413    !配置NHRP认证字符串,同一个NBMA网络环境中的设备必须配置相同的认证字符串。
 ip nhrp map multicast dynamic   !使用动态的方式(注册方式),来生成NHRP映射表项。
 ip nhrp network-id 10           !定义NHRP域,此参数本地唯一。当数据包从GRE接口进入的时候需要通过NHRP域来定义到不同的DMVPN中。
 tunnel source 192.168.78.8      !配置GRE隧道源地址。
 tunnel mode gre multipoint      !配置GRE隧道模式,mGRE。
 tunnel key 43413                !配置GRE key

SpokeA

!SpokeA
interface Serial1/0
 ip address 192.168.17.1 255.255.255.0
 ip ospf 1 area 0
!
interface Tunnel1
 ip address 172.168.1.1 255.255.255.0
 no ip redirects
 ip nhrp authentication 43413
 ip nhrp map 172.168.1.8 192.168.78.8   !Configures static IP-to-NBMA address mapping on the station.
 ip nhrp map multicast 192.168.78.8     !添加NBMA地址以接收发送报文。
 ip nhrp network-id 10                  !定义NHRP域,此参数本地唯一。当数据包从GRE接口进入的时候需要通过NHRP域来定义到不同的DMVPN中。
 ip nhrp nhs 172.168.1.8                !配置NHS( Next Hop Server)服务器地址(发送注册报文的服务器地址)
 tunnel source 192.168.17.1             !配置GRE隧道源地址。
 tunnel mode gre multipoint
 tunnel key 43413
end

IPsec VPN configure

crypto ikev2 keyring cisco-ikev2-keyring                       !配置IKEv2 keyring 
 peer dmvpn-node                                               !Configure a Peer and associated keys
  description symmetric pre-shared key for the hub/spoke
  address 0.0.0.0 0.0.0.0                                      !因为是动态的方式,所以地址为0.0.0.0
  pre-shared-key cisco123                                      !配置预共享密钥“cisco123”
 !        
!
crypto ikev2 profile cisco-ikev2-profile                       !配置ikev2 profile 
 match identity remote address 0.0.0.0                         !因为是动态的方式,所以地址为0.0.0.0
 authentication remote pre-share                               !均采用预共享密钥方式进行认证
 authentication local pre-share                                !均采用预共享密钥方式进行认证
 keyring local cisco-ikev2-keyring                             !调用之前配置的“keyring”
!
crypto ipsec transform-set cisco-ts esp-3des esp-md5-hmac      !配置transform
 mode tunnel
!
crypto ipsec profile cisco-ipsec-ikev2                         !配置IKEv2 profile
 set transform-set cisco-ts                                    !调用之前配置的transform
 set ikev2-profile cisco-ikev2-profile                         !调用之前的profile—>keyring
!
interface Tunnel1
 tunnel protection ipsec profile cisco-ipsec-ikev2             !接口下应用,保护tunnel口上的流量。

参考文献