关键词:IPSEC,NAT
摘 要:本文简单描述IPSEC及其穿越NAT特性的特点,详细描述了路由器上配置IPSEC穿越NAT的基本方法和详细步骤,给出了一种IPSEC穿越NAT方法的配置案例。
缩略语:
缩略语 | 英文全名 | 中文解释 |
IPSEC | IP Security Protocol | IP网络安全协议 |
IKE | Internet Key Exchange | Internet密钥交换协议 |
NAT | Network Address Translation | 网络地址转换协议 |
1 特性介绍
IPSec(IP Security)协议族是IETF制定的一系列协议,它为IP数据报提供了高质量的、可互操作的、基于密码学的安全性。特定的通信方之间在IP层通过加密与数据源验证等方式,来保证数据报在网络上传输时的私有性、完整性、真实性和防重放。
IPSec通过AH(Authentication Header,认证头)和ESP(Encapsulating Security Payload,封装安全载荷)这两个安全协议来实现上述目标。并且还可以通过IKE(Internet Key Exchange,因特网密钥交换协议)为IPSec提供了自动协商交换密钥、建立和维护安全联盟的服务,以简化IPSec的使用和管理。
如果两个IPsec设备之间存在一个或多个NAT设备,由于NAT设备会改变源IP地址和源端口,对IPsec报文和IKE协商都造成影响,因此必须配置IPSec/IKE的NAT穿越功能。为了节省IP地址空间,ISP经常会在公网中加入NAT网关,以便于将私有IP地址分配给用户,此时可能会导致IPSec/IKE隧道的两端一端为公网地址,另一端为私网地址,所以必须在私网侧配置NAT穿越,保证隧道能够正常协商建立。
2 特性的优点
IPSEC穿越NAT特性可以帮助用户穿过NAT网关在公网地址和私网地址间建立VPN隧道,极大拓展了IPSEC VPN的应用范围。
3 使用指南
3.1 使用场合
用户在公网和私网间建立VPN隧道时,若需要对传输数据进行验证和加密,则推荐使用IPSEC穿越NAT特性。
要求两侧作为VPN网关的路由器设备必须支持IPSEC穿越NAT特性,我司路由器设备均支持此特性。
路由器Comware版本要求是Comware V3 Release 0006及以上。
3.2 配置步骤
IPSec协议有两种操作模式:传输模式和隧道模式。在传输模式下,AH或ESP被插入到IP头之后但在所有传输层协议之前,或所有其他IPSec协议之前。在隧道模式下,AH或ESP插在原始IP头之前,另外生成一个新头放到AH或ESP之前。从安全性来讲,隧道模式优于传输模式。它可以完全地对原始IP数据报进行验证和加密;此外,可以使用IPSec对等体的IP地址来隐藏客户机的IP地址。从性能来讲,隧道模式比传输模式占用更多带宽,因为它有一个额外的IP头。因此,到底使用哪种模式需要在安全性和性能间进行权衡。
在传输模式和隧道模式下的IPSEC,均支持穿越NAT特性。该特性删去了IKE协商过程中对UDP端口号的验证过程,同时实现了对VPN隧道中NAT网关设备的发现功能,即如果发现NAT网关设备,则将在之后的IPSec数据传输中使用UDP封装(即将IPSec报文封装到IKE协商所使用的UDP连接隧道里)的方法,避免了NAT网关对IPSec报文进行篡改(NAT网关设备将只能够修改最外层的IP和UDP报文头,对UDP报文封装的IPSec报文将不作修改),从而保证了IPSec报文的完整性(IPSec数据加密解密验证过程中要求报文原封不动地被传送到接收端)。
配置IPSEC穿越NAT,需要配置以下内容:
l IKE安全提议和IKE对等体,为IPSec提供自动协商交换密钥和建立安全联盟的服务,此外,IKE对等体中设置的NAT穿越功能开关可以保证协商及数据报文成功穿过NAT网关
l 配置IPSEC访问控制列表,来判断报文是否进行安全保护
l 配置IPSEC安全提议,为安全联盟提供各种安全参数
l 配置IPSEC安全策略,来决定何种报文采用何种安全提议
l 在接口上应用IPSEC安全策略
3.2.1 配置IKE安全提议
IKE提议定义了一套属性数据来描述IKE协商怎样进行安全通信。配置IKE提议包括创建IKE提议、选择加密算法、选择验证方法、选择验证算法、选择Diffie-Hellman组标识和设置安全联盟生存周期。
用户可以按照优先级创建多条IKE提议,但是协商双方必须至少有一条匹配的IKE提议才能协商成功。协商时将从优先级最高的提议开始匹配一条双方都相同的提议,匹配的原则是:协商双方具有相同的加密算法、验证算法、验证方法和DH组标识。
执行ike proposal命令会进入IKE提议视图。在IKE提议视图下可以配置加密算法、验证算法、组标识、生存周期和验证方法。系统提供一条缺省的IKE提议,具有最低的优先级。
配置IKE提议,路由器上需要做如下配置:
1) 创建IKE安全提议。
2) 选择加密算法。
3) 选择验证方法。
4) 选择验证算法。
5) 选择Diffie-Hellman组标识。
6) 配置ISAKMP SA生存周期。
& 说明:
在日常使用时通常省略IKE安全提议的设置,直接使用缺省提议完成协商。
3.2.2 配置IKE对等体
IKE对等体是成功实现第一阶段协商的关键配置。在对等体中,需要设置协商模式,其中野蛮模式支持NAT穿越,而主模式不支持;需要配置IKE协商所使用的身份认证字,以保证双方协商的合法性;无论使用地址协商(id-type ip)还是NAME协商(id-type name),IPSEC SA的发起方必须配置对端安全网关设备的IP地址,当发起协商时,发起方会发送自己的IP地址给对端来标识自己的身份。若使用NAME协商方式,则必须指定对端的NAME,且需要保证对方指定的IKE NAME与之相同,否则将代之以路由器名,这很可能发生校验错误而引起IKE协商失败;根据穿越NAT的需要,可选择配置NAT穿越功能。此外,还可以配置本端安全网关ID的类型、指定对端安全网关设备的ID、配置子网类型等。
配置IKE对等体,路由器上需要做如下配置:
1) 创建IPSEC对等体。
2) 配置IKE协商模式(IPSEC穿越NAT,必须配置为野蛮模式)。
3) 配置身份验证字(必须)。
4) 配置本端安全网关ID的类型。
5) 指定对端安全网关设备的ID。
6) 配置安全网关的IP地址。
7) 配置NAT穿越功能(必须)。
8) 配置IKE对等体的子网类型。
& 说明:
以上配置都在IKE PEER视图中完成。
3.2.3 配置IPSEC访问控制列表
用于IPSec的访问控制列表的作用不同于在防火墙中所介绍的访问控制列表。一般的访问控制列表是用来决定一个接口上哪些数据可通过,哪些要被拒绝;而IPSec是根据访问控制列表中的规则来确定哪些报文需要安全保护,哪些报文不需要安全保护,故用于IPSec的访问控制列表可称为加密访问控制列表。加密访问控制列表匹配(permit)的报文将被保护,加密访问控制列表拒绝(deny)的报文将不被保护。加密访问控制列表既可用于加密入口数据流,也可用于加密出口数据流。
配置IPSEC访问控制列表,路由器上需要做如下配置:
1) 创建IPSEC访问控制列表。
2) 配置相应的匹配规则(rule)。
& 说明:
IPSec对访问控制列表(ACL)中permit的数据流进行保护,因此建议用户精确地配置ACL,只对确实需要IPSec保护的数据流配置permit,避免盲目地使用关键字any。
建议用户将本端和对端的ACL配置成互为镜像
3.2.4 配置IPSEC安全提议
安全提议保存IPSec需要使用的特定安全性协议以及加密/验证算法,为IPSec协商安全联盟提供各种安全参数。为了能够成功的协商IPSec的安全联盟,两端必须使用相同的安全提议。
配置IPSEC安全提议,路由器上需要做如下配置:
1) 定义安全提议。
2) 指定加密卡提议使用的加密卡(仅用于加密卡)。
3) 选择安全协议。
4) 选择安全算法。
5) 设置安全协议对IP报文的封装模式。
& 说明:
必须首先通过transform命令选择了相应的安全协议后,该安全协议所需的安全算法才可配置。例如,如果使用transform命令选择了esp,那么只有ESP所需的安全算法才可配置,而AH所需的安全算法则不能配置。
3.2.5 配置IPSEC安全策略
安全策略规定了对什么样的数据流采用什么样的安全提议。安全策略分为手工安全策略和IKE协商安全策略,前者需要用户手工配置密钥、SPI等参数,在隧道模式下还需要手工配置安全隧道两个端点的IP地址;后者则由IKE自动协商生成这些参数。IPSEC穿越NAT必须使用IKE自动协商方式配置安全策略。
配置IKE自动协商方式的IPSEC安全策略,路由器上需要做如下配置:
1) 用IKE创建安全策略。
2) 在安全策略中引用安全提议。
3) 在安全策略中引用访问控制列表。
4) 在安全策略中引用IKE对等体。
5) 配置安全联盟生存周期(可选)。
6) 配置协商时使用的PFS特性。
& 说明:
必须首先通过transform命令选择了相应的安全协议后,该安全协议所需的安全算法才可配置。例如,如果使用transform命令选择了esp,那么只有ESP所需的安全算法才可配置,而AH所需的安全算法则不能配置。
3.2.6 应用IPSEC安全策略
为使定义的安全联盟生效,应在每个要加密的出站数据、解密的入站数据所在接口(逻辑的或物理的)上应用一个安全策略组,由这个接口根据所配置的安全策略组和对端加密路由器配合进行报文的加密处理。当安全策略组被从接口上删除后,此接口便不再具有IPSec的安全保护功能。
应用IPSEC安全策略,路由器上需要做如下配置:
l 进入相应的接口视图
l 使能IPSEC安全策略
3.3 注意事项
当配置IPSEC穿越NAT时,必须注意以下事项:
1) IKE对等体中必须指定协商模式为野蛮模式。
2) IPSEC私网侧必须指定IPSEC公网侧路由器的IP地址。
3) IPSEC私网侧必须将默认路由指定到NAT网关。
4) 对隧道模式封装的IPSEC,公网侧必须指定内网路由;对传输模式封装的IPSEC,则不必指定回到内网的路由。
3.4 举例:隧道模式下的IPSEC穿越NAT
3.4.1 组网需求
配置H3C AR2831路由器3台,分别配置为IPSEC私网侧、NAT网关和IPSEC公网侧。
本例使用一个通用组网,要求IPSEC公网侧与NAT网关路由可通,IPSEC私网侧将默认路由指定到NAT网关。
3.4.2 组网图
图 1 IPSEC穿越NAT连接图
3.4.3 硬件连接图
3.4.4 配置
1. 配置IPSEC私网侧路由器AR2831_1
当前视图 | 配置命令 | 简单说明 |
| # | 适用版本Comware V3 R0009 |
[H3C] | ike local-name RT1 | 指定本端安全网关的名字 |
[H3C] | ike peer test1 | 创建IKE对等体test1 |
[H3C-ike-peer-test1] | exchange-mode aggressive | 将交换模式设置为野蛮模式 |
[H3C-ike-peer-test1] | pre-shared-key h3c | 设置身份验证字为h3c |
[H3C-ike-peer-test1] | id-type name | 配置IKE协商过程中使用的ID类型为name |
[H3C-ike-peer-test1] | remote-name RT3 | 指定对端安全网关设备ID |
[H3C-ike-peer-test1] | remote-address 100.100.100.17 | 指定对端安全网关设备的IP地址 |
[H3C-ike-peer-test1] | nat traversal | 配置NAT穿越功能 |
[H3C-ike-peer-test1] | Quit | 退出IKE对等体视图 |
[H3C] | ipsec proposal aaa1 | 创建IPSEC安全提议aaa1 |
[H3C-ipsec-proposal-aaa1] | encapsulation-mode tunnel | 指定报文封装形式为隧道模式 |
[H3C-ipsec-proposal-aaa1] | transform esp | 指定安全协议为ESP |
[H3C-ipsec-proposal-aaa1] | esp encryption-algorithm des | 指定加密算法为des |
[H3C-ipsec-proposal-aaa1] | esp authentication-algorithm md5 | 指定验证算法为md5 |
[H3C-ipsec-proposal-aaa1] | quit | 推出IPSEC安全提议视图 |
[H3C] | acl number 3004 | 创建扩展安全访问列表3004 |
[H3C-acl-adv-3004] | rule 0 permit ip source 192.168.0.0 0.0.0.255 destination 13.13.1.0 0.0.0.255 | 创建匹配规则 |
[H3C-acl-adv-3004] | quit | 退出访问列表视图 |
[H3C] | ipsec policy map1 1 isakmp | 创建自动协商模式的IPSEC安全策略 |
[H3C-ipsec-policy-isakmp-map1-1] | security acl 3004 | 引用访问列表3004 |
[H3C-ipsec-policy-isakmp-map1-1] | ike-peer test1 | 引用IKE对等体test1 |
[H3C-ipsec-policy-isakmp-map1-1] | proposal aaa1 | 引用安全提议aaa1 |
[H3C-ipsec-policy-isakmp-map1-1] | quit | 退出安全策略视图 |
[H3C] | interface Ethernet3/0 | 进入与私网PC连接的接口E3/0 |
[H3C-Ethernet3/0] | ip address 192.168.0.11 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/0] | quit | 退出接口视图 |
[H3C] | interface Ethernet3/1 | 进入与NAT网关连接的接口E3/1 |
[H3C-Ethernet3/1] | ip address 17.17.17.12 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/1] | Ipsec policy map1 | 在接口上应用安全策略map1 |
[H3C-Ethernet3/1] | quit | 退出接口视图 |
[H3C] | ip route-static 0.0.0.0 0.0.0.0 17.17.17.1 preference 60 | 配置默认路由指向NAT网关 |
2. 配置NAT网关路由器AR2831_2
当前视图 | 配置命令 | 简单说明 |
| # | 适用版本Comware V3 R0009 |
[H3C] | nat address-group 0 100.100.100.100 100.100.100.110 | 创建NAT地址池0 |
[H3C] | acl number 3000 | 创建扩展安全访问列表3000 |
[H3C-acl-adv-3000] | ru permit ip | 创建匹配规则 |
[H3C-acl-adv-3000] | quit | 退出访问列表视图 |
[H3C] | interface Ethernet3/0 | 进入与私网路由器AR2831_1连接的接口E3/0 |
[H3C-Ethernet3/0] | ip address 17.17.17.1 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/0] | quit | 退出接口视图 |
[H3C] | interface Ethernet3/1 | 进入与公网侧路由器AR2830_3连接的接口E3/1 |
[H3C-Ethernet3/1] | ip address 100.100.100.16 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/1] | nat outbound 3000 address-group 0 | 在接口上应用NAT,地址池指定为0,过滤用安全列表使用3000 |
[H3C-Ethernet3/1] | quit | 退出接口视图 |
[H3C] | ip route-static 13.13.0.0 255.255.0.0 100.100.100.17 preference 60 ip route-static 192.168.0.0 255.255.0.0 17.17.17.12 preference 60 | 配置静态路由路由,保证路由可通 |
3. 配置IPSEC公网侧路由器AR2831_3
当前视图 | 配置命令 | 简单说明 |
| # | 适用版本Comware V3 R0009 |
[H3C] | ike local-name RT3 | 指定本端安全网关的名字 |
[H3C] | ike peer test1 | 创建IKE对等体test1 |
[H3C-ike-peer-test1] | exchange-mode aggressive | 将交换模式设置为野蛮模式 |
[H3C-ike-peer-test1] | pre-shared-key h3c | 设置身份验证字为h3c |
[H3C-ike-peer-test1] | id-type name | 配置IKE协商过程中使用的ID类型为name |
[H3C-ike-peer-test1] | remote-name RT1 | 指定对端安全网关设备ID |
[H3C-ike-peer-test1] | nat traversal | 配置NAT穿越功能 |
[H3C-ike-peer-test1] | Quit | 退出IKE对等体视图 |
[H3C] | ipsec proposal aaa1 | 创建IPSEC安全提议aaa1 |
[H3C-ipsec-proposal-aaa1] | encapsulation-mode tunnel | 指定报文封装形式为隧道模式 |
[H3C-ipsec-proposal-aaa1] | transform esp | 指定安全协议为ESP |
[H3C-ipsec-proposal-aaa1] | esp encryption-algorithm des | 指定加密算法为des |
[H3C-ipsec-proposal-aaa1] | esp authentication-algorithm md5 | 指定验证算法为md5 |
[H3C-ipsec-proposal-aaa1] | quit | 推出IPSEC安全提议视图 |
[H3C] | acl number 3004 | 创建扩展安全访问列表3004 |
[H3C-acl-adv-3004] | rule 0 permit ip source 13.13.1.0 0.0.0.255 destination 192.168.0.0 0.0.0.255 | 创建匹配规则 |
[H3C-acl-adv-3004] | quit | 退出访问列表视图 |
[H3C] | ipsec policy map1 1 isakmp | 创建自动协商模式的IPSEC安全策略 |
[H3C-ipsec-policy-isakmp-map1-1] | security acl 3004 | 引用访问列表3004 |
[H3C-ipsec-policy-isakmp-map1-1] | ike-peer test1 | 引用IKE对等体test1 |
[H3C-ipsec-policy-isakmp-map1-1] | proposal aaa1 | 引用安全提议aaa1 |
[H3C-ipsec-policy-isakmp-map1-1] | quit | 退出安全策略视图 |
[H3C] | interface Ethernet3/0 | 进入与内网PC连接的接口E3/0 |
[H3C-Ethernet3/0] | ip address 13.13.1.1 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/0] | quit | 退出接口视图 |
[H3C] | interface Ethernet3/1 | 进入与NAT网关连接的接口E3/1 |
[H3C-Ethernet3/1] | ip address 100.100.100.17 255.255.255.0 | 配置IP地址 |
[H3C-Ethernet3/1] | Ipsec policy map1 | 在接口上应用安全策略map1 |
[H3C-Ethernet3/1] | quit | 退出接口视图 |
[H3C] | ip route-static 17.17.17.0 0.0.0.255 100.100.100.16 preference 60 ip route-static 192.168.0.0 0.0.0.255 100.100.100.16 preference 60 | 配置到私网的默认路由指向NAT网关 |
3.4.5 验证结果
如果连接正常,IPSEC私网侧上和IPSEC公网侧应该显示IKE两个阶段均建立成功,私网侧主机向公网侧主机可以PING通。
在IPSEC私网侧路由器命令行界面上执行display ike sa命令,当看到IPSEC两个阶段均已建立的时候,可以认为安全联的建立成功。
[H3C]dis ike sa
connection-id peer flag phase doi
----------------------------------------------------------------------- 3 100.100.1.17 RD|ST 2 IPSEC
2 100.100.1.17 RD|ST 1 IPSEC
3.4.6 故障排除
对于连接不上的情况,首先应该考虑IPSEC私网侧路由器是否可以通过NAT与IPSEC公网侧路由器连通。可用ping命令测试。如果ping不通,则说明网络不通,需要首先解决网络连通性问题。网络连通性问题可能性很多,此处不做描述。
如果能够ping通,则说明网络是连通的,请注意下面情况。
对于安全联盟无法建立的情况,有以下几种可能:
l 触发建立IPSEC隧道失败,执行“display ike sa”,没有任何显示。
[H3C]dis ike sa
connection-id peer flag phase doi
-------------------------------------------------------------------------
[H3C]
l 问题原因:一般来说此种情况出现的原因很多,大部分是由于配置错误造成的。可检查是否已在接口上应用IPSEC安全策略;检查安全访问ACL的是否有报文匹配;检查NAT转换是否起作用;私网侧路由器未指定默认路由到NAT网关等。
l 解决方法: 补充配置;修改规则,使ACL能正确匹配触发报文;
l 触发建立IPSEC隧道失败,执行“display ike sa”,第一阶段建立失败。
[H3C]dis ike sa
connection-id peer flag phase doi
----------------------------------------------------------------------
3 <unnamed> NONE 1 IPSEC
flag meaning
RD--READY ST--STAYALIVE RL--REPLACED FD--FADING TO--TIMEOUT
[H3C]
l 问题原因:ACL规则非镜像、未使能NAT穿越功能、IPSEC公网侧路由器未指定回内网的路由、未指定交换模式为野蛮模式、指定对端地址错误、IPSEC私网侧路由器未在IKE对等体中指定对端的IP地址、身份验证字不匹配或未配置等。
l 解决方法:请参照以上原因分别对照修改。
l 触发建立IPSEC隧道失败,执行“display ike sa”,第二阶段建立失败。
[H3C]dis ike sa
connection-id peer flag phase doi
---------------------------------------------------------------------------
6 <unnamed> NONE 2 IPSEC
5 100.100.1.17 RD|ST 1 IPSEC
flag meaning
RD--READY ST--STAYALIVE RL--REPLACED FD--FADING TO--TIMEOUT
[H3C]
问题原因:封装模式不一致、加密算法不一致、验证算法不一致、DH交换方式不一致、本端失败的SA未清除等。
解决方法:请参照以上原因分别对照检查。
可使用调试命令查看IPSEC安全联盟协商建立的过程信息,下面附有IPSEC协商过程详细的协商信息。
<H3C> debugging ipsec sa
<H3C> debugging ike sa
<H3C> terminal debugging
<H3C> terminal monitor
*0.1237692 H3C IPSEC/8/DBG:IPSec drop packet! Notify IKE to negotiate SA for
IPsec policy: map1-10
*0.1238155 H3C IPSEC/8/DBG:Create SA. New ESP(RFC2406)
*0.1238220 H3C IPSEC/8/DBG:Enc Alg:DES Auth Alg:HMAC-MD5-96
*0.1238300 H3C IPSEC/8/DBG:Src:17.17.17.12 Dst:100.100.1.17 SPI:907416965(0x36161585)
*0.1238400 H3C IPSEC/8/DBG:Create SA. New ESP(RFC2406)
*0.1238470 H3C IPSEC/8/DBG:Enc Alg:DES Auth Alg:HMAC-MD5-96
*0.1238550 H3C IPSEC/8/DBG:Src:100.100.1.17 Dst: 17.17.17.12 SPI:2343165679(0x8ba9deef
)
*0.1238650 H3C IPSEC/8/DBG:Deleting SA...
*0.1238710 H3C IPSEC/8/DBG:Src: 100.100.1.17 Dst: 17.17.17.12 SPI:2343165679(0x8ba9deef
)
*0.1238810 H3C IPSEC/8/DBG:Done.
*0.1238860 H3C IPSEC/8/DBG:Putting TDB 511bcc4 into trash.
上述调试信息,描述了整个IPSEC SA创建的过程,明显可以分为协商SA参数、使用SA更新SDAB两个过程。
4 关键命令
4.1 nat traversal
【命令】
nat traversal
undo nat traversal
【视图】
ike-peer视图
【参数】
无
【描述】
nat traversal用于配置IPSec/IKE的NAT穿越功能,undo nat traversal用来取消IPSec/IKE的NAT穿越功能。
此命令适用于IPSec/IKE组建的VPN隧道中加入了NAT网关的情况。
为了节省IP地址空间,ISP经常会在公网中加入NAT网关,以便于将私有IP地址分配给用户,此时可能会导致IPSec/IKE隧道的两端一端为公网地址,另一端为私网地址,所以必须在私网侧配置NAT穿越,保证隧道能够正常协商建立。
【举例】
[H3C] ike peer new_peer
[H3C-ike-peer-new_peer] nat traversal