IPSec ***专题一:Site-to-Stie ***
环境:
R1/R2/R3:运行IGP:RIP
需求:
1:PC1 到 PC2 的流量通过IPSec 加密传输:
2:如果在R2 :deny ip any any :那么R2在这之上应该放行哪些流量,才不会影响IPSec ***的建立:
3:如果在R1(加密点)上Deny ip any any :此时R1需要放行哪些流量:IPSec *** 才能正常建立:
步骤:
1:R1/R2/R3:配置路由:确保链路的可达性:
2:配置IPSec ***的Parse 1 :
==>R1:
R1(config)#access-list 101 permit ip host 192.168.1.10 host 192.168.2.10 :定义感兴趣流量
R1(config)#crypto isakmp policy 10                                                       :定义ISAKMP的策略:指定认证/加密类型
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#encryption des
R1(config-isakmp)#group 2
R1(config-isakmp)#hash md5
R1(config-isakmp)#lifetime 1000
R1(config-isakmp)#exit
R1(config)#crypto isakmp key 6 cisco add 2.2.2.3                                         :指定Pre-shared-key:
==>R3:
R3(config)#access-list 101 permit ip host 192.168.2.10 host 192.168.1.10
R3(config)#crypto isakmp policy 10
R3(config-isakmp)#authen pre
R3(config-isakmp)#encry des
R3(config-isakmp)#group 2
R3(config-isakmp)#hash md5
R3(config-isakmp)#lifetime 1000
R3(config-isakmp)#exit
R3(config)#crypto isakmp key 6 cisco add 1.1.1.1
3:配置IPSec ***的Parse 2 :
R1(config)#crypto ipsec transform-set TS esp-des esp-md5-hmac                       :定义Transform-set :指定IPSec 的封装类型和传输模式
R1(cfg-crypto-trans)#mode tunnel
R1(config)#crypto map MYMAP 10 ipsec-isakmp                                              :定义加密映射:指定IPSec ***的各种参数
% NOTE: This new crypto map will remain disabled until a peer and a valid access list have been configured.   :提示:指明需要感兴趣流量
R1(config-crypto-map)#set peer 2.2.2.3
R1(config-crypto-map)#match add 101
R1(config-crypto-map)#set transform-set TS
R1(config-crypto-map)#exit
R1(config)#int f0/0
R1(config-if)#crypto map MYMAP                                                                       :接口下调用crypto-map
R1(config-if)#end
R1#
*Mar 11 16:34:12.939: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON                      :提示接口上已经启用ISAKMP:
R3(config)#crypto ipsec transform-set TS esp-des esp-md5-hmac
R3(cfg-crypto-trans)#mode tunnel
R3(config)#crypto map MYMAP 10 ipsec-isakmp
R3(config-crypto-map)#set peer 1.1.1.1
R3(config-crypto-map)#set transform-set TS
R3(config-crypto-map)#match add 101
R3(config-crypto-map)#exit
R3(config)#int f1/0
R3(config-if)#crypto map MYMAP
R3(config-if)#END
4:PC1 PING PC2 发包测试:IPSec ***必须要有感兴趣流量进行触发:
R1#ping 192.168.2.10 source 192.168.1.10 repeat 5     !!!!!
5:如果R2上对数据流做了限制:此时我们应该放行哪些流量:才不至于对IPSec *** 造成影响:
R2(config)#ip access-list extended IPSEC
R2(config-ext-nacl)#permit udp host 2.2.2.3 host 1.1.1.1 eq 500 :放行UDP:500D的流量:用于ISAKMP的协商
R2(config-ext-nacl)#permit esp host 2.2.2.3 host 1.1.1.1              :放行ESP的加密数据:查看IP的协议字段:51:
R2(config-ext-nacl)#deny ip any any
==>如果不放行UDP:500 ,那么R1/R3的IPSec *** 将协商失败:
*Mar 11 17:20:54.643: ISAKMP0:0:N/A:0): beginning Main Mode exchange
*Mar 11 17:20:54.647: ISAKMP0:0:N/A:0): sending packet to 2.2.2.3 my_port 500 peer_port 500 (I) MM_NO_STATE.....
注意:由于路由器接收不到回包 , 将停留在Phrase 1 的第一个Message:
==>如果只放行UDP:500 那么IKE/IPSec SA是可以协商建立的:
R1#show crypto engine connections active
   ID        Interface             IP-Address    State     Algorithm                      Encrypt   Decrypt
   1        FastEthernet0/0    1.1.1.1       set       HMAC_MD5+DES_56_CB       0        0
2001    FastEthernet0/0    1.1.1.1       set       DES+MD5                             8        0
2002    FastEthernet0/0    1.1.1.1       set       DES+MD5                0        0
注意:此时R1/R3:的IPSec ***已经成功协商建立:
通过查看IPSec SA的概要信息:发现加解密的数据包是不一样的 , 99%的原因是路由问题(包括ACL造成的链路连通性)
6:如果在R1(加密点)上Deny ip any any :此时R1需要放行哪些流量:IPSec *** 才能正常建立:
由5可知ISAKMP/ESP这两种协议是必须的放的:那是否还需要放行其他的协议呢?
R1(config)#ip access-list extended IPSec
R1(config-ext-nacl)# 10 permit esp host 2.2.2.3 host 1.1.1.1
R1(config-ext-nacl)# 20 permit udp host 2.2.2.3 host 1.1.1.1 eq isakmp
R1(config-ext-nacl)# 30 deny ip any any
经过实验和询问得知:
12.4以前 , 必须放行解密后的流量:
R1(config)#ip access-list extended IPSec
R1(config-ext-nacl)# permit host 192.168.2.10 host 192.168.1.10
12.4以后 , 是不需要放行解密后的流量:链路两端就是通的
IPSec***专题二:Dynamic map
环境:
1:R1为固定公网IP地址
2:R3为拨号上网:获得的动态的公网IP
需求:R1和R3之间如何建立IPSec ***:
涉及知识点:
1 ynamic Map (条件必须有一方是静态的IP地址)
2 eer的指定:
步骤:
1:R3上的IPSec配置:
==>R3上Phase 1配置:
R3(config)#crypto isakmp policy 10
R3(config-isakmp)#authentication pre-shared
R3(config-isakmp)#encry des
R3(config-isakmp)#hash md5
R3(config-isakmp)#group 2
R3(config-isakmp)#lifetime 3600
R3(config-isakmp)#exit
R3(config)#crypto isakmp key cisco add 1.1.1.1
==>R3上Phase 2配置:
R3(config)#crypto ipsec transform-set TS esp-des esp-md5-hmac
R3(cfg-crypto-trans)#mode tunnel
R3(cfg-crypto-trans)#exit
R3(config)#crypto map MYMAP 10 ipsec-isakmp
R3(config-crypto-map)#set peer 1.1.1.1
R3(config-crypto-map)#set transform-set TS
R3(config-crypto-map)#match address 110
R3(config-crypto-map)#exit
R3(config)#access-list 110 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255   
R3(config)#int f1/0
R3(config-if)#crypto map MYMAP
R3(config-if)#end
2:R1上的IPSec配置:
==>R1上Phase 1配置:
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#authen pre-share
R1(config-isakmp)#encry   des
R1(config-isakmp)#hash md5
R1(config-isakmp)#group 2
R1(config-isakmp)#exit      
R1(config)#crypto isakmp key cisco add 0.0.0.0 :这里注意:由于对端Peer是拨号上网,只能IP地址无法得知,所以只能使用0.0.0.0
==>R1上Phase 2配置:
R1(config)#crypto ipsec transform-set TS esp-des esp-md5-hmac
R1(cfg-crypto-trans)#mode tunnel
R1(cfg-crypto-trans)#exit
R1(config)#crypto dynamic-map DYNAMIC 10 :
R1(config-crypto-map)#set transform-set TS    :
R1(config-crypto-map)#set peer 0.0.0.0    :由于对端是拨号上网,公网IP根本无法主动得知,所以无法指定Peer的IP地址,而且IPSec *** (在一些平台上该命令无法敲,提示unset,没关系)
R1(config-crypto-map)#exit                         :的协商只能由拨号方发起,否则无法协商.(因为固定方根本不知道该往何处协商)
R1(config)#crypto map MYMAP 10 ipsec-isakmp dynamic NYNAMIC :新建一个Static-map调用动态MAP
R1(config-crypto-map)#exit
注意:
1 ynamic-MAP :固定IP这方,已经不需要定义感兴趣流量 , 因为本端根本不会主动发起连接:不知道Peer的IP地址:当时建议你还是在MAP指定
, 这样可以把进入接口并且匹配MAP的明文流量DROP.
2:这里注意由于有一方的Peer是动态IP,所以这里你必须使用Dynamic-map,用于区分不同的环境 , 又由于接口下只能调用Static-map , 所以接
下来我们还需创建一个Static-map , 调 用动态MAP , 然后再在接口下调用Static-map
R1(config)#int f0/0
R1(config-if)#cry
R1(config-if)#crypto map MYMAP
R1(config-if)#END
IPSec ***z 专题三:GRE Tunnel
环境:
1:R4/R5/R6:配置Static-route或是运行OSPF:
2:R4/R6:建立GRE Tunnel
3:将GRE Tunnel 的IP地址宣告进EIGRP:
步骤:
1:R4/R5/R6上分别配置动态路由:OSPF:   
router ospf 110
network 1.1.45.0 0.0.0.255 area 0
network 4.4.4.4 0.0.0.0 area 0
router ospf 110
network 1.1.45.0 0.0.0.255 area 0
network 1.1.56.0 0.0.0.255 area 0
network 5.5.5.5 0.0.0.0 area 0
router ospf 110
network 1.1.56.0 0.0.0.255 area 0
network 6.6.6.6 0.0.0.0 area 0
2:R4/R6上GRE Tunnel的配置:
==>R4的配置:
interface Tunnel0
ip address 172.16.10.4 255.255.255.0
tunnel source 4.4.4.4
tunnel destination 6.6.6.6
==>R6的配置:
interface Tunnel0
ip address 172.16.10.6 255.255.255.0
tunnel source 6.6.6.6
tunnel destination 4.4.4.4
3:R4/R6针对GRE Tunnel 启用路由协议:EIGRP:
router eigrp 90
network 172.16.10.0 0.0.0.255
network 192.168.1.0
no auto-summary
router eigrp 90
network 172.16.1.0 0.0.0.255
network 172.16.10.0 0.0.0.255
no auto-summary
4:各自的IP路由表如下:
R4#show ip route
O    1.1.56.0 [110/2] via 1.1.45.5, 00:11:46, FastEthernet1/1
O    5.5.5.5 [110/2] via 1.1.45.5, 00:11:46, FastEthernet1/1
O    6.6.6.6 [110/3] via 1.1.45.5, 00:11:46, FastEthernet1/1
D    172.16.1.0/24 [90/297246976] via 172.16.10.6, 00:11:31, Tunnel0 :下一条指向Tunnel0:通过EIGRP路由学到
R6#show ip route
O    1.1.45.0 [110/2] via 1.1.56.5, 00:12:42, FastEthernet0/0
O    4.4.4.4 [110/3] via 1.1.56.5, 00:12:42, FastEthernet0/0
O    5.5.5.5 [110/2] via 1.1.56.5, 00:12:42, FastEthernet0/0
D 192.168.1.0/24 [90/297246976] via 172.16.10.4, 00:12:35, Tunnel0
R6#


IPSec *** 专题四:GRE over IPSec
环境:
1:R4/R5/R6之间通过Static Route来建立联通性:
2:R4<-->R6之间建立GRE Tunnel
3:R4<-->R6之间建立IPSec ***
需求:要求PC3 和 PC7能够互通
涉及技术点:GRE Tunnel的建立、IPSec 建立 、 分析数据包的流程
配置步骤:
1:R4/R5/R6之间通过Static Route来互通
2:内网之间的互通通过OSPF来建立:R4/R6的Loopback口通过OSPF学到
3:IPSec 的Peer互指对端Loopack(分析问题的原因)
4:测试GRE Over IPSec的特性:
5:解决方法:
在R4/R6之间指定Static路由到达对端的Loopback口
IPSec Peer指对端的物理接口,而不是Loopback口(推荐)
==============================================
如果对端Peer使用Loopback那么Tunnel和IPSec均将无法建立成功:
1:R4/R6配置静态路由:(互通)
R4上的静态路由:
ip route 1.1.56.0 255.255.255.0 1.1.45.5
R6上的静态路由:
ip route 1.1.45.0 255.255.255.0 1.1.56.5
2:R4/R6之间建立GRE Tunnel:
==>R4的配置:
interface Tunnel0
ip address 172.16.10.4 255.255.255.0
tunnel source 1.1.45.4
tunnel destination 1.1.56.6
==>R6的配置:
interface Tunnel0
ip address 172.16.10.6 255.255.255.0
tunnel source 1.1.56.6
tunnel destination 1.1.45.4
==>查看GRE状态:
R4#show ip int b   
Tunnel0                    172.16.10.4     YES manual up                    up
R6#show ip int b
Tunnel0                    172.16.10.6     YES manual up                    up   
3:内网之间通过GRE建立OSPF连接:
==>R4的配置:
router ospf 110
log-adjacency-changes
network 4.4.4.4 0.0.0.0 area 0
network 172.16.10.0 0.0.0.255 area 0
network 192.168.1.0 0.0.0.255 area 0
==>R6的配置:
router ospf 110
network 6.6.6.6 0.0.0.0 area 0
network 172.16.10.0 0.0.0.255 area 0
network 172.16.1.0 0.0.0.255 area 0
==>查看R4/R6的路由表:内网已经互通:
R4#show ip route ospf
O    6.6.6.6 [110/11112] via 172.16.10.6, 00:11:38, Tunnel0
O    172.16.1.0 [110/11112] via 172.16.10.6, 00:11:38, Tunnel0
R6#show ip route ospf
O    4.4.4.4 [110/11112] via 172.16.10.4, 00:11:23, Tunnel0
O 192.168.1.0/24 [110/11112] via 172.16.10.4, 00:11:23, Tunnel0
R6#
==>R3测试:
R3#traceroute 172.16.1.1
   1 192.168.1.2 92 msec 136 msec 48 msec
   2 172.16.10.6 136 msec 132 msec 140 msec :表明当前数据包是通过GRE Tunnel来转发的
   3 172.16.1.1 148 msec *   168 msec
R3#
4:R4/R6之间建立IPSec *** : eer指向R4/R6的环回口:4.4.4.4/6.6.6.6
==>R6上的配置修改:
crypto isakmp key cisco address 4.4.4.4
crypto map MYMAP 10 ipsec-isakmp
set peer 4.4.4.4
set transform-set TS
match address 110                                  :指定感兴趣流量:
crypto map MYMAP local-address Loopback1 :这里一定要指定更新源:类似BGP的更新源:否则发送数据包的将是本地的物理接口
==>R4上的配置修改:
crypto isakmp key cisco address 6.6.6.6
crypto map MYMAP 10 ipsec-isakmp
set peer 6.6.6.6
set transform-set TS
match address 110
crypto map MYMAP local-address Loopback1
5:由于是GRE over IPSec:于是在物理接口下调用感兴趣流量:
interface FastEthernet0/0
ip address 1.1.1.1 255.255.255.0
no cdp log mismatch duplex
crypto map MYMAP
此时如果指定感兴趣流量:access-list 110 permit host 1.1.1.1 host 2.2.2.3 :那么随后OSPF 邻居将Down:
*Dec 11 23:13:56.355: %OSPF-5-ADJCHG: Process 110, Nbr 6.6.6.6 on Tunnel0 from FULL to DOWN, Neighbor Down: Dead timer expired
分析:
1:GRE Tunnel的可达性是通过静态路由来实现的:通过步骤一:可知目的1.1.56.0从F1/1走:
2:R4上的OSPF通过Tunnel学习到6.6.6.6的路由下一条指向Tunnel0
3:在IPSec ***中指定Peer为6.6.6.6,此时下一条指向Tunnel0(如步骤三),封装GRE:【SIP:1.1.45.4   DIP:1.1.56.6】,R4查看路由表到达1.1.56.0需要经过F1/1(如步骤一),此时GRE数据包被扔到F1/1,刚好匹配该接口下调用的IPSec感兴趣流,于是封装ESP,并新增IP包头【ESP| SIP:4.4.4.4 DIP:6.6.6.6】
4:ESP数据包查看路由表, 发现到达6.6.6.6需要通过Tunnel 0 ,于是ESP又被转到Tunnel 0,并且又被封装【SIP:1.1.45.4   DIP:1.1.56.6】,以此在R4上的OSPF Hello包在Tunnel0和F1/1之间往复循环,而对端的OSPF在三个周期未收到Hello包,则提示Dead Time Expired。
*Mar   14:43:51.743: %OSPF-5-ADJCHG: Process 110, Nbr 192.168.2.10 on Tunnel0 from FULL to DOWN, Neighbor Down   :OSPF邻居Down
=========================================================================
==>解决方法:(只要打破以上环路的任一环即可)
在R4/R6之间指定Static路由到达对端的Loopback口
IPSec Peer指对端的物理接口,而不是Loopback口(推荐)
修改方法1:
在R4/R6上配置Static Route 让到R4/R6对端Loopback口的数据包从物理接口走,而不是Tunnel 0:
R4(config)#ip route 6.6.6.6 255.255.255.255 1.1.45.5
R6(config)#ip route 4.4.4.4 255.255.255.255 1.1.56.5
R5(config)#ip route 6.6.6.6 255.255.255.255 1.1.56.6 :R5上增加到R4/R6的路由:
R5(config)#ip route 4.4.4.4 255.255.255.255 1.1.45.4
此时OSPF邻居就可以创建:而且IPSec ***也是可以建立的:
*Mar 14 15:21:36.395: %OSPF-5-ADJCHG: Process 110, Nbr 192.168.2.10 on Tunnel0 from LOADING to FULL, Loading Done
R4#
==================================================================================
修改方法2 推荐做法)
在R4/R6上配置IPSec ***时,对端Peer指向物理接口,而不是Loopback口地址:
==>R4的配置:
crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 1.1.56.6
R3(config)#crypto ipsec transform-set TS esp-md5-hmac esp-null   :Null不对数据包加密:用于分析数据用
crypto map MAY 10 ipsec-isakmp
   set peer 1.1.56.6
   set transform-set TS
   match address GRE-***
ip access-list extended GRE-***
permit ip host 1.1.45.4 host 1.1.56.6
==>R6的配置:
crypto isakmp policy 10
   authentication pre-share
crypto isakmp key cisco address 1.1.45.4
R3(config)#crypto ipsec transform-set TS esp-md5-hmac esp-null
crypto map MAY 10 ipsec-isakmp
set peer 1.1.45.4
set transform-set TS
match address GRE-***
ip access-list extended GRE-***
permit ip host 1.1.56.6 host 1.1.45.4
==>测试:R3 ping R7:
R3#ping 172.16.1.1 re 10     !!!!!!!!!!
抓取R5/R6之间的通信包:如图:
从中可以看出,PING先封装GRE然后再封装IPSec,确实实现了GRE over IPSec的功能:
==>OSPF的Hello包,是IPSec的感兴趣流量,也被加密:
0000 ca 00 0f 70 00 00 cc 00 07 18 f0 01 08 00 45 c0
0010 00 84 01 1f 00 00 fe 32 b4 62 01 01 01 01 02 02   32:50=ESP
0020 02 03 24 52 35 e7 00 00 00 02 45 c0 00 58 00 93   4:version   5:头长度=5*4=20
0030 00 00 ff 2f b4 1d 01 01 01 01 02 02 02 03 00 00   2f:47=GRE
0040 08 00 45 c0 00 40 01 1e 00 00 01 59 d1 7e 03 03   0x0800=IP   59:89=OSPF
0050 03 01 e0 00 00 05 02 02 00 20 06 06 06 06 00 00   224.0.0.5   6.6.6.6
0060 00 00 d0 f3 00 00 00 00 00 00 00 00 00 00 05 c4   ................
0070 52 07 00 00 13 6c ff f6 00 03 00 01 00 04 00 00   R....l..........
0080 00 01 01 02 02 04 20 03 a5 e4 2a 0c 23 7f 3d 87   ...... ...*.#.=.
0090 eb cc
分析::
1:R3#ping 172.16.1.1
2:此时R4:查看路由表:得知要从Tunnel 0出去 看步骤1)
3:数据一到Tunnel 0 就被封装GRE , 并产生个新的IP报头:SIP:1.1.45.4 DIP:1.1.56.6
此时数据包的帧格式为: DATA|SIP|DIP|GRE|SIP|DIP     1.1.45.4--->1.1.56.6
4:此时GRE再次查看RT , 发现到达1.1.56.6/24 , 必须走F1/1, 可F1/1中调用了加密MAP ,并且GRE数据包匹配感兴趣流量(access-list GRE-***) ,
5:于是GRE就又被ESP封装 , 并产生一个新的报头:SIP:1.1.45.4   DIP:1.1.56.6
此时数据包的帧格式为: DATA|SIP|DIP|GRE|SIP|DIP|ESP|SIP|DIP   :但是有没发现GRE的IP报头和ESP的IP报头是一样的.
192.168.1.1---->172.16.1.1
ESP:1.1.45.4--->1.1.56.6
GRE:1.1.45.4--->1.1.56.6