Настройка Point-to-Point GRE VPN туннеля на оборудовании Cisco

Generic Routing Encapsulation ( GRE ) — это протокол туннелирования, разработанный Cisco, который позволяет инкапсулировать широкий спектр протоколов сетевого уровня внутри соединений точка-точка.

GRE туннель используется , когда пакеты должны быть отправлены из одной сети в другую через Интернет или незащищенную сеть. При использовании GRE между двумя конечными точками (маршрутизаторами Cisco) создается виртуальный туннель, и пакеты отправляются через туннель GRE.

Важно отметить, что пакеты, проходящие внутри туннеля GRE, не шифруются, поскольку GRE не шифрует туннель, а инкапсулирует его с заголовком GRE. Если требуется защита данных, IPSec должен быть настроен для обеспечения конфиденциальности данных — это когда туннель GRE преобразуется в безопасный туннель VPN GRE.

На схеме ниже показана процедура инкапсуляции простого незащищенного пакета GRE, когда он проходит через маршрутизатор и входит в туннельный интерфейс:

Хотя многие могут подумать, что туннель GRE IPSec между двумя маршрутизаторами похож на межсайтовое IPSec VPN (шифрование), это не так. Основное отличие состоит в том, что туннели GRE позволяют групповым пакетам проходить через туннель, тогда как IPSec VPN не поддерживает многоадресные пакеты. В больших сетях, где необходимы протоколы маршрутизации, такие как OSPF, EIGRP, лучше всего подойдут туннели GRE. По этой причине, плюс тот факт, что туннели GRE намного проще настроить, инженеры предпочитают использовать GRE, а не IPSec VPN.

В этой статье объясняется, как создавать простые (незащищенные) и безопасные (зашифрованные IPSec) туннели GRE между конечными точками, будут рассмотрены все необходимые шаги для создания и проверки туннеля GRE (незащищенного и защищенного) и настройки маршрутизации между двумя сетями.

СОЗДАНИЕ ТУННЕЛЯ CISCO GRE

Туннель GRE использует «туннельный» интерфейс — логический интерфейс, настроенный на маршрутизаторе с IP-адресом, в котором пакеты инкапсулируются и декапсулируются при входе в туннель GRE или выходе из него.

Первый шаг — создать наш туннельный интерфейс на R1:

R1(config)# interface Tunnel0
R1(config-if)# ip address 172.16.0.1 255.255.255.0
R1(config-if)# ip mtu 1400
R1(config-if)# ip tcp adjust-mss 1360
R1(config-if)# tunnel source 1.1.1.10
R1(config-if)# tunnel destination 2.2.2.10

Все туннельные интерфейсы участвующих маршрутизаторов всегда должны быть настроены с IP-адресом, который больше нигде в сети не используется. Каждому туннельному интерфейсу назначается IP-адрес в той же сети, что и другим туннельным интерфейсам.

В нашем примере оба туннельных интерфейса являются частью сети 172.16.0.0/24 .

Поскольку GRE является протоколом инкапсуляции, мы устанавливаем максимальную единицу передачи (mtu) на 1400 байтов и максимальный размер сегмента (mss) на 1360 байтов. Поскольку большинство транспортных MTU составляют 1500 байтов, и у нас есть дополнительные накладные расходы из-за GRE, мы должны уменьшить MTU, чтобы учесть дополнительные накладные расходы. Установка 1400 является обычной практикой и гарантирует сведение к минимуму ненужной фрагментации пакетов.

В заключение мы определяем источник туннеля, который является общедоступным IP-адресом R1, и пункт назначения — общедоступный IP-адрес R2.

Как только мы завершим настройку R1, маршрутизатор подтвердит создание туннеля и сообщит о его статусе:

R1#
*May 4 21:30:22.971: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up

Поскольку интерфейс туннеля 0 является логическим, он останется активным, даже если на другом конце не будет настроен или подключен туннель GRE.

Затем мы должны создать интерфейс Tunnel 0 на R2:

R2(config)# interface Tunnel0
R2(config-if)# ip address 172.16.0.2 255.255.255.0
R2(config-if)# ip mtu 1400
R2(config-if)# ip tcp adjust-mss 1360
R2(config-if)# tunnel source 2.2.2.10
R2(config-if)# tunnel destination 1.1.1.10

Интерфейс туннеля R2 настроен с использованием соответствующего IP-адреса источника и назначения туннеля. Как и в случае с R1, маршрутизатор R2 сообщит нам, что интерфейс Tunnel0 включен :

R2#
*May 4 21:32:54.927: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up

МАРШРУТИЗАЦИЯ СЕТЕЙ ЧЕРЕЗ ТУННЕЛЬ GRE

На этом этапе обе конечные точки туннеля готовы и могут «видеть» друг друга. Эхо icmp с одного конца подтвердит это:

R1# ping 172.16.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R1#

Опять же, этот результат означает, что две конечные точки туннеля могут видеть друг друга. Рабочие станции в любой сети по-прежнему не смогут подключиться к другой стороне, если статический маршрут не будет размещен на каждой конечной точке:
R1(config)# ip route 192.168.2.0 255.255.255.0 172.16.0.2

На R1 мы добавляем статический маршрут к удаленной сети 192.168.2.0/24 через 172.16.0.2, который является другим концом нашего туннеля GRE. Когда R1 получает пакет для сети 192.168.2.0, он теперь знает, что следующим переходом является 172.16.0.2, и поэтому отправит его через туннель.

Эту же конфигурацию необходимо повторить для R2:

R2(config)# ip route 192.168.1.0 255.255.255.0 172.16.0.1

Теперь обе сети могут свободно связываться с каждой через туннель GRE. 

ЗАЩИТА ТУННЕЛЯ GRE С ПОМОЩЬЮ IPSEC

Как упоминалось ранее, GRE — это протокол инкапсуляции, который не выполняет никакого шифрования. Создание двухточечного GRE-туннеля без какого-либо шифрования чрезвычайно рискованно, поскольку конфиденциальные данные могут быть легко извлечены из туннеля и просмотрены другими.

Для этого мы используем IPSec, чтобы добавить уровень шифрования и защитить туннель GRE. Это дает нам необходимое шифрование военного уровня и душевное спокойствие. В нашем примере ниже рассматривается режим туннеля GRE IPSec.

НАСТРОЙКА ШИФРОВАНИЯ IPSEC ДЛЯ ТУННЕЛЯ GRE (GRE OVER IPSEC)

Шифрование IPSec включает два шага для каждого маршрутизатора. Вот эти шаги:

(1) Настройте ISAKMP (ISAKMP Phase1)
(2) Настройте IPSec (ISAKMP Phase 2)

 

НАСТРОИТЬ ISAKMP (IKE) — (ISAKMP PHASE 1)

IKE существует только для установления SA (Security Association) для IPsec. Прежде чем это сможет сделать, IKE должен согласовать отношения SA (ISAKMP SA) с одноранговым узлом.

Для начала приступим к работе над R1.

Первый шаг — настроить политику ISAKMP Phase 1:

R1(config)# crypto isakmp policy 1
R1(config-isakmp)# encr 3des
R1(config-isakmp)# hash md5
R1(config-isakmp)# authentication pre-share
R1(config-isakmp)# group 2
R1(config-isakmp)# lifetime 86400

Приведенные выше команды определяют следующее (в указанном порядке):

3DES — метод шифрования, который будет использоваться на этапе 1.
MD5 — алгоритм хеширования
Pre-share — использовать предварительный общий ключ в качестве метода аутентификации
Group 2 — будет использоваться группа Диффи-Хеллмана

86400 — Время жизни сеансового ключа. Выражается в килобайтах (после x-объема трафика измените ключ) или в секундах. Набор значений — это значение по умолчанию.

Далее мы собираемся определить предварительный общий ключ для аутентификации с узлом R1, 2.2.2.10:

R1(config)# crypto isakmp key firewallcx address 2.2.2.10

Предварительно общий ключ однорангового узла установлен на firewallcx . Этот ключ будет использоваться для всех переговоров ISAKMP с партнером 2.2.2.10 (R2).

СОЗДАНИЕ ПРЕОБРАЗОВАНИЯ IPSEC (ПОЛИТИКА ISAKMP PHASE 2)

Теперь нам нужно создать набор преобразований, используемый для защиты наших данных. Мы назвали этот TS :

R1(config)# crypto ipsec transform-set TS esp-3des esp-md5-hmac
R1(cfg-crypto-trans)# mode transport
Приведенные выше команды определяют следующее:
— ESP-3DES — Метод шифрования
— MD5 — Алгоритм хеширования
— Установите IPSec в транспортный режим

Наконец, мы создаем профиль IPSec для соединения ранее определенной конфигурации ISAKMP и IPSec. Мы назвали наш профиль IPSec protect-gre :

R1(config)# crypto ipsec profile protect-gre
R1(ipsec-profile)# set security-association lifetime seconds 86400
R1(ipsec-profile)# set transform-set TS

Мы готовы применить шифрование IPSec к туннельному интерфейсу:

R1(config)# interface Tunnel 0
R1(config-if)# tunnel protection ipsec profile protect-gre

Пришло время применить ту же конфигурацию на R2:

R2(config)# crypto isakmp policy 1
R2(config-isakmp)# encr 3des
R2(config-isakmp)# hash md5
R2(config-isakmp)# authentication pre-share
R2(config-isakmp)# group 2
R2(config-isakmp)# lifetime 86400
 
R2(config)# crypto isakmp key firewallcx address 1.1.1.10
R2(config)# crypto ipsec transform-set TS esp-3des esp-md5-hmac
R2(cfg-crypto-trans)# mode transport
R2(config)# crypto ipsec profile protect-gre
R2(ipsec-profile)# set security-association lifetime seconds 86400
R2(ipsec-profile)# set transform-set TS
R2(config)# interface Tunnel 0
R2(config-if)# tunnel protection ipsec profile protect-gre

ПРОВЕРКА GRE ЧЕРЕЗ ТУННЕЛЬ IPSEC

Наконец, наш туннель был зашифрован с помощью IPSec, что обеспечило нам столь необходимый уровень безопасности. Чтобы протестировать и проверить это, все, что требуется, — это выполнить эхо-запрос на другом конце и заставить туннель VPN IPSec подойти и начать шифрование / дешифрование наших данных:

R1# ping 192.168.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms

Используя команду show crypto session , мы можем быстро проверить, что шифрование установлено и выполняет свою работу:

R1# show crypto session
Crypto session current status
Interface: Tunnel0
Session status: UP-ACTIVE
Peer: 2.2.2.10 port 500
IKE SA: local 1.1.1.10/500 remote 2.2.2.10/500 Active
IPSEC FLOW: permit 47 host 1.1.1.10 host 2.2.2.10
Active SAs: 2, origin: crypto map

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