IPSec V.P.N与NAT穿越(基于思科设备)

IPSec V.P.N与NAT穿越(基于思科设备)

IPSec V.P.N与NAT穿越(基于思科设备)

  IPSec是基于网络层的,不能穿越通常的NAT、防火墙,这篇文章就是要讨论,在需要NAT网络的环境中,如果使用IPsec ××× 隧道技术。
IPsec 协议有两种运行模式:
  IPSec隧道模式
  IPSec传输模式
  隧道模式通常是建立在双方的网关之间的。传输模式下,IPSec主要对上层的传输进行封装保护,通常情况下,传输模式只用于两台主机之间的通信。
  因为我们讨论的是NAT环境下的×××传输,所以我们就只是关注隧道模式下IPSec是如何动作的。
  不过我们先来看一看两种模式的区别,下面给出包头的结构,就一目了然。
  一、封装AH认证头的两种方式的不同
  1、传输模式:
   AH协议(IP协议号为51)提供数据源认证、数据完整性校验和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据。AH的工作原理是在每一个数据包上添加一个身份验证报文头,此报文头插在标准IP包头后面,对数据提供完整性保护。可选择的认证算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)等。MD5算法的计算速度比SHA-1算法快,而SHA-1算法的安全强度比MD5算法高。
  设计AH认证协议的目的是用来增加IP数据报的安全性。AH协议提供无连接的完整性、数据源认证和抗重放保护服务,但是AH不提供任何保密性服务。IPSec验证报头AH是个用于提供IP数据报完整性、身份认证和可选的抗重传***的机制,但是不提供数据机密性保护。验证报头的认证算法有两种:一种是基于对称加密算法(如DES),另一种是基于单向哈希算法(如MD5或SHA-1)。 传输模式只对上层协议数据(传输层数据)和IP头中的固定字段提供认证保护,把AH插在IP报头的后面,主要适合于主机实现。

 2、隧道模式:
  隧道模式把需要保护的IP包封装在新的IP包中,作为新报文的载荷, 然后把AH插在新的IP报头的后面。隧道模式对整个IP数据报提供认证保护。

二、ESP认证加密方法
传输模式:
隧道模式:
  ESP(Encapsulate Security Payload,封装安全载荷)协议:封装安全载荷(ESP)用于提高Internet协议(IP)协议的安全性。它可为IP提供机密性、数据源验证、抗重放以及数据完整性等安全服务。ESP属于IPSec的机密性服务。其中,数据机密性是ESP的基本功能,而数据源身份认证、数据完整性检验以及抗重传保护都是可选的。ESP主要支持IP数据包的机密性,它将需要保护的用户数据进行加密后再重新封装到新的IP数据包中。
  上面看过了AH和ESP认证头的结构,与两种模式下的不同。下面讨论的是,为什么在NAT环境中,ipsec *** 不能使用AH认证方法?
  IPSec协议的主要目标是保护IP数据包的完整性,这意味着IPSec会禁止任何对数据包的修改。但是NAT处理过程是需要修改IP数据包的IP包头、端口号才能正常工作的。所以,如果从我们的网关出去的数据包经过了ipsec的处理,当这些数据包经过NAT设备时,包内容被NAT设备所改动,修改后的数据包到达目的地主机后其解密或完整性认证处理就会失败,于是这个数据包被认为是非法数据而丢弃。无论传输模式还是隧道模式,AH都会认证整个包头,不同于ESP 的是,AH 还会认证位于AH头前的新IP头,当NAT修改了IP 头之后,IPSec就会认为这是对数据包完整性的破坏,从而丢弃数据包。因此,AH是不可能与NAT一起工作的。
  意思就是说,AH处理数据时,所使用的数据是整个数据包,甚至是IP包头的IP地址,也是处理数据的一部分,对这些数据作整合,计算出一个值,这个值是唯一的,即只有相同的数据,才可能计算出相同的值。当NAT设备修改了IP地址时,就不符合这个值了。这时,这个数据包就被破坏了。
  而ESP并不保护IP包头,ESP保护的内容是ESP字段到ESP跟踪字段之间的内容,因此,如果NAT只是转换IP的话,那就不会影响ESP的计算。但是如果是使用PAT的话,这个数据包仍然会受到破坏。
  所以,在NAT网络中,只能使用IPSec的ESP认证加密方法,不能用AH。
  但是也是有办法解决这个缺陷的,不能修改受ESP保护的TCP/UDP,那就再加一个UDP报头。
解决方案:NAT穿越
  NAT-T的基本思路是IPSec封装好的数据包外再进行一次UDP数据封装。这样,当此数据包穿过NAT网关时,被修改的只是最外层的IP/udp数据报。
NAT-T的操作步骤:
  一、判断双方是否支持NAT-T,这是IKE协商的第一阶段,双方通过发送一个VENDOR ID来识别是否支持NAT-T,等一下做实验会看到这个。
  二、判断通信链路上是否存在NAT设备,这一步是NAT 发现,NAT发现的原理是判断通信方的IP地址和端口是否发生了改变,判断的方法是,使用IP地址和端口号进行HASH运算,送往对方进行校验。一旦发现NAT,则立即进行端口浮动,也就是在IKE协议的第二阶段将IKE的UDP 500浮动到UDP 4500端口。
  三、进行ESP处理

实验步骤

一:IP地址的设置
asa的ip地址

ciscoasa#
ciscoasa# conf t
ciscoasa(config)# int e0/1
ciscoasa(config-if)# ip add 172.16.10.1 255.255.255.0
ciscoasa(config-if)# no shut
ciscoasa(config-if)# nameif inside
ciscoasa(config-if)# int e0/0
ciscoasa(config-if)# ip add 192.168.1.1 255.255.255.252
ciscoasa(config-if)# no shut
ciscoasa(config-if)# nameif outside
ciscoasa(config-if)#exit

nat的ip地址:

R1#conf t
R1(config)#int f0/0
R1(config-if)#ip address 192.168.1.2 255.255.255.252
R1(config-if)#no shut
R1(config-if)#int f0/1
R1(config-if)#ip add 100.0.0.1 255.255.255.252
R1(config-if)#no shut
R1(config-if)#exit

isp的ip地址:

R2#conf t
R2(config)#int f0/1
R2(config-if)#ip add 100.0.0.2 255.255.255.252
R2(config-if)#no shut
R2(config-if)#int f0/0
R2(config-if)#ip add 200.0.0.1 255.255.255.252
R2(config-if)#no shut

R3的IP地址

R3(config)#int f0/0
R3(config-if)#ip add 200.0.0.2 255.255.255.252
R3(config-if)#no shut
R3(config-if)#int f0/1
R3(config-if)#ip add 10.0.0.1 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit

二:路由的设置

asa的路由
ciscoasa(config)# route outside 0 0 192.168.1.2

nat的路由:
R1(config)#ip route 172.16.10.0 255.255.255.0 192.168.1.1
R1(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.2

ISP不设置路由

R3的路由
R3(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.1

三:***的配置

asa的***

ciscoasa(config)# crypto isakmp enable outside
ciscoasa(config)# crypto isakmp policy 1
ciscoasa(config-isakmp-policy)# encryption aes
ciscoasa(config-isakmp-policy)# hash sha
ciscoasa(config-isakmp-policy)# group 2
ciscoasa(config-isakmp-policy)# authentication pre-share
ciscoasa(config-isakmp-policy)# exit
ciscoasa(config)# crypto isakmp key benet address 200.0.0.2
ciscoasa(config)# access-list 200 extended permit ip 172.16.10.0 255.255.255.0 10.0.0.0 255.255.255.0
ciscoasa(config)# crypto ipsec transform-set benet-set esp-aes esp-sha-hmac
ciscoasa(config)# crypto map benet-map 1 match address 200
ciscoasa(config)# crypto map benet-map 1 set peer 200.0.0.2
ciscoasa(config)# crypto map benet-map 1 set transform-set benet-set
ciscoasa(config)# crypto map benet-map interface outside
ciscoasa(config)# crypto isakmp nat-traversal

R3的***:

R3(config)#crypto isakmp policy 1
R3(config-isakmp)#hash sha
R3(config-isakmp)#encryption aes
R3(config-isakmp)#authentication pre-share
R3(config-isakmp)#group 2
R3(config-isakmp)#exit
R3(config)#crypto isakmp key 6 benet address 100.0.0.1
R3(config)#access-list 100 permit ip 10.0.0.0 0.0.0.255 172.16.10.0 0.0.0.255
R3(config)#crypto ipsec transform-set benet-set esp-aes esp-sha-hmac
R3(cfg-crypto-trans)#exit
R3(config)#crypto map benet-map 1 ipsec-isakmp
R3(config-crypto-map)#set peer 100.0.0.1
R3(config-crypto-map)#match address 100
R3(config-crypto-map)#set transform-set benet-set
R3(config-crypto-map)#exit
R3(config)#int f0/0
R3(config-if)#crypto map benet-map
R3(config-if)#end
R3#debug crypto isakmp

nat穿越:
R1(config)#access-list 101 deny ip 172.16.10.0 0.0.0.255 10.0.0.0 0.0.0.255
R1(config)#access-list 101 permit ip 172.16.10.0 0.0.0.255 any
R1(config)#access-list 101 permit ip 192.168.1.0 0.0.0.3 any
R1(config)#ip nat inside source list 101 interface f0/1 overload
R1(config)#ip nat inside source static udp 192.168.1.1 4500 interface f0/1 4500
R1(config)#ip nat inside source static udp 192.168.1.1 500 interface f0/1 500

R1(config)#int f0/0
R1(config-if)#ip nat inside
R1(config-if)#int f0/1
R1(config-if)#ip nat outside

为了测试,允许icmp报文穿越防火墙
ciscoasa(config)# access-list 1 permit icmp any any
ciscoasa(config)# access-group 1 in interface outside

测试1:用ping测试***的连通性(pc1和pc2的连通性,能通)
测试2:用pc1测试与isp的连通性(能通),
测试3:用pc2测试与ISP的连通性(不通)

猜你喜欢

转载自blog.51cto.com/72756/2368035
今日推荐