Site-to-Site VPN: GRE + IPsec + OSPF

Решил рассказать о довольно элегантном решении vpn’а между удалёнными офисами: гнать динамическую маршрутизацию внутри Ipsec туннеля. Более сложная первоначальная настройка (по сравнению с обычным Ipsec Site-to-Site VPN) окупается тем, что тебе после не придётся пушить маршруты на обоих концах VPN’а. Естественно, в случае 2х-3х удалённых офисов это сомнительное преимущество, но когда речь заходит о 10+ филиалах, то это начинает существенно экономить время. Это из очевидных преимуществ, к не очевидным отнесу то, что цепочка gre-ipsec-ospf собирается нами вручную, а следовательно, при косяках в конфигурации, нам проще будет локализировать проблему “послойно” отсекая протоколы.

И так вот наше дано, на схеме:

Всё будем делать согласно плану gre, ospf, ipsec. Так же в конце рассмотрим как работают Route Map в OSPF (тоже очень полезная и гибкая штука).

1. GRE.

Сделаем простой GRE туннель и проверим его работоспособность

R1:
interface GigabitEthernet0
ip address 1.1.1.1 255.255.255.240

interface Tunnel0
ip address 10.10.10.1 255.255.255.252
tunnel source GigabitEthernet0
tunnel destination 2.2.2.1

R2:
interface GigabitEthernet0
ip address 2.2.2.1 255.255.255.240

interface Tunnel0
ip address 10.10.10.2 255.255.255.252
tunnel source GigabitEthernet0
tunnel destination 1.1.1.1

Для туннеля мы выделили подсеть 10.10.10.1/30, этого как раз достаточно, что бы в этой сети были только “два конца” туннеля и всё.

Итогом должен быть беспрепятственный пинг 10.10.10.2 c R1 и 10.10.10.1 R2.

2. OSPF.

R1:

router ospf 1
router-id 192.168.50.100
#Должен быть уникальным среди всех маршрутизаторов.

network 192.168.50.0 0.0.0.255 area 0
#Подсеть, которую мы хотим передавать и область в которую мы будем передавать информацию о ней. Например сеть, которая объявлена в области 11 будет “получена” роутерами работающими в области 11 и больше никем.

interface Tunnel0
ip ospf 1 area 0

R2:

router ospf 1
router-id 192.168.200.1
network 192.168.200.0 0.0.0.255 area 0

interface Tunnel0
ip ospf 1 area 0

Итогом верной конфигурации будет появление соответствующих сетей в таблице маршрутов роутеров и, естественно, возможность доступа к ресурсам в удалённых подсетях.

Пример sh ip route на R1:

Gateway of last resort is 1.1.1.2 to network 0.0.0.0

S* 0.0.0.0/0 [10/0] via 1.1.1.2
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.10.10.0/30 is directly connected, Tunnel0
L 10.10.10.1/32 is directly connected, Tunnel0
S 192.168.10.0/24 [1/0] via 192.168.50.254
S 192.168.20.0/24 [1/0] via 192.168.50.254
192.168.50.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.50.0/24 is directly connected, Vlan1
L 192.168.50.100/32 is directly connected, Vlan1
O 192.168.200.0/24 [110/1001] via 10.10.10.2, 16:01:44, Tunnel0

Как вы видите сеть есть в таблице маршрутов, а указатель О говорит нам, что сеть получена через OSPF.

И так у нас всё работает. Можем почти что запускать маленькую сеть нашего филиала в работу, если вы не боитесь утечки информации, поскольку туннель не зашифрован и трафик ходит по нему в открытом виде.

3. IPsec.

Настроим ключ по которому будет шифроваться трафик. В ключе надо будет так же указать IP удалённого маршрутизатора:

R1:

crypto keyring KR_VPN
pre-shared-key address 2.2.2.1 key Pa$$w0rd

Теперь настроем isakmp (первая фаза IPsec) профиль. В нём надо будет указать ключ по которому проходить шифрование и IP удалённого маршрутизатора:

R1:

crypto isakmp profile ISA_P_VPN
keyring KR_VPN
match identity address 2.2.2.1 255.255.255.255

Дальше настроим политику isakmp, а так же набор преобразований в шифровании:

R1:

crypto isakmp policy 1
encr aes 256
authentication pre-share
group 5

crypto ipsec transform-set TS_T_AES256_SHA esp-aes 256 esp-sha-hmac
mode tunnel

Теперь создадим IPsec профиль (то что нам непосредственно необходимо). В нём нужно указать набор преобразований и isakmp профиль.

R1:

crypto ipsec profile IPSEC_P_VPN
set transform-set TS_T_AES256_SHA
set isakmp-profile ISA_P_VPN

А теперь применем IPsec профиль на наш GRE туннель.

R1:

interface Tunnel0
tunnel mode ipsec ipv4
tunnel protection ipsec profile IPSEC_P_VPN

Вот такая получилась матрёшечка: Для туннеля нужен IPsec профиль, для IPsec профиля нужен набор преобразований и isakmp профиль, для isakmp профиля нужна рабочая политика и keyring.

Если всё верно сделано, то VPN, заработавший в прошлом пункте не должен отвалиться, а sh crypto isakmp sa должно показывать строчки такого вида:

dst src state conn-id status
2.2.2.1 1.1.1.1 QM_IDLE 2016 ACTIVE

Тоже самое для R2:

R2:

crypto keyring KR_VPN
pre-shared-key address 1.1.1.1 key Pa$$w0rd

crypto isakmp profile ISA_P_VPN
keyring KR_VPN
match identity address 1.1.1.1 255.255.255.255

crypto isakmp policy 1
encr aes 256
authentication pre-share
group 5

crypto ipsec transform-set TS_T_AES256_SHA esp-aes 256 esp-sha-hmac
mode tunnel

crypto ipsec profile IPSEC_P_VPN
set transform-set TS_T_AES256_SHA
set isakmp-profile ISA_P_VPN

interface Tunnel0
tunnel mode ipsec ipv4
tunnel protection ipsec profile IPSEC_P_VPN

4. Route Map.

ОК. Всё работает, но есть одно НО. Так беспрепятственно OSPF может отдавать маршруты к сетям, только если эти сети подключены непосредственно к маршрутизатору. А что если они полученным динамически или статически прописаны (такие сети есть в выгрузке таблицы маршрутов в пункте 2). У OSPF есть несколько хороших команд. Всё разберём на примере статики, остальное делается аналогично:

router ospf 1
redistribute static subnets

В таком режиме удалённый маршрутизатор получит информацию о ВСЕХ статических подсетях нашего роутера. А что делать, если нам надо «рассказать» только о одной. На выручку придут Route Map. Это довольно гибкий инструмент, который даёт множество вариантов решения проблемы, я приведу тот, который проще и это решение далеко не единственное:

router ospf 1
redistribute static subnets route-map ospf-vpn

route-map ospf-vpn permit 10
match tag 2

ip route 192.168.20.0 255.255.255.0 192.168.50.254 tag 2

С низу вверх: Я навесил на статический маршрут до сети 192.168.20.0/24 тэг 2. Он не влияет не на что в плане маршрутизации, просто маркирует этот маршрут для внутреннего использования с привязкой по этой отметке; Создал роут-мэп в которой идёт проверка на совпадение по tag 2; Прислюнил эту карту к OSPF.

Теперь удалённый роутер получит маршрут только до сети 192.168.20.0/24.

write.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *