Поиск...

вторник, 30 октября 2012 г.

Настройка DMVPN на оборудовании cisco

Доброго времени суток!!!

Прошу прощения за увеличение времени между появлением новых постов. Времени на написание материала стало совсем немного, но, все-таки, оно есть :).
Иногда, с расширением компании и открытием удаленных филиалов, возникает потребность настройки сетевой доступности между ними. Причем, с использованием IPSec VPN-ов, для защиты передаваемой информации. Настройка туннеля IPSec весьма объемна сама по себе, это раз. Во-вторых, туннель необходимо настроить на каждом устройстве. В-третьих, для обеспечения отказоустойчивости и полносвязной (full mesh) топологии, туннели настраиваются для каждого «соседа» по отдельности. В-четвертых, добавление нового офиса (устройства) в топологию, влечет за собой полный повтор настроек. Итог – огромный кусок работы, трата времени и, если пропустишь что-нибудь, трудность найти концы.
Вот тут то и приходит на помощь технология DMVPN, призванная упростить нам работу :). Кто хочет посмотреть каким образом, добро пожаловать под кат…

Как обычно, теорию я оставляю на самостоятельную проработку и сразу перехожу к практике (но вносить пояснения, как обычно, буду).
Схема сети, которую мы будем настраивать, выглядит следующим образом:


Итак, небольшая легенда :). Имеется центральный офис Main_office с внутренней сетью 192.168.1.0/24. Также, после расширения компании, имеются филиалы Branch_office_1 и Branch_office_2 с внутренними сетями 192.168.2.0/24 и 192.168.3.0/24 соответственно. Каждый офис имеет подключение к интернету через свою подсеть (см. на рисунке).
Необходимо организовать соединение между центральным офисом и филиалами и между самими филиалами с использованием IPSec VPN, причем таким образом, чтобы VPN – туннели поднимались в автоматическом режиме «по требованию». Для организации VPN – туннелей необходимо использовать сертификаты, а не Pre-shared аутентификацию.
Центр сертификации находится в интернете (допустим, мы будем использовать сторонний центр сертификации). В качестве сервера сертификатов выступает станция CA-Server (50.50.50.50) с windows 2003.
Для проверок используются соответствующие станции в каждой из сетей офисов (PC1 (192.168.1.10), PC2 (192.168.2.10) и PC3 (192.168.3.10)).
Для обмена маршрутной информацией между офисами будем использовать протокол динамической маршрутизации OSPF.
Как же это все реализовать, да еще и через открытую сеть интернет? Ответ прост, необходимо построить виртуальную сеть с возможностью создания динамических VPN туннелей. Это и есть технология DMVPN. Принцип ее прост, есть некий роутер, выступающий в роли коммутатора, который при обращении к нему, предоставляет информацию и параметры для установления туннелей (это общее понятие, как я понимаю эту технологию :)).
DMVPN, в свою очередь, включает в себя еще несколько технологий. А именно: mGRE (multipoint GRE), NHRP (Next Hop Resolution Protocol), протоколы динамической маршрутизации и так называемые профили IPSec. Все это нам необходимо будет настроить. Вполне возможно я могу повторяться и пересекаться с другими статьями по этому вопросу, но я просто постарался собрать информацию в одном месте и реализовать это дело в GNS3 для практических навыков.
Итак, приступаем. Как всегда, для начала организуем сетевую доступность. Начнем с роутера Main_Router:

R1#conf t
R1(config)#hostname Main_Router – указываем имя роутера;
Main_Router(config)#int fa 0/0
Main_Router(config-if)#ip address 10.10.3.2 255.255.255.252 – назначаем IP-адрес на интерфейс;
Main_Router(config-if)#ip nat outside – указываем, что этот интерфейс будет outside для NAT;
Main_Router(config-if)#no shutdown – включаем интерфейс;
Main_Router(config-if)#exit
Main_Router(config)#int fa 1/0
Main_Router(config-if)#ip address 192.168.1.1 255.255.255.0
Main_Router(config-if)#ip nat inside – указываем, что этот интерфейс будет inside для NAT;
Main_Router(config-if)#no shutdown
Main_Router(config-if)#exit
Main_Router(config)#ip access-list extended FOR_NAT – создаем список доступа для NAT;
Main_Router(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 any – указываем какие сети будут «натироваться»;
Main_Router(config-ext-nacl)#exit
Main_Router(config)#ip nat inside source list FOR_NAT interface fa 0/0 overload – включаем NAT;
Main_Router(config)#ip route 0.0.0.0 0.0.0.0 10.10.3.1 – прописываем маршрут по умолчанию;
Main_Router(config)#exit
Main_Router#wr


NAT мы настроили для приближения к реальным условиям. Теперь сделаем идентичные настройки на Branch – роутерах.
Роутер Branch_1:

R3#conf t
R3(config)#hostname Branch_1
Branch_1(config)#int fa 0/0
Branch_1(config-if)#ip address 10.10.1.2 255.255.255.252
Branch_1(config-if)#ip nat outside
Branch_1(config-if)#no shutdown
Branch_1(config-if)#exit
Branch_1(config)#int fa 1/0
Branch_1(config-if)#ip address 192.168.2.1 255.255.255.0
Branch_1(config-if)#ip nat inside
Branch_1(config-if)#no shutdown
Branch_1(config-if)#exit
Branch_1(config)#ip access-list extended FOR_NAT
Branch_1(config-ext-nacl)#permit ip 192.168.2.0 0.0.0.255 any
Branch_1(config-ext-nacl)#exit
Branch_1(config)#ip nat inside source list FOR_NAT interface fa 0/0 overload
Branch_1(config)#ip route 0.0.0.0 0.0.0.0 10.10.1.1
Branch_1(config)#exit
Branch_1#wr


Роутер Branch_2:

R4#conf t
R4(config)#hostname Branch_2
Branch_2(config)#int fa 0/0
Branch_2(config-if)#ip address 10.10.2.2 255.255.255.252
Branch_2(config-if)#ip nat outside
Branch_2(config-if)#no shutdown
Branch_2(config-if)#exit
Branch_2(config)#int fa 1/0
Branch_2(config-if)#ip address 192.168.3.1 255.255.255.0
Branch_2(config-if)#ip nat inside
Branch_2(config-if)#no shutdown
Branch_2(config-if)#exit
Branch_2(config)#ip access-list extended FOR_NAT
Branch_2(config-ext-nacl)#permit ip 192.168.3.0 0.0.0.255 any
Branch_2(config-ext-nacl)#exit
Branch_2(config)#ip nat inside source list FOR_NAT interface fa 0/0 overload
Branch_2(config)#ip route 0.0.0.0 0.0.0.0 10.10.2.1
Branch_2(config)#exit
Branch_2#wr


Теперь переходим на Inet_Router, имитирующий интернет:

R2#conf t
R2(config)#hostname Inet_Router
Inet_Router(config)#int fa 0/0
Inet_Router(config-if)#ip address 10.10.1.1 255.255.255.252
Inet_Router(config-if)#no shutdown
Inet_Router(config-if)#exit
Inet_Router(config)#int fa 1/0
Inet_Router(config-if)#ip address 10.10.2.1 255.255.255.252
Inet_Router(config-if)#no shutdown
Inet_Router(config-if)#exit
Inet_Router(config)#int fa 2/0
Inet_Router(config-if)#ip address 10.10.3.1 255.255.255.252
Inet_Router(config-if)#no shutdown
Inet_Router(config-if)#exit
Inet_Router(config)#int fa 3/0
Inet_Router(config-if)#ip address 50.50.50.1 255.255.255.0
Inet_Router(config-if)#no shutdown
Inet_Router(config-if)#exit
Inet_Router(config)#exit
Inet_Router#wr


Остановимся и проверим сетевую доступность. Например, с Main_Router-а:


    где:
  • 1 – IP-адрес Inet_Router;
  • 2 – IP-адрес внешнего интерфейса роутера Branch_1;
  • 3 – IP-адрес внешнего интерфейса роутера Branch_2;
  • 4 – IP-адрес сервера сертификатов (CA-Server).
Проверим с CA-Server-а доступность роутеров:


    где:
  • 1 – IP-адрес внешнего интерфейса роутера Branch_1;
  • 2 – IP-адрес внешнего интерфейса роутера Branch_2;
  • 3 – IP-адрес внешнего интерфейса роутера Main_Router.
Как видно, сетевая доступность присутствует. Двигаемся дальше и настроим GRE туннели, а точнее технологию mGRE и протокол NHRP (Next Hop Resolution Protocol). В качестве hub-роутера будет выступать Main_Router. Переходим на него и делаем следующие настройки:

Main_Router#conf t
Main_Router(config)#int tunnel 1 – создаем туннельный интерфейс;
Main_Router(config-if)#ip address 172.16.0.1 255.255.255.0 – назначаем ему IP-адрес;
Main_Router(config-if)#ip mtu 1416 – уменьшаем значение MTU (связано с добавлением GRE своих заголовков в пакеты);
Main_Router(config-if)#tunnel source fastEthernet 0/0 – указываем, что «началом» туннеля будет внешний физический интерфейс роутера;
Main_Router(config-if)#tunnel mode gre multipoint – включаем туннель и указываем режим работы «multipoint»;
Main_Router(config-if)#ip nhrp map multicast dynamic – указываем, чтобы hub-роутер автоматически сопоставлял IP-адреса туннельных и физических интерфейсов Branch роутеров;
Main_Router(config-if)#ip nhrp network-id 1 – задаем идентификационный номер сети, в которой будет работать NHRP (д.б. одинаковым на всех роутерах);
Main_Router(config-if)#ip nhrp authentication pass – включаем аутентификацию в протоколе NHRP, теперь не знающий этого пароля не сможет участвовать в процессе;
Main_Router(config-if)#exit
Main_Router(config)#exit
Main_Router#wr


На Branch роутерах делаем точно такие же настройки, только со своими IP-адресами и немного другой настройкой NHRP.
Роутер Branch_1:

Branch_1#conf t
Branch_1(config)#interface tunnel 1
Branch_1(config-if)#ip address 172.16.0.2 255.255.255.0
Branch_1(config-if)#ip mtu 1416
Branch_1(config-if)#tunnel source fastEthernet 0/0
Branch_1(config-if)#tunnel mode gre multipoint
Branch_1(config-if)#ip nhrp nhs 172.16.0.1 – указываем IP-адрес туннельного интерфейса hub-роутера, который будет выступать в роли next hop server-а;
Branch_1(config-if)#ip nhrp map 172.16.0.1 10.10.3.2 – прописываем статическое соответствие IP-адресов туннельного и физического интерфейсов hub-роутера;
Branch_1(config-if)#ip nhrp map multicast 10.10.3.2 – указываем, что получателем multicast трафика является IP-адрес на физическом интерфейсе hub-роутера;
Branch_1(config-if)#ip nhrp network-id 1
Branch_1(config-if)#ip nhrp authentication pass
Branch_1(config-if)#ip nhrp registration no-unique – этот параметр опционален и используется для того, чтобы при смене внешнего IP-адреса branch-роутера этот адрес автоматически записался в базе соответствия hub-роутера;
Branch_1(config-if)#exit
Branch_1(config)#exit
Branch_1#wr


Роутер Branch_2:

Branch_2#conf t
Branch_2(config)#interface tunnel 1
Branch_2(config-if)#ip address 172.16.0.3 255.255.255.0
Branch_2(config-if)#ip mtu 1416
Branch_2(config-if)#tunnel source fastEthernet 0/0
Branch_2(config-if)#tunnel mode gre multipoint
Branch_2(config-if)#ip nhrp nhs 172.16.0.1
Branch_2(config-if)#ip nhrp map 172.16.0.1 10.10.3.2
Branch_2(config-if)#ip nhrp map multicast 10.10.3.2
Branch_2(config-if)#ip nhrp network-id 1
Branch_2(config-if)#ip nhrp authentication pass
Branch_2(config-if)#ip nhrp registration no-unique
Branch_2(config-if)#exit
Branch_2(config)#exit
Branch_2#wr


Сделаем проверки того, что мы имеем на данный момент. Посмотрим на роутере Branch_2:


    где:
  • 1 – успешный ping на туннельный интерфейс Main_Router-а;
  • 2 – успешный ping на туннельный интерфейс роутера Branch_1;
  • 3 – показан правильный IP-адрес nhs (next hop server);
  • 4 – показаны установленные туннели (на hub-роутер он статический, на роутер Branch_1 – динамически созданный);
  • 5 – общая информация по NHRP.
Теперь посмотрим, что есть на Main_Router:


    где:
  • 1 – успешный ping на Branch-роутеры;
  • 2 – динамически созданные два туннеля;
Можно сделать вывод, что mGRE и NHRP работают. Двигаемся дальше и настроим протокол динамической маршрутизации OSPF, для обмена внутренними сетями между центральным офисом и филиалами. В нашем случае mGRE интерфейсы образуют NBMA сеть, так что данный аспект следует учитывать при настройке (как настраивать OSPF в NBMA сетях, можно посмотреть тут). Сеть 172.16.0.0/24 будет входить в area 0, а локальные сети в Area 1, Area 2, Area 3 соответственно. DR-ом будет выступать Main_Router.
Начнем с Main_Router:

Main_Router#conf t
Main_Router(config)#router ospf 1 – включаем процесс OSPF;
Main_Router(config-router)#network 172.16.0.0 0.0.0.255 area 0 – добавляем нужные сети в соответствующие зоны (Area);
Main_Router(config-router)#network 192.168.1.0 0.0.0.255 area 1
Main_Router(config-router)#exit
Main_Router(config)#interface tunnel 1
Main_Router(config-if)#ip ospf priority 10 – повышаем приоритет, чтобы данный роутер стал DR-ом;
Main_Router(config-if)#ip ospf network broadcast
Main_Router(config-if)#ip ospf hello-interval 30
Main_Router(config-if)#exit
Main_Router(config)#exit
Main_Router#wr


Роутер Branch_1:

Branch_1#conf t
Branch_1(config)#router ospf 1
Branch_1(config-router)#network 172.16.0.0 0.0.0.255 area 0
Branch_1(config-router)#network 192.168.2.0 0.0.0.255 area 2
Branch_1(config-router)#exit
Branch_1(config)#int tunnel 1
Branch_1(config-if)#ip ospf priority 0 – выключаем участие роутера в выборах DR;
Branch_1(config-if)#ip ospf network broadcast
Branch_1(config-if)#ip ospf hello-interval 30
Branch_1(config-if)#exit
Branch_1(config)#exit
Branch_1#wr


Роутер Branch_2:

Branch_2#conf t
Branch_2(config)#router ospf 1
Branch_2(config-router)#network 172.16.0.0 0.0.0.255 area 0
Branch_2(config-router)#network 192.168.3.0 0.0.0.255 area 3
Branch_2(config-router)#exit
Branch_2(config)#int tunnel 1
Branch_2(config-if)#ip ospf priority 0
Branch_2(config-if)#ip ospf network broadcast
Branch_2(config-if)#ip ospf hello-interval 30
Branch_2(config-if)#exit
Branch_2(config)#exit
Branch_2#


Остановимся и посмотрим, что у нас получилось. Посмотрим наличие маршрутов на роутере Branch_2 и (уже можно) проверим сетевую доступность конечных хостов (PC1, PC2, PC3).
Роутер Branch_2:


Нужные маршруты присутствуют в таблице маршрутизации и получены они через туннельные интерфейсы.
Теперь проверим Ping с PC3:


Как видно из рисунка, сетевая доступность уже присутствует. Судя по tracert-у, все уходит через туннели. Можно, в принципе, работать :). Но нам необходимо зашифровать наш пользовательский трафик. И вот теперь мы переходим к настройкам IPSec, причем с аутентификацией установления IPSec VPN по сертификатам.
Для начала, давайте настроим сервер сертификации. Перед этим убедитесь, чтобы на сервере была установлена службы IIS. Переходим на CA-Server (50.50.50.50/24, windows server 2003). Переходим в закладку установка и удаление программ, как показано на рисунке:


После этого, должно открыться следующее окно, в котором мы идем в пункт «Add/Remove Windows Components»:


Выбираем пункт «Certificate Services» и нажимаем «Next»:


Здесь выбираем параметр «Stand-alone root CA» и нажимаем «Next»:


Указываем имя common name (1). Сертификат будет действителен в течение 5 лет. Нажимаем «Next»:


Здесь указываются места хранения базы сертификатов и log-файлов. Нажимаем «Next». После этого начнется процесс установки компонентов (не забудьте вставить диск с дистрибутивом :)). На последнем окне установки нажмите «Finish».
Проверить работу центра сертификатов можно запустив консоль:


Или зайдя по адресу http://ca-server/certsrv. Должно открыться вот такое окно:


Сервер установили. Он работает. Но если вы сейчас попробуете получить сертификаты от него для роутеров, то у вас ничего не получится (по крайней мере, в моем случае). Глубоко углубляться в эту тему не буду, а лишь скажу, что это связано с отсутствием в данном центре сертификации поддержки протокола SCEP (Simple Certification Enrollment Protocol). Для активации этого протокола необходимо скачать и установить специальный add-on с официального сайта Microsoft.
Запускаем скачанный файл на сервере CA-Server. Появится первое окно:


Соглашаемся с лицензией. Запустится установочный wizard. В первом окне нажимайте «Next». Откроется следующее окно:


Здесь выбираем использовать локальный системный аккаунт и нажимаем «Next»:


Здесь снимаем (если отмечена) галку с этого параметра. Он отвечает за повышенную защиту при получении сертификатов. Т.е. при обращении к CA-Server-у он потребует так называемый «one time password» для разрешения выдачи сертификата. Нам это не понадобится. Нажимаем «Next». После этого появятся некоторые «пугающие» :) сообщения. Смело нажимайте «Yes». В итоге вы должны попасть вот на такое окно:


Здесь необходимо создать специальный сертификат для этого SCEP Add-On-а. С помощью него, он будет делать запрос на CA-Server от лица роутера. Т.е. получается приблизительно такая схема: роутер делает запрос на CA-Server, его «перехватывает» этот Add-On и делает запрос уже от себя. Просто придумайте ему (специальному сертификату) имя и название компании и нажимайте «Next». Появится финальное окно:


Нажимаем «Finish». Пройдет немного времени, и вы увидите вот такое окошко:


Запомните написанный в нем URL, он нам еще пригодится. Нажимайте «OK». Все, с настройкой CA-Server-а закончили. Идем далее.
Для правильной работы сертификатов необходимо, чтобы время на устройствах и на сервере совпадало. Так что при настройке роутеров на получение сертификатов необходимо настроить одинаковое время.
Итак, переходим на Main_Router.

Main_Router#conf t
Main_Router(config)#clock timezone GMT +2 – устанавливаем временной пояс;
Main_Router(config)#exit
Main_Router#clock set 14:43:00 29 october 2012 – устанавливаем актуальное время;
Main_Router#conf t
Main_Router(config)#ip domain name dmvpn.net – указываем имя домена (используется для генерации rsa-ключей);
Main_Router(config)#crypto key generate rsa usage-keys – генерируем rsa-ключи (я генерировал 1024 bit ключи);
Main_Router(config)#ip host ca-server 50.50.50.50 – прописываем соответствие имени сервера сертификатов и IP-адреса (теперь нет необходимости обращаться к DNS серверу);
Main_Router(config)#crypto ca trustpoint ca-server – создаем trustpoint и заходим в ее параметры;
Main_Router(ca-trustpoint)# enrollment url http://ca-server/certsrv/mscep/mscep.dll - указываем адрес, куда будут отправляться запросы на получение сертификатов;
Main_Router(ca-trustpoint)#enrollment mode ra – включаем режим RA (Registration Authority). Что это такое, можно почитать в интернете :);
Main_Router(ca-trustpoint)#exit
Main_Router(config)#crypto ca authenticate ca-server – делаем запрос на получение root-сертификата CA-Server-а, грубо говоря аутентифицируем наш trustpoint;
Certificate has the following attributes:
Fingerprint MD5: 39A02800 3BED8817 BA5225B4 BB170D0F
Fingerprint SHA1: F4071D83 8A18C7F8 9D1352EC 6F397208 6FA8F95A
% Do you accept this certificate? [yes/no]: y
Trustpoint CA certificate accepted.
Main_Router(config)#crypto ca enroll ca-server – делаем запрос на получение личного сертификата для роутера;
% Start certificate enrollment ..
% Create a challenge password. You will need to verbally provide this
password to the CA Administrator in order to revoke your certificate.
For security reasons your password will not be saved in the configuration.
Please make a note of it.
Password: - вводим любой пароль;
Re-enter password: - подтверждаем его;
% The subject name in the certificate will include: Main_Router.dmvpn.net
% Include the router serial number in the subject name? [yes/no]: n
% Include an IP address in the subject name? [no]: n
Request certificate from CA? [yes/no]: y
% Certificate request sent to Certificate Authority
% The 'show crypto ca certificate ca-server verbose' command will show the fingerprint.
Oct 26 12:13:37.734: CRYPTO_PKI: Signature Certificate Request Fingerprint MD5: 56C0B2D3 D3B1D37F A337D214 F54 1F23F
Oct 26 12:13:37.734: CRYPTO_PKI: Signature Certificate Request Fingerprint SHA1: 6CFACF05 39873E76 B8C78273 9E AEF9EF 46510A4E
Main_Router(config)#
Oct 26 12:13:40.814: CRYPTO_PKI: Encryption Certificate Request Fingerprint MD5: 126EBE9C 36154DD1 A18972DC FD 34E234
Oct 26 12:13:40.818: CRYPTO_PKI: Encryption Certificate Request Fingerprint SHA1: 31C70DE1 D4676AC9 90887C2A 7 AEF5DA7 EFFEE505
Main_Router(config)#
Oct 26 12:15:12.346: %PKI-6-CERTRET: Certificate received from Certificate Authority
Main_Router(config)#
Oct 26 12:16:01.814: %PKI-6-CERTRET: Certificate received from Certificate Authority
Main_Router(config)#


Все, сертификаты получены. Один момент. Если у вас на CA-Server-е не настроена автоматическая выдача сертификатов, то после отправки запроса, вам необходимо либо самому залезть на сервер, либо попросить администратора, чтобы он подписал ваши запросы и выдал сертификаты. Делается это в «Certification Authority» -- «Pending Requests». Выбираете ваши заявки и правой клавишей мыши «All Tasks» -- «Issue». После подтверждения вы можете посмотреть на ваши сертификаты в закладке «Issued Certificates». Сертификат должен выглядеть приблизительно вот так:

 

Теперь проделываем то же самое для других роутеров. Роутер Branch_1:

Branch_1#conf t
Branch_1(config)#clock timezone GMT +2
Branch_1(config)#exit
Branch_1#clock set 14:43:00 29 october 2012
Branch_1#conf t
Branch_1(config)#ip domain name dmvpn.net
Branch_1(config)#crypto key generate rsa usage-keys
Branch_1(config)#ip host ca-server 50.50.50.50
Branch_1(config)#crypto ca trustpoint ca-server
Branch_1(ca-trustpoint)# enrollment url http://ca-server/certsrv/mscep/mscep.dll
Branch_1(ca-trustpoint)#enrollment mode ra
Branch_1(ca-trustpoint)#exit
Branch_1(config)#crypto ca authenticate ca-server
Branch_1(config)#crypto ca enroll ca-server
Branch_1(config)#exit
Branch_1#wr


Роутер Branch_2:

Branch_2#conf t
Branch_2(config)#clock timezone GMT +2
Branch_2(config)#exit
Branch_2#clock set 14:43:00 29 october 2012
Branch_2#conf t
Branch_2(config)#ip domain name dmvpn.net
Branch_2(config)#crypto key generate rsa usage-keys
Branch_2(config)#ip host ca-server 50.50.50.50
Branch_2(ca-trustpoint)# enrollment url http://ca-server/certsrv/mscep/mscep.dll
Branch_2(ca-trustpoint)#enrollment mode ra
Branch_2(ca-trustpoint)#exit
Branch_2(config)#crypto ca authenticate ca-server
Branch_2(config)#crypto ca enroll ca-server
Branch_2(config)#exit
Branch_2#wr


Ну что же, переходим к последней части, а именно настройке IPSec VPN. Начнем, как обычно, с Main_Router:

Main_Router#conf t
Main_Router(config)#crypto isakmp policy 10 – создаем политику для первой фазы (настройка IKE). По умолчанию, если нет других настроек, используется аутентификация по сертификатам;
Main_Router(config-isakmp)#hash md5
Main_Router(config-isakmp)#encryption 3des
Main_Router(config-isakmp)#exit
Main_Router(config)#crypto ipsec transform-set MYSET esp-3des – настраиваем вторую фазу (IPSec) и создаем transform set;
Main_Router(cfg-crypto-trans)#mode transport – так как создание туннеля обеспечивается технологией mGRE, то переводим IPSec в транспортный режим;
Main_Router(cfg-crypto-trans)#exit
Main_Router(config)#crypto ipsec profile MYPROFILE – создаем профиль IPSec а не crypto map, так как для туннельных интерфейсов применяется именно он;
Main_Router(ipsec-profile)#set transform-set MYSET – привязываем к профилю ранее созданную transform-set;
Main_Router(ipsec-profile)#exit
Main_Router(config)#int tunnel 1
Main_Router(config-if)#tunnel protection ipsec profile MYPROFILE – применяем наш профиль на туннельном интерфейсе. Теперь весь исходящий трафик через этот туннель будет шифроваться;
Oct 29 13:43:00.195: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
Main_Router(config-if)#exit
Main_Router(config)#exit
Main_Router#wr


Пока вы не настроите всё на branch-роутерах, то вы будете видеть вот такие сообщения на Main_Router-е:

Oct 29 13:43:17.751: %CRYPTO-4-RECVD_PKT_NOT_IPSEC: Rec'd packet not an IPSEC packet.
(ip) vrf/dest_addr= /10.10.3.2, src_addr= 10.10.1.2, prot= 47


Они свидетельствуют о том, что роутер принял на свой интерфейс пакет не IPSec (в данном примере он прилетел от Branch_1 (10.10.1.2)). Так же вы еще увидите сообщения о том, что перестал работать и OSPF.
Продолжим. Переходим на роутер Branch_1:

Branch_1#conf t
Branch_1(config)#crypto isakmp policy 10
Branch_1(config-isakmp)# encr 3des
Branch_1(config-isakmp)# hash md5
Branch_1(config-isakmp)#exit
Branch_1(config)#crypto ipsec transform-set MYSET esp-3des
Branch_1(cfg-crypto-trans)# mode transport
Branch_1(cfg-crypto-trans)#exit
Branch_1(config)#crypto ipsec profile MYPROFILE
Branch_1(ipsec-profile)# set transform-set MYSET
Branch_1(ipsec-profile)#exit
Branch_1(config)#int tunnel 1
Branch_1(config-if)#tunnel protection ipsec profile MYPROFILE
Branch_1(config-if)#exit
Branch_1(config)#exit
Branch_1#wr


Роутер Branch_2:

Branch_2#conf t
Branch_2(config)#crypto isakmp policy 10
Branch_2(config-isakmp)# encr 3des
Branch_2(config-isakmp)# hash md5
Branch_2(config-isakmp)#exit
Branch_2(config)#crypto ipsec transform-set MYSET esp-3des
Branch_2(cfg-crypto-trans)# mode transport
Branch_2(cfg-crypto-trans)#exit
Branch_2(config)#crypto ipsec profile MYPROFILE
Branch_2(ipsec-profile)# set transform-set MYSET
Branch_2(ipsec-profile)#exit
Branch_2(config)#int tunnel 1
Branch_2(config-if)# tunnel protection ipsec profile MYPROFILE
Branch_2(config-if)#exit
Branch_2(config)#exit
Branch_2#wr


Все, закончили. Теперь перейдем к проверкам. Для начала посмотрим, что мы имеем на одном из Branch роутеров. Зайдем на Branch_1:


Видно, что маршруты снова прилетают по OSPF (1) и установлен пока один VPN (2). Теперь давайте зайдем на PC2 и сделаем команду ping на PC1 и PC3:


    где:
  • 1 – IP-адрес PC3;
  • 2 – IP-адрес PC1.
Теперь вернемся на Branch_1:


Видно, что появился еще один туннель (1) и IPSec VPN устанавливается с аутентификацией по сертификатам (2).
Вот еще немного информации:


Из этого рисунка видно, что пакеты шифруются и расшифровываются, показаны активные соединения, указаны алгоритмы шифрования и так далее.
Ну что же, все работает!!! Поздравляю!!! Следует отметить, что туннель поднимается автоматически, при появлении нужного трафика, т.е. когда хост из одной внутренней сети инициирует соединение со второй внутренней сетью.
Причем, если, допустим, PC2 захочет выйти в интернет, то его трафик не попадет в IPSec туннель, а пойдет через NAT во внешнюю сеть. Давайте удостоверимся:




Из рисунков видно, что когда ping идет на PC1, то записей в таблице NAT на роутере Branch_1 нет (1), а когда ping идет на CA-Server, то появляется запись в таблице NAT (2).
Как вы могли заметить, при настройке IPSec VPN мы не указывали IP-адрес соседа, вся эта информация будет получена от hub-роутера по протоколу NHRP. Мы один лишь раз настроили профиль IPSec на Branch-роутерах и все. Теперь, при добавлении нового узла необходимо просто настроить mGRE, NHRP, включить OSPF и применить профиль IPSec и он сможет автоматически устанавливать IPSec туннели со всеми участниками. По-моему – это здорово :).
В конце, хочу добавить одно замечание. Если вы будете настраивать этот проект в GNS3 и не успеете за один день, то (даже если сохраните проект) при выходе из программы время, установленное вами на роутерах, при следующем запуске сбросится (видимо небольшой баг в GNS3). И потребуется заново получить сертификаты (предварительно удалив старые). Так что советую вам делать это одним заходом :). Но, это мелочи, тем более, что все мы это делали виртуально, не имея под рукой физических устройств.
На всякий случай, вот тут я выложил конфигурационные файлы роутеров.
А на этом я хочу закончить этот пост. Как всегда надеюсь, что он был познавателен и полезен вам. Хочу поблагодарить вас за внимание и жду вас в следующих постах!!!

По всем возникающим вопросам обращайтесь ко мне через комментарии или лично. Координаты можно найти вот тут.

С нетерпением жду вас в следующих постах!!!

С уважением, Ant0ni0n

18 комментариев:

  1. Добрый день.
    Занимаюсь планированием реализации DMVPN + CA. А вы не рассматривали возможность размещения CA в локальной сети, например, в одном сегменте с хабом. Мысль пока одна - построить туннель, сформировать сертификат по нему, затем, зашифровать уже имеющийся туннель.
    И второе вы в своей работе не сталкивались с тем, что через некоторое время сертификат устройства необходимо обновлять (как правило один год).
    С уважением, Александр.

    ОтветитьУдалить
    Ответы
    1. Добрый день!!!
      Если вы спрашиваете про такую возможность (размещение CA в локальной сети), то конечно такой вариант рабочий и даже удобнее, чем описано выше, так как сертификатами управлять будете непосредственно вы (в том числе захватится вопрос об обновлении сертификатов, об отзыве и так далее, не надо никуда писать и просить...). Но проблема - как выдать эти сертификаты. Как вариант, согласен, сделать VPN IPSec туннель, подключиться и получить сертификат. Еще можно сделать редирект портов (если есть белый IP постоянный), т.е. например обращаемся например на 443 порт IP-адреса, а запрос пробрасывается дальше на CA сервер.

      Удалить
    2. Спасибо.
      У меня это пока единственное серьезное препятствие - решить, где будет жить CA.
      //Александр

      Удалить
  2. Добрый день! Вопрос правда не к этой теме. Не сталкиваись ли Вы с настройкой 802.1x? реально ли это попробовать сделать в рамках gns. (насколько я знаю gns не особо дружит со свичами) Было бы очень интересно Ваше мнение по
    этому поводу.С уважением, Анастасия =)

    ОтветитьУдалить
    Ответы
    1. Добрый вечер!!!
      С настройкой 802.1x в реальной жизни сталкивался, но в GNS3 пока не реализовывал, хотя в планах "покурить" эту тему есть. Думаю, если получится сделать, то обязательно напишу об этом пост :)

      Удалить
  3. а возможно построение двух активных easy vpn туннелей на cisco 850- до одной ASA5510 и до второй ASA5510? возможно описать такую лабу? заранее спасибо)

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Думаю, что такое возможно, но уже надо смотреть на характеристики cisco 850. Поддерживает ли он одновременно два соединения (туннеля) easy vpn.
      Создать такую лабу именно с cisco 850 в GNS3 не получится, так как это устройство не поддерживается в программе. С другим устройством такое возможно.

      Удалить
  4. Анонимный6 июня 2013 г., 22:55

    Добрый день. Изумительная статья.
    Опираясь на ваш материал попробовал построить туннели, но столкнулся с загвоздкой. Роутеры имеют по одному WAN порту и по 4 порта объединенных vlan1. Пинг проходит везде и в любую сторону, кроме пинга с ПК находящегося за одним роутером, до ПК находящегося за другим. Шифрование и сертификация в данный момент не нужны. Нужны работающие туннели. Буду очень благодарен, если покажите в какую сторону копать :)

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Если можно, то пришлите приблизительную схему как должно быть и конфигурации роутеров. Так просто сказать не могу, не имея такой информации.

      Удалить
    2. Анонимный7 июня 2013 г., 18:23

      Спасибо, что откликнулись. Я панику раньше времени развел. Конфиг оказался 100% рабочим. Затык был на конечных машинах в неадекватном поведении фаервола на пинг.

      Удалить
  5. Анонимный23 июля 2013 г., 11:58

    Добрый день, Статья по DMVPN просто класс!!
    Хотелось бы у Вас спросить? Вам приходилось когда нибудь настраивать локальную сеть скажем так организации с филиалами в удаленных точках, а транспорт предоставлялось провайдером по ADSL линии. В данный момент у меня возникла проблема с поднятием OSPF. Между двумя маршрутизаторами OSPF поднимается когда начинаешь добавлять 3 и более роутеров на них OSPF не поднимается. приходится прописать статически маршруты.

    ОтветитьУдалить
    Ответы
    1. Добрый день! Спасибо за теплый отзыв :).
      А что значит ADSL? Это выделенная линия точка-точка или связь идет через интернет и предоставляется только "белый" IP?
      И как вы связали первые два маршрутизатора?
      Желательно было бы увидеть схему сети как должно в итоге получиться.

      Удалить
  6. Анонимный23 июля 2013 г., 15:01

    Я отправил Вам пример схемы сети на ваш E-mail.
    Со стороны провайдера предоставлено выделенная линия. IP-адреса ставим свои.

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Я посмотрел вашу схему и сразу появились вопросы:
      1. Судя по вашей схеме вы настраиваете OSPF для NBMA сетей (нешироковещательные сети со множественным доступом), а там настройка отличается.
      2. Почему вы используете area 164, а backbone Area 0 вообще нет? (так как все маршрутизаторы в одной area, то я бы их добавил в Area 0)
      3. Для NBMA сетей при настройке OSPF необходимо соседей прописывать вручную.
      Исходя из этих вопросов, я бы вам посоветовал посмотреть мой пост на эту тему: http://www.go-to-easyit.com/2011/06/ospf-cisco-2.html.
      Если вопросы останутся, то пришлите мне конфигурации маршрутизаторов (можно без реальных IP) и включите debug ip ospf, соберите немного логов в момент подключения 2-го и так далее маршрутизатора.

      Удалить
  7. Здравствуйте.
    Подскажите какие Роутеры Вы использовали в GNS для организации данной схемы?

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток!!
      Для организации данной схемы я использовал роутеры серии 3600, а в частности:
      3640 с IOS версии c3640-jk9s-mz.124-16a.bin

      Удалить
    2. Спасибо, я уже догадался. Это единственный роутер которого у меня не было, скачал и все нашлось.

      Удалить
  8. Не совсем понял почему столько зон для OSPF, наcчет backbone на Tun1 это понятно, а вот почему на 2 и 3 роутер дополнительные зоны? Ведь по-хорошему можно было бы все в 1 зону вообще сделать, ну или для внутренних 1 зона и backbone для tun. Или я чего-то не понимаю?

    ОтветитьУдалить