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 трафик для шифрования. Здесь же профиль висит на тунельном интефейсе и отбирать ничего не надо. Весь трафик через туннель будет шифроваться;
  • В профиле не надо указывать пир, так как он однозначно определяется туннелем.

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

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

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

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 пакет Keepalive отлавливается мапой, шифруется и нормально отсылается. R2 получает пакет, распаковывает, а внутри обратный пакет-ответ. Таков механизм Keepalive. Ответ отсылается без шифрования, R1 этот пакет отбрасывает. В результате туннель падает по таймауту Keepalive. То есть проблему создаёт сторона как раз с IPsec Profile. Убираем 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
  • Нет 4-байтного заголовка GRE. Поэтому в Transform Set присутствует mode tunnel. На самом деле эту команду можно не вводить, так как это режим по умолчанию. Здесь команда нужна чтобы подчеркнуть важность;
  • Туннельный интерфейс конфигурируется командой tunnel mode ipsec ipv4

Смотрим вывод команд 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

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

Добавить комментарий