Introduction
This document describes how to configure a policy-based VPN over Internet Key Exchange (IKEv1) between two Cisco routers (Cisco IOS® or Cisco IOS® XE).
Prerequisites
Requirements
There are no specific requirements for this document.
Components Used
The information in this document is based on a Cisco router with Cisco IOS® Release 15.7. It allows users to access resources across the sites over an IPsec VPN tunnel.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, ensure that you understand the potential impact of any command.
Conventions
Refer to the Cisco Technical Tips Conventions for more information on document conventions.
Configure
In this section, you are presented with the information to configure the features described in this document.
Network Diagram
This document uses this network setup:
Note: The IP addressing schemes used in this configuration are not legally routable on the Internet. They are RFC 1918 addresses which have been used in a lab environment.
Configurations
This document uses these configurations:
-
Router A
-
Router B
Note: Cisco recommends that the ACL applied to the crypto map on both the devices be a mirror image of each other.
| Router A |
|---|
!--- Create an ISAKMP policy for Phase 1 negotiations for the L2L tunnels. crypto isakmp policy 10 encryption aes hash sha256 authentication pre-share group 14 !--- Specify the pre-shared key and the remote peer address |
| Router B |
|---|
!--- Create an ISAKMP policy for Phase 1 negotiations for the L2L tunnels. crypto isakmp policy 10 encryption aes hash sha256 authentication pre-share group 14 !--- Specify the pre-shared key and the remote peer address |
Verify
Use this section in order to confirm that your configuration works properly.
The Cisco CLI Analyzer (registered customers only) supports certain show commands. Use the Cisco CLI Analyzer to view an analysis of show command output.
-
show crypto ipsec sa— Shows the settings, number of encaps and decaps, local and remote proxy identities, and Security Parameter Indexes (SPIs), inbound and outbound, used by current Security Associations (SAs).RouterA#show crypto ipsec sa interface: Serial2/0 Crypto map tag: mymap, local addr 172.16.1.1 protected vrf: (none) local ident (addr/mask/prot/port): (10.1.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (172.16.2.0/255.255.255.0/0/0) current_peer 10.0.0.2 port 500 PERMIT, flags={origin_is_acl,} #pkts encaps: 21, #pkts encrypt: 21, #pkts digest: 21 #pkts decaps: 21, #pkts decrypt: 21, #pkts verify: 21 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 0, #recv errors 0 local crypto endpt.: 172.16.1.1, remote crypto endpt.: 10.0.0.2 plaintext mtu 1438, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/0 current outbound spi: 0x8767D399(2271728537) PFS (Y/N): N, DH group: none inbound esp sas: spi: 0x6E210372(1847657330) transform: esp-aes esp-sha256-hmac , in use settings ={Tunnel, } conn id: 2007, flow_id: Onboard VPN:7, sibling_flags 80004040, crypto map: mymap sa timing: remaining key lifetime (k/sec): (4338240/3269) IV size: 16 bytes replay detection support: Y Status: ACTIVE(ACTIVE) inbound ah sas: inbound pcp sas: outbound esp sas: spi: 0x8767D399(2271728537) transform: esp-aes esp-sha256-hmac , in use settings ={Tunnel, } conn id: 2008, flow_id: Onboard VPN:8, sibling_flags 80004040, crypto map: mymap sa timing: remaining key lifetime (k/sec): (4338240/3269) IV size: 16 bytes replay detection support: Y Status: ACTIVE(ACTIVE) outbound ah sas: outbound pcp sas: -
show crypto isakmp sa— Shows all current IKE SAs and the status.RouterA#show crypto isakmp sa dst src state conn-id slot status 10.0.0.2 172.16.1.1 QM_IDLE 1 0 ACTIVE
show crypto map— Shows the crypto map structure created with:- Name of the crypto map and sequence number.
- Peer address.
- Name of the ACL applied along with the local and remote proxy identities.
- Values of the IPsec transform-set used.
- Interface on which the crypto map is binded.
RouterA#show crypto map Crypto Map IPv4 "mymap" 10 ipsec-isakmp Peer = 10.0.0.2 Extended IP access list 100 access-list 100 permit ip 10.1.1.0 0.0.0.255 172.16.2.0 0.0.0.255 Current peer: 10.0.0.2 Security association lifetime: 4608000 kilobytes/3600 seconds Responder-Only (Y/N): N PFS (Y/N): N Mixed-mode : Disabled Transform sets={ myset: { esp-aes esp-sha256-hmac } , } Interfaces using crypto map mymap: GigabitEthernet0/0 RouterB#show crypto map Interfaces using crypto map NiStTeSt1: Crypto Map IPv4 "mymap" 10 ipsec-isakmp Peer = 172.16.1.1 Extended IP access list 100 access-list 100 permit ip 172.16.2.0 0.0.0.255 10.1.1.0 0.0.0.255 Current peer: 10.0.0.1 Security association lifetime: 4608000 kilobytes/3600 seconds Responder-Only (Y/N): N PFS (Y/N): N Mixed-mode : Disabled Transform sets={ myset: { esp-aes esp-sha256-hmac } , } Interfaces using crypto map mymap: GigabitEthernet0/0show crypto session remote <IP address of peer VPN endpoint> detailRouterA#show crypto session remote 10.0.0.2 detail Crypto session current status Interface: GigabitEthernet0/0 Uptime: 00:39:16 Session status: UP-ACTIVE >>>>> Status of the VPN Peer: 10.0.0.2 port 500 fvrf: (none) ivrf: (none) Phase1_id: 10.0.0.2 Desc: (none) Session ID: 0 IKEv1 SA: local 172.16.1.1/500 remote 10.0.0.2/500 Active Capabilities:(none) connid:1004 lifetime:23:20:43 IPSEC FLOW: permit ip 10.1.1.0/255.255.255.0 172.16.2.0/255.255.255.0 Active SAs: 2, origin: crypto map Inbound: #pkts dec'ed 21 drop 0 life (KB/Sec) 4338240/1243 Outbound: #pkts enc'ed 21 drop 0 life (KB/Sec) 4338240/1243 RouterB#show crypto session remote 172.16.1.1 detail Crypto session current status Interface: GigabitEthernet0/0 Uptime: 00:40:43 Session status: UP-ACTIVE >>>>> Status of the VPN Peer: 172.16.1.1 port 500 fvrf: (none) ivrf: (none) Phase1_id: 172.16.1.1 Desc: (none) Session ID: 0 IKEv1 SA: local 10.0.0.2/500 remote 172.16.1.1/500 Active Capabilities:(none) connid:1004 lifetime:23:19:16 IPSEC FLOW: permit ip 172.16.2.0/255.255.255.0 10.1.1.0/255.255.255.0 Active SAs: 2, origin: crypto map Inbound: #pkts dec'ed 21 drop 0 life (KB/Sec) 4271304/1156 Outbound: #pkts enc'ed 21 drop 0 life (KB/Sec) 4271304/1156
Troubleshoot
This section provides information you can use in order to troubleshoot your configuration.
Commands
The Cisco CLI Analyzer (registered customers only) supports certain show commands. Use the Cisco CLI Analyzer to view an analysis of show command output.
Note: Refer to Important Information on Debug Commands before you use debug commands.
-
debug crypto isakmp— Displays the ISAKMP negotiations of Phase 1. -
debug crypto ipsec— Displays the IPsec negotiations of Phase 2.
Sample Debug Output
The sample debug output is from RouterA (initiator) for a successful VPN negotiation.
Router
RouterA#debug crypto isakmp
Jul 1 04:08:49.558: ISAKMP: (0):SA request profile is (NULL)
Jul 1 04:08:49.558: ISAKMP: (0):Created a peer struct for 10.0.0.2, peer port 500
Jul 1 04:08:49.558: ISAKMP: (0):New peer created peer = 0x2108BC48 peer_handle = 0x80000005
Jul 1 04:08:49.558: ISAKMP: (0):Locking peer struct 0x2108BC48, refcount 1 for isakmp_initiator
Jul 1 04:08:49.558: ISAKMP: (0):local port 500, remote port 500
Jul 1 04:08:49.558: ISAKMP: (0):set new node 0 to QM_IDLE
Jul 1 04:08:49.558: ISAKMP: (0):Find a dup sa in the avl tree during calling isadb_insert sa = 3DA022D8
Jul 1 04:08:49.558: ISAKMP: (0):Can not start Aggressive mode,.!
Success rate is 50 percent (1/2), round-trip min/avg/max = 1/1/1 ms
Router# trying Main mode.
Jul 1 04:08:49.558: ISAKMP: (0):found peer pre-shared key matching 10.0.0.2
Jul 1 04:08:49.558: ISAKMP: (0):constructed NAT-T vendor-rfc3947 ID
Jul 1 04:08:49.558: ISAKMP: (0):constructed NAT-T vendor-07 ID
Jul 1 04:08:49.558: ISAKMP: (0):constructed NAT-T vendor-03 ID
Jul 1 04:08:49.558: ISAKMP: (0):constructed NAT-T vendor-02 ID
Jul 1 04:08:49.558: ISAKMP: (0):Input = IKE_MESG_FROM_IPSEC, IKE_SA_REQ_MM
Jul 1 04:08:49.558: ISAKMP: (0):Old State = IKE_READY New State = IKE_I_MM1
Jul 1 04:08:49.562: ISAKMP: (0):beginning Main Mode exchange
Jul 1 04:08:49.562: ISAKMP-PAK: (0):sending packet to 10.0.0.2 my_port 500 peer_port 500 (I) MM_NO_STATE
Jul 1 04:08:49.562: ISAKMP: (0):Sending an IKE IPv4 Packet.
Jul 1 04:08:49.690: ISAKMP-PAK: (0):received packet from 10.0.0.2 dport 500 sport 500 Global (I) MM_NO_STATE
Jul 1 04:08:49.690: ISAKMP: (0):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH
Jul 1 04:08:49.690: ISAKMP: (0):Old State = IKE_I_MM1 New State = IKE_I_MM2
Jul 1 04:08:49.690: ISAKMP: (0):processing SA payload. message ID = 0
Jul 1 04:08:49.690: ISAKMP: (0):processing vendor id payload
Jul 1 04:08:49.690: ISAKMP: (0):vendor ID seems Unity/DPD but major 69 mismatch
Jul 1 04:08:49.690: ISAKMP: (0):vendor ID is NAT-T RFC 3947
Jul 1 04:08:49.690: ISAKMP: (0):found peer pre-shared key matching 10.0.0.2
Jul 1 04:08:49.690: ISAKMP: (0):local preshared key found
Jul 1 04:08:49.690: ISAKMP: (0):Scanning profiles for xauth ...
Jul 1 04:08:49.690: ISAKMP: (0):Checking ISAKMP transform 1 against priority 10 policy
Jul 1 04:08:49.690: ISAKMP: (0): encryption AES-CBC
Jul 1 04:08:49.690: ISAKMP: (0): keylength of 128
Jul 1 04:08:49.690: ISAKMP: (0): hash SHA256
Jul 1 04:08:49.690: ISAKMP: (0): default group 14
Jul 1 04:08:49.690: ISAKMP: (0): auth pre-share
Jul 1 04:08:49.690: ISAKMP: (0): life type in seconds
Jul 1 04:08:49.690: ISAKMP: life duration (VPI) of 0x0 0x1 0x51 0x80
Jul 1 04:08:49.690: ISAKMP: (0):atts are acceptable. Next payload is 0
Jul 1 04:08:49.690: ISAKMP: (0):Acceptable atts:actual life: 0
Jul 1 04:08:49.690: ISAKMP: (0):Acceptable atts:life: 0
Jul 1 04:08:49.690: ISAKMP: (0):Fill atts in sa vpi_length:4
Jul 1 04:08:49.690: ISAKMP: (0):Fill atts in sa life_in_seconds:86400
Jul 1 04:08:49.690: ISAKMP: (0):Returning Actual lifetime: 86400
Jul 1 04:08:49.690: ISAKMP: (0):Started lifetime timer: 86400.
Jul 1 04:08:49.814: ISAKMP: (0):processing vendor id payload
Jul 1 04:08:49.814: ISAKMP: (0):vendor ID seems Unity/DPD but major 69 mismatch
Jul 1 04:08:49.814: ISAKMP: (0):vendor ID is NAT-T RFC 3947
Jul 1 04:08:49.814: ISAKMP: (0):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE
Jul 1 04:08:49.814: ISAKMP: (0):Old State = IKE_I_MM2 New State = IKE_I_MM2
Jul 1 04:08:49.818: ISAKMP-PAK: (0):sending packet to 10.0.0.2 my_port 500 peer_port 500 (I) MM_SA_SETUP
Jul 1 04:08:49.818: ISAKMP: (0):Sending an IKE IPv4 Packet.
Jul 1 04:08:49.818: ISAKMP: (0):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE
Jul 1 04:08:49.818: ISAKMP: (0):Old State = IKE_I_MM2 New State = IKE_I_MM3
Jul 1 04:08:49.978: ISAKMP-PAK: (0):received packet from 10.0.0.2 dport 500 sport 500 Global (I) MM_SA_SETUP
Jul 1 04:08:49.978: ISAKMP: (0):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH
Jul 1 04:08:49.978: ISAKMP: (0):Old State = IKE_I_MM3 New State = IKE_I_MM4
Jul 1 04:08:49.978: ISAKMP: (0):processing KE payload. message ID = 0
Jul 1 04:08:50.138: ISAKMP: (0):processing NONCE payload. message ID = 0
Jul 1 04:08:50.138: ISAKMP: (0):found peer pre-shared key matching 10.0.0.2
Jul 1 04:08:50.138: ISAKMP: (1004):processing vendor id payload
Jul 1 04:08:50.138: ISAKMP: (1004):vendor ID is Unity
Jul 1 04:08:50.138: ISAKMP: (1004):processing vendor id payload
Jul 1 04:08:50.138: ISAKMP: (1004):vendor ID is DPD
Jul 1 04:08:50.138: ISAKMP: (1004):processing vendor id payload
Jul 1 04:08:50.138: ISAKMP: (1004):speaking to another IOS box!
Jul 1 04:08:50.138: ISAKMP: (1004):received payload type 20
Jul 1 04:08:50.138: ISAKMP: (1004):His hash no match - this node outside NAT
Jul 1 04:08:50.138: ISAKMP: (1004):received payload type 20
Jul 1 04:08:50.138: ISAKMP: (1004):No NAT Found for self or peer
Jul 1 04:08:50.138: ISAKMP: (1004):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE
Jul 1 04:08:50.138: ISAKMP: (1004):Old State = IKE_I_MM4 New State = IKE_I_MM4
Jul 1 04:08:50.138: ISAKMP: (1004):Send initial contact
Jul 1 04:08:50.138: ISAKMP: (1004):SA is doing
Jul 1 04:08:50.138: ISAKMP: (1004):pre-shared key authentication using id type ID_IPV4_ADDR
Jul 1 04:08:50.138: ISAKMP: (1004):ID payload
next-payload : 8
type : 1
Jul 1 04:08:50.138: ISAKMP: (1004): address : 172.16.1.1 >>>>> IKE ID sent
Jul 1 04:08:50.138: ISAKMP: (1004): protocol : 17
port : 500
length : 12
Jul 1 04:08:50.138: ISAKMP: (1004):Total payload length: 12
Jul 1 04:08:50.138: ISAKMP-PAK: (1004):sending packet to 10.0.0.2 my_port 500 peer_port 500 (I) MM_KEY_EXCH
Jul 1 04:08:50.138: ISAKMP: (1004):Sending an IKE IPv4 Packet.
Jul 1 04:08:50.138: ISAKMP: (1004):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE
Jul 1 04:08:50.138: ISAKMP: (1004):Old State = IKE_I_MM4 New State = IKE_I_MM5
Jul 1 04:08:50.138: ISAKMP-PAK: (1004):received packet from 10.0.0.2 dport 500 sport 500 Global (I) MM_KEY_EXCH
Jul 1 04:08:50.142: ISAKMP: (1004):processing ID payload. message ID = 0
Jul 1 04:08:50.142: ISAKMP: (1004):ID payload
next-payload : 8
type : 1
Jul 1 04:08:50.142: ISAKMP: (1004): address : 10.0.0.2 >>>>> IKE ID received
Jul 1 04:08:50.142: ISAKMP: (1004): protocol : 17
port : 500
length : 12
Jul 1 04:08:50.142: ISAKMP: (0):peer matches *none* of the profiles
Jul 1 04:08:50.142: ISAKMP: (1004):processing HASH payload. message ID = 0
Jul 1 04:08:50.142: ISAKMP: (1004):SA authentication status:
authenticated
Jul 1 04:08:50.142: ISAKMP: (1004):SA has been authenticated with 10.0.0.2
Jul 1 04:08:50.142: ISAKMP: (0):Trying to insert a peer 172.16.1.1/10.0.0.2/500/,
Jul 1 04:08:50.142: ISAKMP: (0): and inserted successfully 2108BC48.
Jul 1 04:08:50.142: ISAKMP: (1004):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH
Jul 1 04:08:50.142: ISAKMP: (1004):Old State = IKE_I_MM5 New State = IKE_I_MM6
Jul 1 04:08:50.142: ISAKMP: (1004):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE
Jul 1 04:08:50.142: ISAKMP: (1004):Old State = IKE_I_MM6 New State = IKE_I_MM6
Jul 1 04:08:50.142: ISAKMP: (1004):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE
Jul 1 04:08:50.142: ISAKMP: (1004):Old State = IKE_I_MM6 New State = IKE_P1_COMPLETE
Jul 1 04:08:50.142: ISAKMP: (1004):beginning Quick Mode exchange, M-ID of 3184909968
Jul 1 04:08:50.142: ISAKMP: (1004):QM Initiator gets spi
Jul 1 04:08:50.142: ISAKMP-PAK: (1004):sending packet to 10.0.0.2 my_port 500 peer_port 500 (I) QM_IDLE
Jul 1 04:08:50.142: ISAKMP: (1004):Sending an IKE IPv4 Packet.
Jul 1 04:08:50.142: ISAKMP: (1004):Node 3184909968, Input = IKE_MESG_INTERNAL, IKE_INIT_QM
Jul 1 04:08:50.142: ISAKMP: (1004):Old State = IKE_QM_READY New State = IKE_QM_I_QM1
Jul 1 04:08:50.142: ISAKMP: (1004):Input = IKE_MESG_INTERNAL, IKE_PHASE1_COMPLETE >>>>> Phase1 negotiation is complete
Jul 1 04:08:50.142: ISAKMP: (1004):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE
Jul 1 04:08:50.146: ISAKMP-PAK: (1004):received packet from 10.0.0.2 dport 500 sport 500 Global (I) QM_IDLE
Jul 1 04:08:50.146: ISAKMP: (1004):processing HASH payload. message ID = 3184909968
Jul 1 04:08:50.146: ISAKMP: (1004):processing SA payload. message ID = 3184909968
Jul 1 04:08:50.146: ISAKMP: (1004):Checking IPSec proposal 1
Jul 1 04:08:50.146: ISAKMP: (1004):transform 1, ESP_AES
Jul 1 04:08:50.146: ISAKMP: (1004): attributes in transform:
Jul 1 04:08:50.146: ISAKMP: (1004): encaps is 1 (Tunnel)
Jul 1 04:08:50.146: ISAKMP: (1004): SA life type in seconds
Jul 1 04:08:50.146: ISAKMP: (1004): SA life duration (basic) of 3600
Jul 1 04:08:50.146: ISAKMP: (1004): SA life type in kilobytes
Jul 1 04:08:50.146: ISAKMP: SA life duration (VPI) of 0x0 0x46 0x50 0x0
Jul 1 04:08:50.146: ISAKMP: (1004): authenticator is HMAC-SHA256
Jul 1 04:08:50.146: ISAKMP: (1004): key length is 128
Jul 1 04:08:50.146: ISAKMP: (1004):atts are acceptable.
Jul 1 04:08:50.146: IPSEC(validate_proposal_request): proposal part #1
Jul 1 04:08:50.146: IPSEC(validate_proposal_request): proposal part #1,
(key eng. msg.) INBOUND local= 172.16.1.1:0, remote= 10.0.0.2:0,
local_proxy= 10.1.1.0/255.255.255.0/256/0,
remote_proxy= 172.16.2.0/255.255.255.0/256/0,
protocol= ESP, transform= esp-aes esp-sha256-hmac (Tunnel),
lifedur= 0s and 0kb,
spi= 0x0(0), conn_id= 0, keysize= 128, flags= 0x0
Jul 1 04:08:50.146: Crypto mapdb : proxy_match
src addr : 10.1.1.0
dst addr : 172.16.2.0
protocol : 0
src port : 0
dst port : 0
Jul 1 04:08:50.146: (ipsec_process_proposal)Map Accepted: mymap, 10
Jul 1 04:08:50.146: ISAKMP: (1004):processing NONCE payload. message ID = 3184909968
Jul 1 04:08:50.146: ISAKMP: (1004):processing ID payload. message ID = 3184909968
Jul 1 04:08:50.146: ISAKMP: (1004):processing ID payload. message ID = 3184909968
Jul 1 04:08:50.146: ISAKMP: (1004):Node 3184909968, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH
Jul 1 04:08:50.146: ISAKMP: (1004):Old State = IKE_QM_I_QM1 New State = IKE_QM_IPSEC_INSTALL_AWAIT
Jul 1 04:08:50.146: IPSEC(key_engine): got a queue event with 1 KMI message(s)
Jul 1 04:08:50.146: Crypto mapdb : proxy_match
src addr : 10.1.1.0
dst addr : 172.16.2.0
protocol : 256
src port : 0
dst port : 0
Jul 1 04:08:50.146: IPSEC(crypto_ipsec_create_ipsec_sas): Map found mymap, 10
Jul 1 04:08:50.146: IPSEC(crypto_ipsec_sa_find_ident_head): reconnecting with the same proxies and peer 10.0.0.2
Jul 1 04:08:50.146: IPSEC(get_old_outbound_sa_for_peer): No outbound SA found for peer 22C55798
Jul 1 04:08:50.146: IPSEC(create_sa): sa created,
(sa) sa_dest= 172.16.1.1, sa_proto= 50,
sa_spi= 0x6E210372(1847657330), >>>>> Inbound SPI
sa_trans= esp-aes esp-sha256-hmac , sa_conn_id= 2007
sa_lifetime(k/sec)= (4608000/3600),
(identity) local= 172.16.1.1:0, remote= 10.0.0.2:0,
local_proxy= 10.1.1.0/255.255.255.0/256/0,
remote_proxy= 172.16.2.0/255.255.255.0/256/0
Jul 1 04:08:50.146: IPSEC(create_sa): sa created,
(sa) sa_dest= 10.0.0.2, sa_proto= 50,
sa_spi= 0x8767D399(2271728537), >>>>> Outbound SPI
sa_trans= esp-aes esp-sha256-hmac , sa_conn_id= 2008
sa_lifetime(k/sec)= (4608000/3600),
(identity) local= 172.16.1.1:0, remote= 10.0.0.2:0,
local_proxy= 10.1.1.0/255.255.255.0/256/0,
remote_proxy= 172.16.2.0/255.255.255.0/256/0
Jul 1 04:08:50.150: IPSEC: Expand action denied, notify RP
Jul 1 04:08:50.150: ISAKMP-ERROR: (0):Failed to find peer index node to update peer_info_list
Jul 1 04:08:50.150: ISAKMP: (1004):Received IPSec Install callback... proceeding with the negotiation
Jul 1 04:08:50.150: ISAKMP: (1004):Successfully installed IPSEC SA (SPI:0x6E210372) on GigabitEthernet0/0 >>>>> IPsec SA is installed
Jul 1 04:08:50.150: ISAKMP-PAK: (1004):sending packet to 10.0.0.2 my_port 500 peer_port 500 (I) QM_IDLE
Jul 1 04:08:50.150: ISAKMP: (1004):Sending an IKE IPv4 Packet.
Jul 1 04:08:50.150: ISAKMP: (1004):deleting node -1110057328 error FALSE reason "No Error"
Jul 1 04:08:50.150: ISAKMP: (1004):Node 3184909968, Input = IKE_MESG_FROM_IPSEC, IPSEC_INSTALL_DONE
Jul 1 04:08:50.150: ISAKMP: (1004):Old State = IKE_QM_IPSEC_INSTALL_AWAIT New State = IKE_QM_PHASE2_COMPLETE >>>>> Phase2 negotiation is complete
Jul 1 04:08:50.950: ISAKMP: (1003):purging node -262896492
Jul 1 04:09:09.710: ISAKMP: (1003):purging SA., sa=3DA05D84, delme=3DA05D84
Related Information
- IPsec Negotiation/IKE Protocols
- Technical Support & Documentation — Cisco Systems
Как настроить туннель IPSec между маршрутизаторами Cisco с шифрованием трафика.
В рассматриваемом примере две отдельные локальные сети с приватными адресами (192.168.1.0/24 и 192.168.2.0/24), подключенные к интерфейсам FastEthernet0/0
маршрутизаторов Cisco. Маршрутизаторы могут быть практически любой
модели, но операционная система Cisco IOS на них должна поддерживать
шифрование (имя файла IOS должно включать символы «k9»). Внешние интерфейсы (FastEthernet0/1) этих маршрутизаторов подключены к глобальной сети с реальными IP-адресами (1.0.0.1/24 и 1.0.0.2/24).
Настроим IPSec-туннель между внутренними сетями, чтобы пользователи
одной сети могли безопасно обращаться к ресурсам другой, при этом трафик
будет шифроваться. Также настроим NAT, чтобы тунеллировался только
трафик из одной сети в другую, а остальной трафик (например, в
Интернет), шел по другому каналу. Для второго маршрутизатора настройки
такие же, меняется только адрес внутренней сети и внешнего интерфейса,
соответственно изменяются access-list’ы.
Настройка IPsec на IOS состоит из нескольких шагов:
- Настраиваем политики первой фазы IPsec – определяем метод
шифрования, группу ДХ, метод аутентификации. Делается это в режиме
конфигурирования crypto isakmp policy - Если на первом шаге для аутентификации были выбраны преднастроенные ключи, то этот ключ необходимо задать командой crypto isakmp key
- Задаем набор политик для второй фазы IPsec: алгоритм шифрования,
метод проверки подлинности трафика (иными словами, хэш-функцию).
Делается это командой crypto ipsec transform-set. - Создаем расширенные списки доступа для определения того, какой трафик необходимо шифровать, а какой нет.
- Создаем карту шифрования, которая будет в себе содержать необходимый
набор политик второй фазы, идентификатор удаленной стороны и вешаем эту
карту на интерфейс. Создать карту шифрования можно командой crypto-map
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
hostname c2811-1
no aaa new-model
ip cef
crypto isakmp policy 100
encryption aes # можно выбирать des, 3des, aes 128, aes 192, aes 256
hash md5 # md5 или sha1
authentication pre-share #pre-share, rsa-sig или rsa-encr
group 2 # группа безопасности для шифрования трафика при обмене ключами между маршрутизаторами
crypto isakmp key cisco address 1.0.0.2 # адрес другого маршрутизатора – конца туннеля
crypto ipsec transform-set PEERS esp-aes esp-md5-hmac
crypto map IPSEC 100 ipsec-isakmp
set peer 1.0.0.2 # адрес другого маршрутизатора – конца туннеля
set security-association idle-time 600
set transform-set PEERS
set pfs group1 # использование DH-алгоритма при первоначальном обмене ключами
match address ACL_IPSEC
interface FastEthernet0/0 # внешний интерфейс
encapsulation dot1Q 1 native
ip address 1.0.0.1 255.255.255.0
ip nat outside
ip virtual-reassembly
no snmp trap link-status
crypto map IPSEC
interface FastEthernet0/1 # внутренний интерфейс
encapsulation dot1Q 2
ip address 192.168.1.1 255.255.255.0
ip nat inside
ip virtual-reassembly
no snmp trap link-status
ip route 0.0.0.0 0.0.0.0 FastEthernet0/0
ip route 192.168.2.0 255.255.255.0 1.0.0.2
ip http server
no ip http secure-server
ip nat inside source list 101 interface FastEthernet0/0 overload
ip access-list extended ACL_IPSEC # крипто-ACL
permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
permit ip host 1.0.0.1 host 1.0.0.2
permit ip host 1.0.0.2 host 1.0.0.1
deny ip any any
access-list 101 deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
# эта строка нужна, чтобы NAT не использовался для внутренних адресов – они связываются через туннель IPSec
access-list 101 permit ip 192.168.1.0 0.0.0.255 any
line con 0
line aux 0
line vty 0 4
password cisco
login
Read the article SITE TO SITE VPN BETWEEN CISCO ROUTERS in English
Одна из самых распространенных задач, для которых используются маршрутизаторы Cisco – построение VPN тоннелей между удаленными друг от друга площадками. Рассмотрим пример, где требуется связать сети двух офисов фирмы: главного и дополнительного.
В нашем распоряжении будут:
Маршрутизатор Cisco 2800 в главном офисе (R-MAIN)
Сеть для пользователей 192.168.10.0 /24
Внешний статический адрес 1.1.1.2 /30
Шлюз провайдера 1.1.1.1 /30Маршрутизатор Cisco 881 в дополнительном офисе (R-BRANCH)
Сеть для пользователей 192.168.20.0 /24
Внешний статический адрес 2.2.2.2 /30
Шлюз провайдера 2.2.2.1 /30
Оба маршрутизатора имеют доступ в Интернет и минимальные настройки наподобие тех, что описаны в этой статье. Пользователи обоих офисов могут выходить в Интернет, имеют доступ к рабочим станциям и серверам в своих сетях, но не имеют доступа к сети другого офиса.
Есть два простых способа организовать защищенное соединение межу офисами:
Способ первый. Тоннельные интерфейсы.
Подходит в тех случаях, когда тоннель создается между двумя маршрутизаторами Cisco. Прост и удобен в настройке и использовании. Важно напомнить, что внешние адреса постоянны и статически выдаются провайдером связи в обоих способах.
Создадим виртуальный тоннель, который будет использоваться для прохождения трафика между площадками.
Шаг 1. Параметры шифрования
Выберем параметры шифрования для тоннеля. Если вы не знаете, что это такое, то просто скопируйте строчки из этого примера.
R-MAIN(config)#
crypto isakmp policy 1
encr 3des
authentication pre-share
group 2
crypto ipsec transform-set ESP_3DES_SHA_HMAC esp-3des esp-sha-hmac
crypto ipsec df-bit clear
crypto ipsec profile VTI_PROF
set transform-set ESP_3DES_SHA_HMAC
set pfs group2
Эти настройки для маршрутизатора R-BRANCH в дополнительном офисе будут идентичными.
Шаг 2. Ключ шифрования
Ключ шифрования должен быть одинаковым на обоих маршрутизаторах. Рекомендую сделать его не менее 50 символов так, чтобы в него входили цифры, буквы и спец символы, однако в примере буду использовать заведомо простой «12345».
Для главного офиса
R-MAIN(config)#
crypto isakmp key 0 12345 address 2.2.2.2
Для дополнительного офиса
R-BRANCH(config)#
crypto isakmp key 0 12345 address 1.1.1.2
В примерах красным цветом выделены места, которые следует изменять. Цифра 0 стоит не просто так, а обозначает, что ключ вводится в незашифрованном виде, и ее трогать не следует. При просмотре конфигурации 0 может (но необязательно) измениться на 7 и ключ будет записан в зашифрованном виде. Например
R-MAIN#sh run
/...вырезано.../
crypto isakmp key 7 ^bn UjbsdfgsujGsdf address 1.1.1.2
/...вырезано.../
Это не значит, что он изменился, а значит, что он отображается(!) в зашифрованном виде.
Обратите внимание, что в каждом офисе мы указываем внешний адрес соседней площадки.
Шаг 3. Создание тоннельных интерфейсов
На каждом маршрутизаторе создаем виртуальный тоннельный интерфейс.
В главном офисе:
R-MAIN(config)#
interface Tunnel1
description Link to R-BRANCH
ip address 10.0.0.1 255.255.255.252
tunnel source FastEthernet 0/0
tunnel destination 2.2.2.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI_PROF
ip address 10.0.0.1 255.255.255.252 — собственный адрес виртуального тоннеля
tunnel source FastEthernet 0/0 — собственный внешний интерфейс маршрутизатора
tunnel destination 2.2.2.2 — внешний адрес маршрутизатора дополнительного офиса
tunnel mode ipsec ipv4 — вид шифрования
tunnel protection ipsec profile VTI_PROF — способ шифрования
Важно!
Если после ввода последних 2ух строк у вас появились сообщения об ошибках и маршрутизатор не принимает эти команды, то удалите профиль шифрования командой
no crypto ipsec profile VTI_PROF
На Вашем маршрутизаторе с текущей версией операционной системы IOS не получится воспользоваться этим способом. Переходите к способу 2.
В дополнительном офисе
R-BRANCH(config)#
interface Tunnel1
description Link to R-MAIN
ip address 10.0.0.2 255.255.255.252
tunnel source FastEthernet 4
tunnel destination 1.1.1.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI_PROF
ip address 10.0.0.2 255.255.255.252 — собственный адрес виртуального тоннеля
tunnel source FastEthernet 4 — собственный внешний интерфейс маршрутизатора
tunnel destination 1.1.1.2 — внешний адрес маршрутизатора главного офиса
tunnel mode ipsec ipv4 — вид шифрования
tunnel protection ipsec profile VTI_PROF — способ шифрования
Если все 3 шага выполнены корректно, то состояние интерфейса перейдет из состояния up/down в состояние up/up. Посмотреть это можно следующей командой.
R-MAIN# sh inter tun 1
Tunnel1 is up, line protocol is up
/...вырезано.../
Шаг 4. Проверка работы VPN тоннеля
Проверяем работоспособность тоннеля запустив ping до соседнего адреса тоннеля. Например из головного офиса:
R-MAIN#ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/17/20 ms
Дополнительно убеждаемся, что пакеты проходят именно через защищенный тоннель командой sh cry ips sa peer 2.2.2.2
R-MAIN#sh cry ips sa peer 2.2.2.2
interface: Tunnel1
Crypto map tag: Tunnel1-head-0, local addr 2.2.2.2
protected vrf: (none)
local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
current_peer 2.2.2.2 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps:5, #pkts encrypt: 5, #pkts digest: 5
#pkts decaps: 5, #pkts decrypt: 5, #pkts verify: 5
/...вырезано.../
Последние две строчки показывают, что маршрутизатор зашифровал и отправил 5 пакетов и столько же получил и расшифровал. Эти счетчики будут срабатывать каждый раз, когда какой-либо пакет будет проходить по тоннелю между нашими маршрутизаторами.
Шаг 5. Маршрутизация
Для того, чтобы обе площадки были доступны друг другу, следует добавить соответствующие строчки маршрутизации на каждом устройстве.
В головном офисе
R-MAIN(config)#
ip route 192.168.20.0 255.255.255.0 10.0.0.2
В дополнительном офисе
R-BRANCH(config)#
ip route 192.168.10.0 255.255.255.0 10.0.0.1
После этого все компьютеры, серверы и иные ресурсы обеих сетей должны быть доступны друг другу, а связь быть защищенной.
Способ второй. Универсальный
Подходит, когда требуется сделать тоннель между маршрутизатором и Cisco ASA или любым другим устройством, поддерживающим ipsec vpn, не обязательно Cisco. Настройки параметров шифрования, ключей, маршрутизации на другом стороне будут одинаковы по сути, но различны по командам/отображению. Для простоты и лучшего понимания рассмотрим пример с теми же двумя маршрутизаторами, которые были рассмотрены выше.
Шаг 1. Параметры шифрования
Выберем параметры шифрования для тоннеля. Если вы не знаете, что это такое, то просто скопируйте строчки из этого примера.
R-MAIN(config)#
crypto isakmp policy 1
encr 3des
authentication pre-share
group 2
crypto ipsec transform-set ESP_3DES_SHA_HMAC esp-3des esp-sha-hmac
crypto ipsec df-bit clear
Эти настройки для маршрутизатора R-BRANCH в дополнительном офисе будут идентичными.
Шаг 2. Ключ шифрования
Задаем ключ шифрования. Он будет одинаковым для обоих участников защищенного тоннеля. Рекомендую сделать его не менее 50 символов так, чтобы в него входили цифры, буквы и спец символы, однако в примере буду использовать заведомо простой «12345».
Для главного офиса
R-MAIN(config)#
crypto isakmp key 0 12345 address 2.2.2.2
Для дополнительного офиса
R-BRANCH(config)#
crypto isakmp key 0 12345 address 1.1.1.2
В примерах красным цветом выделены места, которые следует изменять. Цифра 0 стоит не просто так, обозначает, что ключ вводится в первозданном виде, и ее трогать не следует. При просмотре конфигурации 0 может измениться (но необязательно) на 7 и ключ будет записан в ином виде. Например
R-MAIN#sh run
/...вырезано.../
crypto isakmp key 7 ^bn UjbsdfgsujGsdf address 1.1.1.2
/...вырезано.../
Это не значит, что он изменился, а значит, что он отображается в зашифрованном виде.
Обратите внимание, что в каждом офисе указывается внешний адрес соседней площадки.
Шаг 3. Объекты шифрования
Указываем трафик, который подлежит шифрованию. В нашем случае – это трафик между сетью 192.168.10.0 /24 головного офиса и сетью 192.168.20.0 /24 дополнительного офиса. Для этого создаем соответствующий список доступа на каждой площадке:
В головном офисе
R-MAIN(config)#
Ip access-list extended ACL_CRYPTO_DO
permit ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
В дополнительном офисе
R-BRANCH(config)#
Ip access-list extended ACL_CRYPTO_MAIN
permit ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
Шаг 4. Политика шифрования
На каждой площадке создаем политику шифрования (crypto map), в которой указываем все правила и параметры шифрования
В головном офисе
R-MAIN(config)#
crypto map CRYPTO_MAP 1 ipsec-isakmp
set peer 2.2.2.2
set transform-set ESP_3DES_SHA_HMAC
match address ACL_CRYPTO_DO
В дополнительном офисе:
R-BRANCH(config)#
crypto map CRYPTO_MAP 1 ipsec-isakmp
set peer 1.1.1.2
set transform-set ESP_3DES_SHA_HMAC
match address ACL_CRYPTO_MAIN
После этого crypto map должны быть привязана к внешнему интерфейсу.
В головном офисе
R-MAIN(config)#
Interface FastEthernet0/1
crypto map CRYPTO_MAP
В дополнительном офисе:
R-BRANCH(config)#
Interface Fa 4
crypto map CRYPTO_MAP
Шаг 5. Маршрутизация
Для того, чтобы обе площадки были доступны друг другу, следует добавить соответствующие строчки маршрутизации для каждого устройства. Удаленные сети должны быть доступны через шлюзы провайдеров сети Интернет.
В головном офисе
R-MAIN(config)#
ip route 192.168.20.0 255.255.255.0 1.1.1.1
В дополнительном офисе
R-BRANCH(config)#
ip route 192.168.10.0 255.255.255.0 2.2.2.1
После этого все компьютеры, серверы и иные ресурсы обеих сетей должны быть доступны друг другу, а связь быть защищенной.
Шаг 6. Проверка работы тоннеля
Проверяем работоспособность тоннеля, запустив ping с одного устройства внутри локальной сети до одного из адресов соседней площадки. Например, из головного офиса до какого-то компьютера из сети дополнительного офиса:
R-MAIN#ping 192.168.20.10
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.10, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/17/20 ms
После этого убеждаемся, что пакеты проходят именно через тоннель
R-MAIN#sh cry ips sa peer 2.2.2.2
interface: Tunnel1
Crypto map tag: Tunnel1-head-0, local addr 2.2.2.2
protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.10.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.20.0/255.255.255.0/0/0)
current_peer 2.2.2.2 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps:5, #pkts encrypt: 5, #pkts digest: 5
#pkts decaps: 5, #pkts decrypt: 5, #pkts verify: 5
/...вырезано.../
Указанные строчки показывают, что маршрутизатор зашифровал и отправил 5 пакетов и столько же получил. Эти счетчики будут срабатывать каждый раз, когда какой-либо трафик будет проходить между нашими маршрутизаторами.
Этот способ чаще требует вмешательства со стороны администратора для внесения изменений в конфигурации устройств и требует больше внимательности при настройке. Степень защищенности трафика одинакова в обоих приведенных способах.
Важно!
Не забудьте сохранить конфигурацию всех устройств командой write или copy run start. Иначе после перезагрузки все изменения будут потеряны.
R-MAIN#write
Building configuration...
[OK]
Перейти к оглавлению
CISCO IPsec — в статье рассказаны варианты развёртывания VPN туннеля: «чистый» IPsec, GRE over IPsec в виртуальной среде EVE-NG.
Тестовая среда
Использовалась IOSv Software (VIOS-ADVENTERPRISEK9-M), Version 15.6(2)T, RELEASE SOFTWARE (fc2).
Туннель туннель будет прокидываться между интерфейсами GigabitEthernet0/0 роутеров.
Попробуем симулировать среду 2 граничных роутеров, между которыми Интернет. Поэтому на роутерах настроен NAT. Компьютеры PC1 и PC2 друг-друга напрямую не видят, так как они за натом. Начальная конфигурация R1:
... interface GigabitEthernet0/0 ip address 10.10.10.1 255.255.255.252 ip nat outside ip virtual-reassembly in duplex auto speed auto media-type rj45 ! interface GigabitEthernet0/1 ip address 192.168.1.1 255.255.255.0 ip nat inside ip virtual-reassembly in duplex auto speed auto media-type rj45 ... ip nat inside source list 1 interface GigabitEthernet0/0 overload ip route 0.0.0.0 0.0.0.0 10.10.10.2 — маршрут по умолчанию на адрес следующего перехода (адрес интерфейса GigabitEthernet0/0 роутера R2) ! access-list 1 permit 192.168.1.0 0.0.0.255 ...
Для R2 аналогично. Далее уже не буду каждый раз это писать. Подразумевается, что на R2 симметричные настройки.
Кроме этого для защиты со стороны «интернета» на интерфейсах далее будет настроен ACL, в котором разрешены на вход в роутер лишь несколько протоколов. Такой ACL скорее всего понадобится в продакшене, если настроен CBAC-файрвол.
Много букв про IPsec
Да, можно заучить команды, но очень важно понимать нюансы настройки и работы IPsec. А тут их как никогда много. Причём в разных источниках информация об IPsec немного различается. Достаточно таких источников пересмотрел. Скорее всего мой рассказ тоже будет немного отличаться от других. Постараюсь, тем не менее, обращать внимание на важные особенности.
Про IPsec хорошо и очень подробно рассказывалось в курсе CCNA Security (210-260 IINS). Сейчас этот курс устарел, но к нему как и к другим, есть официальный гайд в формате PDF: CCNA Security 210-260 Official Cert Guide. Найти его несложно.
IPsec не один протокол, как можно было бы подумать. Это набор протоколов (Framework), работа IPsec — согласованная работа этих протоколов. Набор протоколов в IPsec неоднозначный, нужно выбрать, какие именно протоколы будут использоваться.
С использованием IPsec достигается концепция безопасности CIA Triad: Confidentiality, Integrity, Availability.
- Конфиденциальность данных — никто посторонний не сможет их просмотреть;
- Целостность данных — данные не были изменены при передаче;
- Доступность данных — постороннее лицо не может уничтожить пересылаемые данные или причинить им ущерб.
Кроме этого IPsec обеспечивает Antireplay (все пакеты нумеруются и если пакет уже приходил, то второй пакет с таким же номером будет отброшен).
Рассмотрим используемые протоколы:
IKE
- IKE — Самый центровой протокол в IPsec Framework это IKE (Internet Key Exchange). Остальные протоколы работают под его управлением;
Самое первое, IKE должен быть включен для реализации функционала IPsec. Он включен по умолчанию в IOS, но его можно и отключить:
Router(config)# no crypto isakmp enable *Aug 8 10:11:16.283: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is OF
Надо проверить и при необходимости включить:
Router# show crypto isakmp policy ISAKMP is turned off Router(config)# crypto isakmp enable - эта команда также проверяет поддержку IKE со стороны роутера, если при выполнении возникает ошибка, IOS нужно апгрейдить
Существует две версии IKE: IKEv1 (RFC 2409) and IKEv2 (RFC 7296), IKEv2 реализован чтобы обойти ограничения IKEv1 и имеет существенные улучшения по сравнению с первой версией:
- EAP (certificate-based authentication);
- Anti-DoS capabilities;
- Needs fewer messages to establish an IPsec SA
Но сегодня рассматриваем только IKEv1, он до сих пор широко используется и не требует какого-то специально оборудования.
Иногда в литературе термины IKE и ISAKMP взаимозаменяемы:
For Cisco platforms, IKE is analogous to ISAKMP, and the two terms are used interchangeably.
Это не меняет сказанного и никакой путаницы не вносит.
Аутентификация
Данное действо производится перед всеми другими.
Роутер должен подтвердить другому роутеру (и наоборот, то есть для 2 роутеров процедура выполняется 2 раза, сначала в одну, потом в обратную сторону) свою подлинность для участия в IPsec туннеле. Возможности: Общий, вводимый вручную, секретный ключ PSK (Pre Shared Key), Сертификаты RSA. Рекомендуется: Сертификаты RSA.
Аутентификация на основе общего ключа PSK происходит так: к ключу прикладывается определённая несекретная информация, известная и общая для обоих роутеров, высчитывается хеш, отправляется второму роутеру. Второй роутер повторяет процедуру для своего ключа и сравнивает хеши. Совпадение хешей означает совпадение общих ключей и как результат — подлинность, приславшего сообщение роутера. Потом второй роутер повторяет процедуру. В результате оба роутера подтвердили свою подлинность друг-другу.
Аутентификация RSA в рамках данной заметки рассматриваться не будет, поэтому разговора про неё нет. По факту повсеместно используется PSK, он не то чтобы проще, а глобально проще.
Плюс у RSA есть заморочки по поводу времени: мало того что оба роутера должны быть настроены на получение точного времени и время обязательно должно быть синхронизировано уже при загрузке, но ещё есть и связанные баги. Кроме этого настройка самих сертификатов тоже трудоёмкая задача. Возможно, как-нибудь.. выложу статью с примером.
R1(config-isakmp)# authentication ? pre-share Pre-Shared Key rsa-encr Rivest-Shamir-Adleman Encryption rsa-sig Rivest-Shamir-Adleman Signature
Шифрование
Применяется симметричное шифрование, то есть такое, где ключ для шифрования и расшифровки один и тот же. Оно менее устойчиво ко взлому чем ассиметричное, но только симметричное шифрование технически доступно для больших объёмов передаваемых пользовательских данных, так как использует относительно низкую утилизацию CPU устройства. Рекомендуется AES.
R1(config-isakmp)# encryption ? 3des Three key triple DES aes AES - Advanced Encryption Standard. des DES - Data Encryption Standard (56 bit keys).
Обмен ключами
Хорошо, роутеры друг друга аутентифицировали, теперь им нужен ключ для шифрования потока данных. Этого ключа нет в конфигурации, он генерируется, как говорится, «налету».
Для создания туннеля обе стороны должны совместно вычислить общий секретный ключ для симметричного шифрования данных в туннеле (не путать с PSK, который нужен для аутентификации). Всё это надо сделать через публичную сеть Интернета. Как это выполнить? На пустом месте, через небезопасную сеть, договорится о ключе для шифрования?
Для этого используется специальный ассиметричный алгоритм Диффи-Хеллмана (DH). Степень защиты при расчёте общего ключа для шифрования определяется группой DH. Рекомендуется: Если в алгоритмах шифрования или аутентификации используется 128-битовый ключ, группа 14, 19, 20 или 24, а для 256-битового ключа группа 21 или 24.
R1(config-isakmp)# group ? 1 Diffie-Hellman group 1 (768 bit) 14 Diffie-Hellman group 14 (2048 bit) 15 Diffie-Hellman group 15 (3072 bit) 16 Diffie-Hellman group 16 (4096 bit) 19 Diffie-Hellman group 19 (256 bit ecp) 2 Diffie-Hellman group 2 (1024 bit) 20 Diffie-Hellman group 20 (384 bit ecp) 21 Diffie-Hellman group 21 (521 bit ecp) 24 Diffie-Hellman group 24 (2048 bit, 256 bit subgroup) 5 Diffie-Hellman group 5 (1536 bit)
Целостность
Для каждого сообщения вычисляется хеш, который прикладывается к сообщению. Хеш очень короткий, всегда одинаковой длины (определяется алгоритмом), он однозначно определяет исходное сообщение. При получении высчитывается хеш полученного сообщения, он сравнивается с приложенным хешем. Если значения 2 хешей совпадают, значит сообщение не было изменено.
Такой метод уязвим к атаке «человек посередине» (Man-In-The-Middle, MITM): сообщение перехватывается по пути следования, изменяется, прикладывается новый хеш. Для принимающей стороны всё ok. Чтобы этого не могло произойти, применяется технология HMAC (Hash-Based Message Authentication Code): перед созданием хеша к сообщению прикладывается ключ, который есть только у отправляющей и принимающей стороны.
В результате, атакующий после изменения сообщения не сможет вычислить нужный хеш, так как у него нет ключа. А вычислить ключ по исходному сообщению и хешу для сообщение+ключ он тоже не сможет. Точнее, на это нужно время, чем устойчивее алгоритм хеширования, тем больше времени нужно на взлом. Рекомендуется SHA256 и выше.
R1(config-isakmp)# hash ? md5 Message Digest 5 sha Secure Hash Standard sha256 Secure Hash Standard 2 (256 bit) sha384 Secure Hash Standard 2 (384 bit) sha512 Secure Hash Standard 2 (512 bit)
Загрузка CPU
Пару слов: рекомендации это конечно хорошо, но чем сильнее алгоритмы, тем больше накладных расходов на их обсчёт. Туннелей может быть много. Конечно для большого числа туннелей предпочтителен DMVPN, где туннели между спицами поднимаются при наличии трафика. А не полносвязная сеть постоянных IPsec туннель. Но как мы знаем, не всегда всё в продакшене гладко и пушисто.
Кроме непосредственно туннелей на роутере есть и другие сервисы: файрвол (CBAC, ZBF), возможно IOS IPS (не знаю пользует его хоть кто-то или нет, но допустим), возможно NetFlow (оно пригружает прилично), возможно через этот роутер в интернете сидит огромное число народу с помощью NAT, возможно часто идёт несколько потоков видео-конференций. Возможно роутер время от времени атакуют DDoS’ом и на нём нет политики ограничения служебного трафика. Ещё что-то.
Особенно тема актуальна для старых моделей роутеров со слабым CPU. Всё это нужно учитывать и алгоритмы подбирать такие, чтобы они совместно со всем вышеперечисленным не положили роутер. Для этого мониторить загрузку CPU:
R1# show processes cpu history
При высокой нагрузке алгоритмы брать попроще. В примере буду использовать сильные алгоритмы. В продакшене видел люди не парятся, используют 56-битный DES и MD5. 🙂 Пример реализации, тут рассказанный, он для изучения возможностей IPsec, не калька для продакшена. Это важно.
Настройка IPsec
Существует несколько вариантов настройки IPsec.
Разбираться будем последовательно и начнем с классического варианта Policy Based, основанного на Crypto Map. А во второй части статьи подпихнём туда GRE, Crypto Map при этом остаётся. В таком варианте трафик в туннель отбирается с помощью ACL. Остальные варианты будут рассмотрены далее в других частях статьи.
Порядок следующий:
- Настраиваем фазу 1;
- Задаём PSK;
- Создаём Crypto ACL для отбора интересного трафика;
- Настраиваем фазу 2: Transform Set;
- Создаём Crypto Map, в Crypto Map используем созданные Crypto ACL, Transform Set;
- Затем вешаем Crypto Map на нужный интерфейс;
- Разрешаем входящий трафик ISAKMP, ESP.
Чистый IPsec
«Чистый» — это моё название, официально туннель называется просто IPsec VPN tunnel.
Туннель возможен между CISCO Router, ASA в любом сочетании. Умеют даже самые старые железки, но в разном объёме (IKEv1, IKEv2). Об этом поговорим в следующих частях статей про IPsec.
В CISCO ASA настройки могут быть выполнены через графическое средство — ASDM. Там всё понятно и пошагово, поэтому для определённости будем считать, что туннель пробрасывается между двумя ISRs (Integrated Services Routers). Настройка в этом случае сложнее, ведь она производится через CLI и нужно понимать в каком порядке вводить команды, а также что значит каждая команда.
Важно. Недостатком чистого IPsec туннеля является то, что он может передавать только юникастовые пакеты. Мультикаст передаваться не может, это является препятствием для обмена информацией динамическими протоколами маршрутизации.
Чистый IPsec используется когда проброс информации динамических протоколов маршрутизации и передача потокового видео через туннель не нужны. Такие ситуации бывают редко, поэтому настройка чистого IPsec скорее больше умозрительный пример, чем боевой. Но разобрать настройку обязательно надо, так как это самая основа основ. Именно из этой настройки растёт понимание IPsec в целом.
Необходимые понятия
- ISAKMP — Реализация IKE для первой фазы (Security Association and Key Management Protocol);
- SA — В ходе фазы 1 и фазы 2 роутеры обмениваются и утверждают набор параметров IPsec Framework: хеширование, шифрование и так далее. Каждый набор или коллекция и есть SA (Security Association).
Для создания IPsec туннеля требуется 2 SA: для первой и для второй фазы. На роутере уже есть предустановленные SA, но пользоваться ими не рекомендуется (по крайней мере предустановленные SA 1 фазы используют устаревшие, нестойкие алгоритмы).
Для успешного поднятия туннеля параметры SA на одном роутере должны полностью совпадать с параметрами SA на другом роутере (для каждой фазы). Роутеры будут перебирать имеющиеся SA пока не подберут совпадающие.
Фазы IPsec
Процесс установки IPsec VPN туннеля состоит из 2ух последовательных стадий-фаз (Phases):
- IKE Phase 1 — Создаётся 1 двунаправленный туннель, необходимый для согласования Phase 2. По этому туннелю передаётся только управляющая информация (are used to carry control plane and data plane traffic for IPsec), пользовательские данные не передаются. Называется ISAKMP туннель;
- IKE Phase 2 — С помощью туннеля фазы 1 создаются дополнительно ещё 2 однонаправленных туннеля, от первого роутера ко второму и от второго к первому, по которым передаётся пользовательская информация. Туннели второй фазы и есть то, что называется IPsec туннель.
Это сильно упрощённая история. На самом деле не совсем однонаправленные. И туннелей второй фазы может быть много. Но для простоты понимания лучше так. Главное запомнить что SA второй фазы имеют направление.
Важно отметить, что туннель не поднимается сразу после выполнения настроек. Согласования фазы 1, затем 2 начинается после того, как на роутер попадают данные, предназначенные для туннеля ( «интересный» трафик). Данные эти отбираются с помощью ACL (называется Crypto ACL, хотя по факту это самый обычный ACL).
Также важно то, что туннель не существует сколь угодно долго после создания, у него есть время жизни (Lifetime). После истечения Lifetime туннель гасится и пересоздаётся снова (с помощью фаз 1 и 2, при наличии интересного трафика). Если интересного трафика нет, туннель лежит, но постоянно готов к созданию сразу при появлении такого трафика.
Lifetime выбирается достаточно большим, чтобы туннель слишком часто не пересоздавался. И достаточно маленьким, чтобы туннель не был взломан. При использовании стойких ко взлому алгоритмов актуальность малого Lifetime туннеля снижается.
R1(config-isakmp)# lifetime ? <60-86400> lifetime in seconds
Встречал в разных материалах, что по истечении Lifetime «обновляются ключи шифрования», открываю официальный гайд, о котором сказано в начале статьи:
Впрочем, никто мне не мешает проверить (будет далее).
Фаза 1
Начинаем настраивать SA первой фазы. Создаётся политика ISAKMP. HAGLE — удобная мнемоника для запоминания этой SA:
- Hash — хеширование SHA256;
- Autentification — аутентификация PSK;
- Group — группа DH 21;
- Lifetime — время жизни туннеля 3600 (по умолчанию 1 день = 86400);
- Encryption — шифрование AES 256 (по умолчанию для AES значение 128).
Как уже говорилось параметры SA для обоих роутеров должны совпадать. Исключение составляет параметр Lifetime: если он не совпадает, то взят будет наименьший.
R1(config)# crypto isakmp policy 3 R1(config-isakmp)# hash sha256 R1(config-isakmp)# authentication pre-share R1(config-isakmp)# group 21 R1(config-isakmp)# lifetime 3600 R1(config-isakmp)# encryption aes 256 R2(config)# crypto isakmp policy 3 R2(config-isakmp)# hash sha256 R2(config-isakmp)# authentication pre-share R2(config-isakmp)# group 21 R2(config-isakmp)# lifetime 3600 R2(config-isakmp)# encryption aes 256
Важно отметить, что номер политики означает приоритет её использования:
R1(config)# crypto isakmp policy ? <1-10000> Priority of protection suite
Использовал номер 3, приоритет третий, но поскольку политики с номерами 1 и 2 не определены, то наша третья будет использоваться первой. Также необязательно чтобы номера политик с двух сторон совпадали.
Дефолтные SA первой фазы
Посмотрим их:
R1# show crypto isakmp default policy Default IKE policy Default protection suite of priority 65507 encryption algorithm: AES - Advanced Encryption Standard (128 bit keys). hash algorithm: Secure Hash Standard authentication method: Rivest-Shamir-Adleman Signature Diffie-Hellman group: #5 (1536 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65508 encryption algorithm: AES - Advanced Encryption Standard (128 bit keys). hash algorithm: Secure Hash Standard authentication method: Pre-Shared Key Diffie-Hellman group: #5 (1536 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65509 encryption algorithm: AES - Advanced Encryption Standard (128 bit keys). hash algorithm: Message Digest 5 authentication method: Rivest-Shamir-Adleman Signature Diffie-Hellman group: #5 (1536 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65510 encryption algorithm: AES - Advanced Encryption Standard (128 bit keys). hash algorithm: Message Digest 5 authentication method: Pre-Shared Key Diffie-Hellman group: #5 (1536 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65511 encryption algorithm: Three key triple DES hash algorithm: Secure Hash Standard authentication method: Rivest-Shamir-Adleman Signature Diffie-Hellman group: #2 (1024 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65512 encryption algorithm: Three key triple DES hash algorithm: Secure Hash Standard authentication method: Pre-Shared Key Diffie-Hellman group: #2 (1024 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65513 encryption algorithm: Three key triple DES hash algorithm: Message Digest 5 authentication method: Rivest-Shamir-Adleman Signature Diffie-Hellman group: #2 (1024 bit) lifetime: 86400 seconds, no volume limit Default protection suite of priority 65514 encryption algorithm: Three key triple DES hash algorithm: Message Digest 5 authentication method: Pre-Shared Key Diffie-Hellman group: #2 (1024 bit) lifetime: 86400 seconds, no volume limit R1#
Их 8, начиная с самой устойчивой, затем постепенно устойчивость ко взлому снижается. При отсутствии вручную заданной SA первой фазы роутер попытается использовать дефолтные SA в порядке приоритетов (номеров). Сначала саму стойкую 65507, согласование окончилось ошибкой, тогда 65508. И так далее.
PSK
Указывается ключ PSK и IP роутера с другой стороны туннеля (IP пира):
R1(config)# crypto isakmp key IPsecVPNtunnel address 10.10.10.2 R2(config)# crypto isakmp key IPsecVPNtunnel address 10.10.10.1
Формат команды тут:
crypto isakmp key keystring address peer-address [mask]
Значение для адреса 0.0.0.0 0.0.0.0 может быть использовано чтобы матчить с любым пиром.
Crypto ACL
Самый обычный ACL, нам нужно отобрать трафик с PC1 на PC2 для R1 и с PC2 на PC1 для R2:
R1(config)# access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 R2(config)# access-list 101 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
Этот ACL ничего не разрешает и ничего не запрещает, у него другие функции. Он только для отбора трафика. Трафик, который удовлетворяет строкам permit (у нас тут одна строка), будет зашифрован и передан через туннель. А трафик, который удовлетворяет строкам deny (у нас неявный запрет в конце списка), будет передан как обычно.
Неплохо будет добавить пояснение что это за ACL, повышает читаемость конфигурации:
remark ACL identifies interesting traffic for IPsec tunnel
Фаза 2
SA второй фазы несколько отличается от первой. IPsec может использовать протокол AH или протокол ESP:
- AH — Authentication Header, IP протокол 51, обеспечивает аутентификацию и целостность данных, но не поддерживает шифрование и обход NAT (NAT-T), поэтому в реальной жизни его ценность минимальна;
- ESP — Encapsulation Security Protocol, IP протокол 50, обеспечивает аутентификацию, целостность данных и шифрование, поддерживает NAT-T. Для туннеля через Интернет интересен только этот протокол.
IPsec работает или в туннельном режиме, или в транспортном режиме:
- Туннельный режим — добавляется новый IP заголовок, исходный пакет полностью упаковывается, используется при создании туннеля между роутерами (site-to-site). Для нас подходит только этот режим;
- Транспортный режим — используется IP заголовок исходного пакета, применяется или при подключении клиентов к серверу (VPN client), или когда уже есть сетевая доступность между устройствами (GRE over IPsec).
Transform Set
Настраиваем набор алгоритмов для фазы 2:
R1(config)# crypto IPsec transform-set R1-R2 ? ah-md5-hmac AH-HMAC-MD5 transform ah-sha-hmac AH-HMAC-SHA transform ah-sha256-hmac AH-HMAC-SHA256 transform ah-sha384-hmac AH-HMAC-SHA384 transform ah-sha512-hmac AH-HMAC-SHA512 transform comp-lzs IP Compression using the LZS compression algorithm esp-3des ESP transform using 3DES(EDE) cipher (168 bits) esp-aes ESP transform using AES cipher esp-des ESP transform using DES cipher (56 bits) esp-gcm ESP transform using GCM cipher esp-gmac ESP transform using GMAC cipher esp-md5-hmac ESP transform using HMAC-MD5 auth esp-null ESP transform w/o cipher esp-seal ESP transform using SEAL cipher (160 bits) esp-sha-hmac ESP transform using HMAC-SHA auth esp-sha256-hmac ESP transform using HMAC-SHA256 auth esp-sha384-hmac ESP transform using HMAC-SHA384 auth esp-sha512-hmac ESP transform using HMAC-SHA512 auth
Здесь R1-R2 имя набора, оно будет далее использоваться в Crypto MAP и выбирать его нужно таким, чтобы потом не запутаться, то есть одинаковым для обоих роутеров. Выбираем далее esp-aes 256:
R1(config)# crypto IPsec transform-set R1-R2 esp-aes ? 128 128 bit keys. — по умолчанию 192 192 bit keys. 256 256 bit keys.
И esp-sha256-hmac, туннельный режим:
R1(config)# crypto IPsec transform-set R1-R2 esp-aes 256 esp-sha256-hmac R2(config)# crypto IPsec transform-set R1-R2 esp-aes 256 esp-sha256-hmac
Поскольку туннельный режим идёт по умолчанию, то вводить команду mode tunnel для сета не нужно (она добавится автоматически).
Ещё тут можно настроить дополнительные параметры IPsec SA:
Router(config)# crypto ipsec security-association ?
dummy Enable transmitting dummy packets
ecn Handling of ECN bit
idle-time Automatically delete IPSec SAs after a given idle period.
lifetime security association lifetime
replay Set replay checking.
Router(config)# crypto ipsec security-association lifetime seconds ?
<120-2592000> Security association duration in seconds
Выделено цветом глобально заданное время жизни для SA второй фазы. Это значение можно переопределить в Crypto Map. Дополнительные параметры оставляю по умолчанию.
Дефолтный SA второй фазы
Смотрим:
R1# show crypto IPsec transform-set
Transform set default: { esp-aes esp-sha-hmac }
will negotiate = { Transport, },
Transform set R1-R2: { esp-256-aes esp-sha256-hmac }
will negotiate = { Tunnel, },
Единственный дефолтный сет имеет транспортный режим. Он в нашем туннеле не заработает, поэтому SA второй фазы нужно обязательно набивать руками.
Crypto Map
Создаётся Crypto Map, которая вещается на внешний интерфейс в сторону пира. Crypto Map ассоциирует интересный трафик с настройками IKE/IPsec. Трафик исключается из глобальной маршрутизации и принудительно «засовывается» в туннель.
Указывается имя, номер:
R1(config)# crypto map R1-R2-MAP ? <1-65535> Sequence to insert into crypto map entry ...
Номер имеет важное значение. На 1 интерфейс можно повесить только 1 мапу. А как быть если нужно к этому интерфейсу привязать 2, 3.. туннеля? Мапа обычно состоит из нескольких последовательных правил (как и ACL), у каждого правила свой номер. Каждое правило с новым номером и будет соответствовать новому туннелю.Таким образом, теоретически на 1 интерфейс можно повесить 65535 туннелей. В нашей Crypto Map 1 правило.
Тут небольшое лирическое отступление. А вообще сколько туннелей норма при вот таком режиме IPsec, как сейчас разбирается, чтобы полносвязное соединение было (всё на всё)? Два пира — всего 1 туннель (1 на роутер), 3 пира — всего 3 туннеля (2 на роутер), 4 пира — уже 6 туннелей (3 на роутер).. Моё скромное мнение: 1-3 пира, используем IPsec туннели, 4 и более, используем DMVPN. Тут конечно есть варианты, но 4-5-6.. пиров это хорошая причина задуматься о переходе на DMVPN.
Продолжаем:
R1(config)# crypto map R1-R2-MAP 1 ipsec-isakmp % NOTE: This new crypto map will remain disabled until a peer and a valid access list have been configured.
В явном вид говорится, что мапа останется неактивной пока не будет добавлен пир и валидный Crypto ACL для отбора трафика.
... R1(config-crypto-map)# match address 101 R1(config-crypto-map)# set transform-set R1-R2 R1(config-crypto-map)# set peer 10.10.10.2 R2(config)# crypto map R1-R2-MAP 1 IPsec-isakmp R2(config-crypto-map)# match address 101 R2(config-crypto-map)# set transform-set R1-R2 R2(config-crypto-map)# set peer 10.10.10.1
Привязываем ACL, сет алгоритмов и адрес удалённого роутера. Тут строку set peer можно повторить несколько раз, чтобы указать несколько возможных значений. Предпочитаемый пир можно обозначить параметром default после IP адреса.
Команда для трансформ сет имеет формат:
set transform-set transform-set-name1 [transform-setname2…transform-set-name6]
Можно указать несколько сетов, они будут перебираться согласно своего порядка, пока один из них не сматчит и туннель не установится.
Дополнительные возможности Crypto Map
R1(config-crypto-map)# set pfs group24
При согласовании фазы 2 будет ещё раз выполнен алгоритм Диффи-Хеллмана для создания нового симметричного ключа шифрования. В результате у туннелей второй фазы будет собственный ключ шифрования, иначе используется ключ из первой фазы.
R1(config-crypto-map)# set security-association lifetime ?
days Time-based key duration in days
kilobytes Volume-based key duration
seconds Time-based key duration in seconds
Для второй фазы можно задать отдельное время жизни в днях, килобайтах или секундах, иначе вторая фаза будет проходить (после первой, разумеется) при истечении Lifetime первой фазы и пересоздании туннеля. Заданное тут значение заменяет глобальную настройку для этой конкретной мапы.
... R1(config-crypto-map)# set security-association lifetime seconds 900
Интересный момент: при истечении времени жизни туннеля второй фазы, его пересоздание с обновлением ключей происходит бесшовно, то есть никаких перерывов в работе туннеля и никакой потери трафика нет.
Добавление Crypto Map на интерфейс
Добавляем мапу к интерфейсу, никаких ошибок быть не должно:
R1(config)# interface GigabitEthernet 0/0 R1(config-if)# crypto map R1-R2-MAP R1(config-if)# end *Aug 12 17:02:14.382: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON R2(config)# interface GigabitEthernet 0/0 R2(config-if)# crypto map R1-R2-MAP
Если после вылезли вот такие ошибки:
R1(config-if)# crypto map R1-R2-MAP *Aug 15 09:35:39.216: IPsec: Expand action denied, discard or forward packet. ... *Aug 15 09:35:39.218: IPsec: Expand action denied, discard or forward packet. *Aug 15 09:35:39.225: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
То тут 2 варианта: сам что-то накосячил или глюк vIOS при полностью правильных настройках. В первом случае работать скорее не будет, во втором случае работает нормально, проверял.
Важный момент: чтобы Crypto Map отработала, пакет должен попасть на интерфейс, где мапа висит. У нас это достигается маршрутом по умолчанию:
ip route 0.0.0.0 0.0.0.0 10.10.10.2
Если бы не было этого маршрута, то пакет от 192.168.1.2 к 192.168.2.2 был бы отброшен. Мапа сама его не подтянет. Попаданий в Crypto ACL пакетов не будет, туннель не поднимется.
Ещё важный момент: Crypto Map имеет направление, то есть действует только на исходящий (outbound) трафик:
The crypto map is a big "if-then" statement. It is applied to the outside (Internet facing) interface, and then it watches for traffic. If outbound traffic matches the ACL, then the router knows the packet
should be encrypted, encapsulated into an IPsec header (usually protocol 50, which is ESP and stands for Encapsulating Security Payload), and then sent to the IP address of the peer on the other side
Omar Santos, John Stuppi - CCNA Security 210-260 Official Cert Guide
Изменение NAT
В том виде как он есть, NAT не даст работать туннелю. Пакеты будут просто проваливаться в него и всё. Нужно исключить пакеты для туннеля из NAT:
R1(config)# no ip nat inside source list 1 interface GigabitEthernet0/0 overload R1(config)# no access-list 1 R1(config)# ip nat inside source list 100 interface GigabitEthernet0/0 overload R1(config)# access-list 100 deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 R1(config)# access-list 100 permit ip 192.168.1.0 0.0.0.255 any
Ещё раз краткий алгоритм работы IPsec:
Разрешение трафика ISAKMP и ESP
Последний момент в настройке IPsec. Туннель настраивается всегда на граничных роутерах, Crypto Map вешается на интерфейс, смотрящий в Интернет. Но такой роутер защищён от нежелательного входящего со стороны интернет-трафика (CBAC firewall, ACL). А нам надо чтобы прошло согласование 2 фаз IKE. Поэтому нужно в явном виде «пропилить дырки» для входящего трафика IKE и ESP:
R1(config)# ip access-list extended firewall_acl R1(config-ext-nacl)# permit udp host 10.10.10.2 host 10.10.10.1 eq isakmp R1(config-ext-nacl)# permit esp host 10.10.10.2 host 10.10.10.1
На всякий пожарный ещё раз: ISAKMP это UDP порт 500, ESP это IP протокол 50.
Разрешение ICMP
И даже такой ACL недостаточен для нормальной работы. Туда нужно много чего добавить (как минимум SSH). Добавим правило чтобы проходил пинг:
R1(config-ext-nacl)# permit icmp any host 10.10.10.1 echo R1(config-ext-nacl)# permit icmp any host 10.10.10.1 echo-replay
И «лепим» этот ACL на внешний интерфейс во входящем направлении:
R1(config)# interface GigabitEthernet 0/0 R1(config-if)# ip access-group firewall_acl in
Кроме CBAC может быть Zone Based Firewall (ZBF), там ACL не используется, а для трафик разрешается правилами для пары зон. Про ZBF как-нибудь выложу отдельную статью.
Проверка IPsec
Сначала посмотрим чего понастраивали:
R1# show crypto isakmp policy
Global IKE policy
Protection suite of priority 3
encryption algorithm: AES - Advanced Encryption Standard (256 bit keys).
hash algorithm: Secure Hash Standard 2 (256 bit)
authentication method: Pre-Shared Key
Diffie-Hellman group: #21 (521 bit)
lifetime: 3600 seconds, no volume limit
Сет уже просмотрели, когда выводилась инфа о дефолтном сете. Смотрим мапу:
R1# show crypto map
Interfaces using crypto map NiStTeSt1:
Crypto Map IPv4 "R1-R2-MAP" 1 IPsec-isakmp
Peer = 10.10.10.2
Extended IP access list 101
access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Current peer: 10.10.10.2
Security association lifetime: 4608000 kilobytes/900 seconds
Responder-Only (Y/N): N
PFS (Y/N): Y
DH group: group24
Mixed-mode : Disabled
Transform sets={
R1-R2: { esp-256-aes esp-sha256-hmac } ,
}
Interfaces using crypto map R1-R2-MAP:
GigabitEthernet0/0
А что это такое? Что за NiStTeSt1? Это баг данной версии IOS (требуется регистрация, нет если учётной записи в CISCO, то пора создать). Смотреть состояние SAs рано, там всё пусто и по нулям.
Тест туннеля
Для начала включим дебаг:
R1# debug crypto isakmp — так же полезная команда debug crypto IPsec Crypto ISAKMP debugging is on
Запустим трафик с PC1 на PC2, например пинг:
PC1> ping 192.168.2.2 192.168.2.2 icmp_seq=1 timeout 84 bytes from 192.168.2.2 icmp_seq=2 ttl=62 time=15.281 ms 84 bytes from 192.168.2.2 icmp_seq=3 ttl=62 time=5.101 ms ...
Первый пинг пропадает, так как нужно время для поднятия туннеля. Вывод дебага огромен, приводить нет смысла. Тут надо только отметить, что фаза 1 согласовывается в основном режиме (Main mode, MM) или в агрессивном (Aggressive mode, AM). По умолчанию основной режим, агрессивный чуть быстрее (MM 6 сообщений, AM 3 сообщения), непринципиально чтобы заморачиваться на выяснение его настройки:
*Aug 15 22:30:53.733: ISAKMP: (0):Can not start Aggressive mode, trying Main mode. ... *Aug 15 22:30:53.735: ISAKMP: (0):beginning Main Mode exchange
Посмотрим 1 SA:
R1# show crypto isakmp sa IPv4 Crypto ISAKMP SA dst src state conn-id status 10.10.10.2 10.10.10.1 QM_IDLE 1001 ACTIVE IPv6 Crypto ISAKMP SA
Смотрим 2 SA:
R1# show crypto IPsec sa
interface: GigabitEthernet0/0
Crypto map tag: R1-R2-MAP, local addr 10.10.10.1
protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
current_peer 10.10.10.2 port 500
PERMIT, flags={origin_is_acl,}
# pkts encaps: 4, # pkts encrypt: 4, # pkts digest: 4
# pkts decaps: 4, # pkts decrypt: 4, # pkts verify: 4
# pkts compressed: 0, # pkts decompressed: 0
# pkts not compressed: 0, # pkts compr. failed: 0
# pkts not decompressed: 0, # pkts decompress failed: 0
# send errors 0, # recv errors 0
local crypto endpt.: 10.10.10.1, remote crypto endpt.: 10.10.10.2
plaintext mtu 1438, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/0
current outbound spi: 0x2A87F66D(713553517)
PFS (Y/N): Y, DH group: group24
...
Тут надо заметить что эта команда выводит результат для каждой строчки (ACE) из Crypto ACL. Поскольку у нас 1 ACE, вывод такой, было бы 2 ACE, вывод был бы в два раза длиннее. По результатам: пакеты бегают, PFS работает. Также полезная команда show crypto session [ brief | detail ].
Теперь посмотрим на передаваемые пакеты с помощью WareShark:
Нагрузка зашифрована, всё в порядке.
К вопросу о Lifetime
Самому даже интересно. Никто не мешает мне мучить виртуальные (реальные тоже) железки, вводить правильные и неправильные параметры, как захочу. Сделаем время жизни 60 секунд (возможный минимум), дебаг включён, запускаем инициализацию туннеля по пингу (5 пакетов) и ждём 1 минуту:
... *Aug 16 20:06:56.855: ISAKMP: (1001):processing DELETE_WITH_REASON payload, mess age ID = 62935538, reason: Unknown delete reason! *Aug 16 20:06:56.855: ISAKMP: (1001):peer does not do paranoid keepalives. *Aug 16 20:06:56.855: ISAKMP: (1001):deleting SA reason "IKE SA Lifetime Exceeded" state (I) QM_IDLE (peer 10.10.10.2) ...
Смотрим SA:
R1# show crypto isakmp sa IPv4 Crypto ISAKMP SA dst src state conn-id status IPv6 Crypto ISAKMP SA
Нету туннеля. Вопрос закрыт. Полные конфы R1 и R2.
Crypto Isakmp Keepalive
При вводе в глобальной конфигурации команды crypto isakmp keepalive sec, роутеры начинают обмениваться сообщениями IKE Keepalive. По умолчанию данная функция выключена, sec — время между сообщениями.
Никогда на CISCO такой командой не пользовался. Почему? Потому что в чистом виде IPsec малоинтересен, интересен GRE over IPsec. А там более продвинутая возможность GRE Keepalive (будет ниже).
С GRE Keepalive есть свои нюансы, о них расскажу в следующих частях статей про IPsec. Да, crypto isakmp keepalive используется на S-Terra, об этом говорил в этой статье. Для наших роутеров получится примерно так:
R1(config)# crypto isakmp keepalive 15 R2(config)# crypto isakmp keepalive 15
GRE over IPsec
Вторая часть статьи, в ней мы перенастроим чистый IPsec с помощью GRE. Такой вариант вполне уже можно использовать в продакшене.
Смысл туннеля, пакеты GRE зашифрованы IPsec. Поскольку сам GRE (Generic Routing Encapsulation) передаётся в виде юникастовых пакетов, то его возможно помещать внутрь IPsec (точнее внутрь ESP). Таким образом GRE over IPsec решает проблему как GRE (шифрование), так и IPsec (поддержка мультикаста). Подробнее о GRE и чем он хорош.
Схема подключения та же самая. Роутеры в начальной конфигурации (без IPsec туннелей, всё, что настраивалось в 1 части статьи — этого нет).
Настройка GRE over IPsec
Чтобы всё было понятно, нужно разобрать теорию первой части статьи.
GRE туннель
Сначала настраиваем GRE туннель:
R1(config)# interface tunnel 1 R1(config-if)# ip address 10.10.100.1 255.255.255.252 R1(config-if)# tunnel source GigabitEthernet 0/0 R1(config-if)# tunnel destination 10.10.10.2 R2(config)# interface tunnel 1 R2(config-if)# ip address 10.10.100.2 255.255.255.252 R2(config-if)# tunnel source GigabitEthernet 0/0 R2(config-if)# tunnel destination 10.10.10.1
Делаем маршрут, чтобы трафик в удалённую подсеть заворачивал в туннель:
R1(config)# ip route 192.168.2.0 255.255.255.0 10.10.100.2 R2(config)# ip route 192.168.1.0 255.255.255.0 10.10.100.1
Проверяем работу GRE:
R1# ping 10.10.100.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.10.100.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 2/3/6 ms
NAT в данном случае не мешает работе туннеля, проверяем:
PC1> ping 192.168.2.2 84 bytes from 192.168.2.2 icmp_seq=1 ttl=62 time=9.278 ms ...
Почему это так чуть далее.
Просмотр через WireShark
Если просмотреть пинги со 192.168.1.2 на 192.168.2.2, то видно, что пакет ICMP запакован в пакет GRE, 2 IP заголовка (выделено рамкой): внешний IP заголовок GRE пакета и IP заголовок инкапсулированной нагрузки. Прошу обратить внимание (подчёркнуто), что IP адрес отправителя и получателя для пакета GRE это IP адреса физических интерфейсов GigabitEthernet 0/0 роутеров. Возможно очевидно, но сам по себе это важный факт.
В первом IP заголовке: протокол GRE, IP 47:
Добавляем IPsec
Теперь добавим IPsec:
R1(config)# crypto isakmp policy 3 R1(config-isakmp)# hash sha256 R1(config-isakmp)# authentication pre-share R1(config-isakmp)# group 21 R1(config-isakmp)# lifetime 3600 R1(config-isakmp)# encryption aes 256
Далее PSK:
R1(config)# crypto isakmp key IPsecVPNtunnel address 10.10.10.2
Список управления доступом: отбираем трафик GRE, идущий в туннель:
R1(config)# access-list 101 permit gre host 10.10.10.1 host 10.10.10.2
Как уже подчёркивал выше, IP заголовок GRE использует не IP адреса туннеля с двух сторон, а IP адреса физических интерфейсов двух роутеров. Поэтому такой ACL.
Сокращение накладных расходов
Чем меньше будет служебных заголовков, тем больше места под полезную нагрузку.
| Tunnel Type | Tunnel Header Size |
|---|---|
| GRE without IPsec | 24 bytes |
| DES/3DES IPsec (transport mode) | 18–25 bytes |
| DES/3DES IPsec (tunnel mode) | 38–45 bytes |
| GRE + DES/3DES | 42–49 bytes |
| GRE + AES + SHA-1 | 62–77 bytes |
Тут у нас есть две возможности:
- Зашифровать весь пакет, добавив новый IP заголовок;
- Зашифровать только нагрузку (это у нас GRE и всё, что в него инкапсулировано), оставив IP заголовок от GRE. После шифрования нагрузки в этом заголовке поменяется номер протокола с 47 (GRE) на 50 (ESP).
Только второй вариант используется в продакшене, нет смысла засовывать туннель (он уже есть), в ещё 1 туннель, повышая накладные расходы. Поэтому транспортный режим дефолтного сета то, что нужно. Берём дефолтный сет. Но можно конечно создать и свой сет. Как создать трансформ сет показал выше, тут хочу продемонстрировать возможности дефолтного сета. Теперь мапа:
R1(config)# crypto map R1-R2-MAP 1 IPsec-isakmp R1(config-crypto-map)# match address 101 R1(config-crypto-map)# set peer 10.10.10.2
А где сет? Дело в том, что привязка Transform Set не является обязательной для Crypto Map:
% NOTE: This new crypto map will remain disabled until a peer and a valid access list have been configured.
Достаточно пира и ACL. Как раз не привязывая сет мы даём понять, что хотим использовать дефолтный сет. Если пир или ACL не указан для мапы, то она имеет следующий вид в конфигурации:
crypto map R1-R2-MAP 1 IPsec-isakmp ! Incomplete set peer 10.10.10.2 ! access-list has not been configured yet match address 101
Дополнительные возможности мапы использовать не будем. Вешаем мапу на интерфейс:
R1(config)# interface GigabitEthernet 0/0 R1(config-if)# crypto map R1-R2-MAP
Обработка пакета
Резонный вопрос: а почему интерфейс для мапы GigabitEthernet 0/0, а не Tunnel 1? Во-первых, можно вешать только определённые мапы на туннельный интерфейс:
R2(config)# interface Tunnel1 R2(config-if)# crypto map R1-R2-MAP % NOTE: crypto map is configured on tunnel interface. Currently only GDOI crypto map is supported on tunnel interface.
Во-вторых, потому что Tunnel 1 это логический интерфейс, который занимается упаковкой обычного IP пакета в пакет GRE, а далее пакет GRE пересылается уже через физический интерфейс. Этот интерфейс GigabitEthernet 0/0. Там мы этот пакет мы и ловим мапой.
На логический интерфейс можно повесить для тех же целей IPsec Profile, так делается, допустим, в DMVPN (применение IPsec Profile за рамками этой статьи).
Тут чуть подробнее, так как это важно. Рассмотрим классическую схему с рекурсивным просмотром таблицы маршрутизации. Пакет от 192.168.1.2 к 192.168.2.2 отправляется компьютером PC1 сначала на шлюз по умолчанию 192.168.1.1. Это наш роутер R1. Роутер начинает просматривать таблицу маршрутизации:
R1# show ip route Gateway of last resort is 10.10.10.2 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 10.10.10.2 10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks C 10.10.10.0/30 is directly connected, GigabitEthernet0/0 L 10.10.10.1/32 is directly connected, GigabitEthernet0/0 C 10.10.100.0/30 is directly connected, Tunnel1 L 10.10.100.1/32 is directly connected, Tunnel1 192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks C 192.168.1.0/24 is directly connected, GigabitEthernet0/1 L 192.168.1.1/32 is directly connected, GigabitEthernet0/1 S 192.168.2.0/24 [1/0] via 10.10.100.2
После просмотра таблицы выделенный маршрут будет признан оптимальным для пересылки пакета (1 проход). Далее по таблице маршрутизации роутер будет искать через какой интерфейс отправить пакет для 10.10.100.2 (2 проход) и выберет строку:
C 10.10.100.0/30 is directly connected, Tunnel1
Связанный интерфейс Tunnel 1, пакет будет отправлен на этот интерфейс. Далее будет произведена упаковка нашего пакета в GRE. После будет просмотрена конфигурация туннеля:
R1(config-if)# tunnel source GigabitEthernet 0/0
и отправка пакета уже на GigabitEthernet 0/0. Далее пакет отбирается мапой, так как он удовлетворяет Crypto ACL, шифруется. В IP заголовке, в поле Protocol заменяется протокол с 47 (GRE) на 50 (ESP). Шифрованный пакет выстреливается через GigabitEthernet 0/0.
На самом тут были сделаны некоторые допущения ради наглядности: ничего роутер в таблице маршрутизации искать не будет, да ещё в несколько проходов. Активен и работает CEF, все возможные маршруты просчитаны и роутер сразу знает, что делать с пакетом:
R1# show ip cef .. 192.168.2.0/24 10.10.100.2 Tunnel1 ...
NAT
Как уже говорилось NAT не мешает работе туннеля. Почему так происходит? NAT применяется к пакету во время прохождения им GigabitEthernet 0/0 (до отработки привязанной мапы). Поскольку до прибытия на GigabitEthernet 0/0 пакет инкапсулируется в GRE, где у него меняется IP заголовок и соответственно IP отправителя и IP получателя в заголовке (на 10.10.10.1 и 10.10.10.2 для R1), то ACL 1, привязанный к нату, отбросит пакет. Пакет будет отправлен через GigabitEthernet 0/0 без натирования. Захватывание пакета мапой с помощью ACL 101 и упаковка в ESP происходит позже и уже никак не влияет.
Вывод
Интерфейс IP туннеля (для R1 это 10.10.100.1) нужен только для для инкапсуляции пакета в GRE. На него завязана некоторая маршрутизация, но всё это для выполнения основной задачи — передать пакет для инкапсуляции.
Разрешение трафика IPsec
Берём ACL из первой части:
R1(config)# ip access-list extended firewall_acl R1(config-ext-nacl)# permit udp host 10.10.10.2 host 10.10.10.1 eq isakmp R1(config-ext-nacl)# permit esp host 10.10.10.2 host 10.10.10.1 R1(config-ext-nacl)# permit icmp any host 10.10.10.1 echo R1(config-ext-nacl)# permit icmp any host 10.10.10.1 echo-replay
Разрешение трафика GRE не нужно, так как поверху обёрнут ESP и что там у него внутри неважно. Вешаем на интерфейс:
R1(config)# interface GigabitEthernet 0/0 R1(config-if)# ip access-group firewall_acl in
Проверка GRE over IPsec
Основные настройки и состояния после установления IPsec туннеля рассматривались в первой части. Здесь всё тоже самое. Повторяться нет смысла. Лучше проверим, что GRE действительно запаковывается в ESP:
Все нормально, нагрузка шифрованная.
OSPF
Проверим работоспособность протокола маршрутизации. Для этого создадим интерфейсы Loopback:
R1(config)# interface loopback 0 R1(config-if)# ip address 172.16.10.1 255.255.255.0 R2(config)# interface loopback 0 R2(config-if)# ip address 172.16.20.1 255.255.255.0
Теперь настроим OSPF:
R1(config)# router ospf 1 R1(config-router)# network 172.16.10.0 0.0.0.255 area 0 R1(config-router)# network 10.10.100.0 0.0.0.3 area 0 R2(config)# router ospf 101 R2(config-router)# network 172.16.20.0 0.0.0.255 area 0 R2(config-router)# network 10.10.100.0 0.0.0.3 area 0
Роутеры R1 и R2 сформировали отношения смежности через туннель, мультикаст работает:
*Aug 17 15:11:20.514: %OSPF-5-ADJCHG: Process 1, Nbr 172.16.20.1 on Tunnel1 from LOADING to FULL, Loading Done
Проверим работу маршрутизации:
R1# ping 172.16.20.1 source 172.16.10.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.20.1, timeout is 2 seconds: Packet sent with a source address of 172.16.10.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 5/6/7 ms
Работает, на этом всё. Полные конфы R1 и R2.
GRE Keepalive
Поскольку у нас туннель GRE, мы можем как вариант пользоваться Keepalive именно для GRE (о Crypto Isakmp Keepalive сказано выше). Механизм работы GRE Keepalive рассказан в статье CISCO GRE. Проверяем:
R1(config)# interface tunnel 1 R1(config-if)# keepalive 5 2 R2(config)# interface tunnel 1 R2(config-if)# keepalive 5 2
Ждём 15 секунд, если есть проблемы, то за это время Line Protocol интерфейса Tunnel 1 должен перейти в Down. Смотрим:
R1# show interfaces Tunnel 1 Tunnel1 is up, line protocol is up Hardware is Tunnel Internet address is 10.10.100.1/30 MTU 17916 bytes, BW 100 Kbit/sec, DLY 50000 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation TUNNEL, loopback not set Keepalive set (5 sec), retries 2
Почему так происходит? Да потому что у нас любые пакеты, пересылаемые по туннелю захватываются Crypto ACL 101, шифруются, включая пакеты Keepalive (незашифрованного трафика через туннель нет). Соответственно последние нормально доходят:
Ещё одна интересная особенность, поскольку сразу после загрузки роутера пакеты GRE Keepalive начинают пуляться в туннель GRE, то срабатывает ACL отбора интересного трафика для IPsec. Если в случае чистого IPsec первый пинг между компьютерами пропадал, так как нужно было время на отработку фаз 1 и 2, то в случае GRE over IPsec + GRE Keepalive всё сразу готово к работе после загрузки роутера.
Фрагментация
Известная практика ограничивать MTU до 1400 байт при использовании GRE over IPsec для устранения фрагментации пакетов:
R1(config)# interface Tunnel1 R1(config-if)# ip mtu 1400 R2(config)# interface Tunnel1 R2(config-if)# ip mtu 1400
Кроме это нужно определить максимальный размер сегмента TCP (MSS). Это необходимо сделать, потому что: «TCP требует явного указания максимального размера сегмента (MSS) в случае, если виртуальное соединение осуществляется через сегмент сети, где максимальный размер блока (MTU) менее, чем стандартный MTU Ethernet (1500 байт)». Мы уменьшили MTU до 1400, поэтому MSS = MTU — 40 = 1360 (два заголовка — IP и TCP внутри пакета GRE, каждый заголовок 20 байт, значит чистая максимальная нагрузка TCP это 1360).
R1(config)# interface Tunnel1 R1(config-if)# ip tcp adjust-mss 1360 R2(config)# interface Tunnel1 R2(config-if)# ip tcp adjust-mss 1360
Используйте команду ip tcp adjust-mss для туннельных интерфейсов для того, чтобы маршрутизатор уменьшил значение TCP MSS в пакете TCP SYN
На пути следования пакета в туннеле может попасться роутер, у которого на интерфейсе MTU < 1400. В этом случае, хотя всё настроено правильно, будет фрагментация. Для такого случая нужно чтобы туннель автоматически проверял MTU по всему пути:
R1(config)# interface Tunnel1 R1(config-if)# tunnel path-mtu-discovery R2(config)# interface Tunnel1 R2(config-if)# tunnel path-mtu-discovery
Это общие рекомендации, они могут не подойти для каких-то конкретных случаев. Различные аспекты устранения фрагментации (с примерами) рассказаны тут.
Время на прочтение
2 мин
Количество просмотров 19K
При необходимости использовать защищенные туннели, и при желании сохранять конфигурацию минимальной, существует решение по организации cisco ipsec туннеля без использования crypto map.
Пример конфигурации для одного хоста (на другой стороне будет зеркальная конфигурация). Создание ключа SECRETKEY для удаленной стороны:
crypto isakmp key SECRETKEY address 11.0.0.3
Описание трансформ сета:
crypto ipsec transform-set TS esp-3des esp-sha-hmac comp-lzs
Создание крипто профиля:
crypto ipsec profile A
set transform-set TS
Настройки интерфейсов:
interface Tunnel0
ip address 172.16.0.1 255.255.255.252
tunnel source FastEthernet0/0
tunnel destination 11.0.0.3
tunnel mode ipsec ipv4
tunnel protection ipsec profile A
Интерфейс в сторону провайдера:
interface FastEthernet0/0
ip address 10.0.0.1 255.0.0.0
Проверка сессии:
R1#show crypto session
Crypto session current status
Interface: Tunnel0
Session status: UP-ACTIVE
Peer: 11.0.0.3 port 500
IKE SA: local 10.0.0.1/500 remote 11.0.0.3/500 Active
IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0
Active SAs: 4, origin: crypto map
Надо отметить что crypto map все же создались, но произошло это автоматически, и они не занимают место в конфигурации:
R1#show crypto map
Crypto Map "Tunnel0-head-0" 65536 ipsec-isakmp
Profile name: A
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
TS: { esp-3des esp-sha-hmac } , { comp-lzs } ,
}
Crypto Map "Tunnel0-head-0" 65537 ipsec-isakmp
Map is a PROFILE INSTANCE.
Peer = 11.0.0.3
Extended IP access list
access-list permit ip any any
Current peer: 11.0.0.3
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
TS: { esp-3des esp-sha-hmac } , { comp-lzs } ,
}
Always create SAs
Interfaces using crypto map Tunnel0-head-0:
Tunnel0
Теперь весь траффик между 172.16.0.0/30 идет шифрованный, а все остальное на этом интерфейсе — нет.
Всем спасибо за внимание, жду комментариев.
















