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

На первый взгляд всё работает. Никакой проблемы из-за того что с одной стороны одна настройка, а с другой другая, мы не не получили. Настроим 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
Пакеты бегают, всё в порядке.