CISCO IPsec часть 2

CISCO IPsec часть 2 — рассматриваем настройку IPsec туннеля с использованием Tunnel IPsec Profiles и IPsec Virtual Tunnel Interface.

Когда мы строим GRE over IPsec туннель, то тут есть две возможности:

  • Использование Crypto Map, старый, классический метод конфигурирования;
  • Tunnel IPsec Profiles, рассматривается как более новый и простой метод.

Эти два метода совместимы между собой. Классический метод был более чем подробно рассмотрен в первой части. Поэтому тут достаточно кратко.


Настройка Tunnel IPsec Profiles

На роутере R1 10.10.10.1 сделаем классическую настройку с Crypto Map, на втором R2 10.10.10.2 IPsec Profile.

Crypto Map
-- ISAKMP Policy--
R1(config)# crypto isakmp policy 10
R1(config-isakmp)# encryption aes 256
R1(config-isakmp)# hash sha256
R1(config-isakmp)# authentication pre-share
R1(config-isakmp)# group 14
R1(config-isakmp)# lifetime 3600
R1(config-isakmp)# exit
-- PSK--
R1(config)# crypto isakmp key cisco123 address 10.10.10.2
--Transform Set--
R1(config)# crypto ipsec transform-set GRE-IPSEC esp-aes 256 esp-sha256-hmac
R1(cfg-crypto-trans)# mode transport
R1(cfg-crypto-trans)# exit
--Crypto ACL--
R1(config)# ip access-list extended GRE-IPSEC-ACL
R1(config-ext-nacl)# permit gre host 10.10.10.1 host 10.10.10.2
R1(config-ext-nacl)# exit
--Crypto Map--
R1(config)# crypto map GRE-IPSEC-CMAP 10 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer and a valid access list have been configured.
R1(config-crypto-map)# match address GRE-IPSEC-ACL
R1(config-crypto-map)# set transform-set GRE-IPSEC
R1(config-crypto-map)# set peer 10.10.10.2
R1(config-crypto-map)# exit
--Interface--
R1(config)# interface GigabitEthernet 0/0
R1(config-if)# crypto map GRE-IPSEC-CMAP 
R1(config-if)# exit
*Aug  8 18:24:36.562: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
--GRE Tunnel--
R1(config)# interface Tunnel1
R1(config-if)# bandwidth 4000
R1(config-if)# ip address 172.16.1.1 255.255.255.252
R1(config-if)# ip mtu 1400
R1(config-if)# tunnel source 10.10.10.1
R1(config-if)# tunnel destination 10.10.10.2
*Aug  8 18:25:53.556: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel1, changed state to up - туннель поднимается после того как указывается destination и проходит проверка, что в таблице маршрутизации есть маршрут до destination.
R1(config-if)# end
IPsec Profile
-- ISAKMP Policy--
R2(config)# crypto isakmp policy 10
R2(config-isakmp)# encryption aes 256
R2(config-isakmp)# hash sha256
R2(config-isakmp)# authentication pre-share
R2(config-isakmp)# group 14
R2(config-isakmp)# lifetime 3600
R2(config-isakmp)# exit
-- PSK--
R2(config)# crypto isakmp key cisco123 address 10.10.10.1
--Transform Set--
R2(config)# crypto ipsec transform-set GRE-IPSEC esp-aes 256 esp-sha256-hmac
R2(cfg-crypto-trans)# mode transport
R2(cfg-crypto-trans)# exit
--IPsec Profiles--
R2(config)# crypto ipsec profile GRE-PROFILE
R2(ipsec-profile)# set transform-set GRE-IPSEC
R2(ipsec-profile)# exit
Можно привязывать несколько сетов, первый сет имеет наивысший приоритет.
--GRE Tunnel--
R2(config)# interface Tunnel1
R2(config-if)# bandwidth 4000
R2(config-if)# ip address 172.16.1.2 255.255.255.252
R2(config-if)# ip mtu 1400
R2(config-if)# tunnel source 10.10.10.2
R2(config-if)# tunnel destination 10.10.10.1
*Aug  8 18:59:01.437: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel1, changed state to up
R2(config-if)# tunnel protection ipsec profile GRE-PROFILE
*Aug  8 18:59:33.980: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R2(config-if)# end

Отличия от метода с Crypto Map:

  • Здесь нет Crypto ACL;
  • В случае Crypto Map, сама мапа висит на внешнем интерфейсе и с помощью Crypto ACL ловит GRE трафик для шифрования. Здесь же профиль висит на тунельном интефейсе и отбирать ничего не надо. Весь трафик через туннель будет шифроваться;
  • В профиле не надо указывать пир, так как он однозначно определяется туннелем.

Именно поэтому такая настройка считается более простой. Действительно, тут команд меньше.

Ещё раз обращу внимание: не указывается tunnel mode, поэтому по умолчанию он всё тот же, GRE/IP. Вся эта настройка, танцы в разрезе GRE over IPsec.

Настройка маршрутизации

Теперь нужно настроить маршрут для удалённых сетей в туннель. Либо статика, либо динамическая маршрутизация (предпочтительнее):

R1(config)# router ospf 1
R1(config-router)# router-id 1.1.1.1
R1(config-router)# auto-cost reference-bandwidth 1000
R1(config-router)# network 172.16.1.0 0.0.0.3 area 0 
R1(config-router)# network 192.168.1.0 0.0.0.255 area 0
*Aug  8 19:27:00.460: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Tunnel1 from LOADING to FULL, Loading Done

Для R2 аналогично.

То есть засунули в OSPF подсеть туннеля (172.16.1.0/30) и локальную подсеть с компами откуда и будет ходить трафик в туннель (для R1 это 192.168.1.0/24). Проверяем таблицу маршрутизации:

R1# show ip route ospf
...
      192.168.2.0/32 is subnetted, 1 subnets
O        192.168.2.1 [110/251] via 172.16.1.2, 00:00:23, Tunnel1

Роутеры узнали через OSPF о локальных подсетях друг-друга.

Проверка

Запускаем пинг из локальной сети R1 в локальную сеть R2.

R1# ping 192.168.2.1 source 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 6/7/8 ms
Tunnel IPsec Profiles

На первый взгляд всё работает. Никакой проблемы из-за того что с одной стороны одна настройка, а с другой другая, мы не не получили. Настроим Kepalive для GRE, сначала для R2:

R2(config)# interface Tunnel1
R2(config-if)# keepalive 5 2

Всё нормально, настроим то же самое на R1. И тут начинаются сложности:

R1#      
*Aug  8 19:44:25.055: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel1, changed state to down
*Aug  8 19:44:25.056: %OSPF-5-ADJCHG: Process 123, Nbr 3.3.3.1 on Tunnel1 from FULL to DOWN, Neighbor Down: Interface down or detached   
*Aug  8 19:45:15.102: %CRYPTO-4-RECVD_PKT_NOT_IPSEC: Rec'd packet not an IPSEC packet. (ip) vrf/dest_addr= /10.10.10.1, src_addr= 10.10.10.2, prot= 47

Со стороны R1 пакет GRE Keepalive отлавливается мапой, шифруется и нормально отсылается. R2 получает пакет, распаковывает, а внутри обратный пакет-ответ. Таков механизм Keepalive. Ответ отсылается без шифрования, R1 этот пакет отбрасывает. В результате туннель падает по таймауту Keepalive. То есть проблему создаёт сторона как раз с IPsec Profile. Убираем GRE Keepalive.

Как это решить? Возможно попробовать включить crypto isakmp keepalive (не пробовал для такой ситуации). Плюс всегда есть вариант настроить SLA с привязанным треком для мониторинга доступности другой стороны туннеля. Такой трафик будет ходить через туннель и значит шифроваться.


IPsec Virtual Tunnel Interface

Ещё более новый метод настройки IPsec туннеля с поддержкой мультикаст трафика. Это IPsec Virtual Tunnel Interface (VTI). Может использоваться в двух вариантах:

  • Static VTIs (SVTIs), для Site2Site VPN;
  • Dynamic VTIs (DVTIs), для удалённых пользователей.

Нас интересует SVTI. Настройка очень похожа на Tunnel IPsec Profiles. Очищаем конфигурацию роутеров:

R1(config)# GigabitEthernet 0/0
R1(config-if)# no crypto map GRE-IPSEC-CMAP
*Aug  9 08:48:17.294: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is OFF
R1(config-if)# exit
R1(config)# no crypto map GRE-IPSEC-CMAP 10
R1(config)# no crypto ipsec transform-set GRE-IPSEC      
R1(config)# no ip access-list extended GRE-IPSEC-ACL

R2(config)# interface Tunnel1
R2(config-if)# no tunnel protection ipsec profile GRE-PROFILE
R2(config-if)# exit
*Aug  9 08:54:50.724: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is OFF
R2(config)# no crypto ipsec profile GRE-PROFILE
R2(config)# no crypto ipsec transform-set GRE-IPSEC

Применяем новые настройки:

--Transform Set--
R1(config)# crypto ipsec transform-set VTI-VPN esp-aes 256 esp-sha256-hmac
R1(cfg-crypto-trans)# mode tunnel

R2(config)# crypto ipsec transform-set VTI-VPN esp-aes 256 esp-sha256-hmac
R2(cfg-crypto-trans)# mode tunnel

--VTI Profile--
R1(config)# crypto ipsec profile VTI-PROFILE
R1(ipsec-profile)# set transform-set VTI-VPN

R2(config)# crypto ipsec profile VTI-PROFILE
R2(ipsec-profile)# set transform-set VTI-VPN

--VTI Tunnel--
R1(config)# interface Tunnel1
R1(config-if)# tunnel mode ipsec ipv4
R1(config-if)# tunnel protection ipsec profile VTI-PROFILE
*Aug  9 09:02:10.914: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON

R2(config)# interface Tunnel1
R2(config-if)# tunnel mode ipsec ipv4
R2(config-if)# tunnel protection ipsec profile VTI-PROFILE
*Aug  9 09:02:17.268: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
  • Туннельный интерфейс конфигурируется командой tunnel mode ipsec ipv4;
  • Здесь другая структура пакета, нет 4-байтного заголовка GRE;
  • Как следствие нет готового IP заголовка, его нужно добавить. Поэтому в Transform Set присутствует mode tunnel. На самом деле эту команду можно не вводить, так как такой режим по умолчанию. Здесь команда нужна чтобы подчеркнуть важность.

Смотрим вывод команд show:

R1# show interfaces tunnel 1
...
  Tunnel protocol/transport IPSEC/IP
...
  Tunnel protection via IPSec (profile "VTI-PROFILE")

А вот это уже интересно:

R1# show crypto session
...
Interface: Tunnel1
Session status: UP-ACTIVE     
Peer: 10.10.10.2 port 500 
  Session ID: 0  
  IKEv1 SA: local 10.10.10.1/500 remote 10.10.10.2/500 Active 
  IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0 
        Active SAs: 2, origin: crypto map

R1# show crypto ipsec sa

...
   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 10.10.10.2 port 500

Как будто у нас есть крипто мапа и Crypto ACL.

R1# show crypto ipsec sa | include encrypt|decrypt
    #pkts encaps: 72, #pkts encrypt: 72, #pkts digest: 72
    #pkts decaps: 71, #pkts decrypt: 71, #pkts verify: 71

Пакеты бегают, всё в порядке.

Leave a Comment

Scroll to Top