Как обычно, теорию я оставляю на самостоятельную проработку и сразу перехожу к практике (но вносить пояснения, как обычно, буду).
Схема сети, которую мы будем настраивать, выглядит следующим образом:
Итак, небольшая легенда :). Имеется центральный офис 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:
NAT мы настроили для приближения к реальным условиям. Теперь сделаем идентичные настройки на Branch – роутерах.
Роутер Branch_1:
Роутер Branch_2:
Теперь переходим на Inet_Router, имитирующий интернет:
Остановимся и проверим сетевую доступность. Например, с Main_Router-а:
На Branch роутерах делаем точно такие же настройки, только со своими IP-адресами и немного другой настройкой NHRP.
Роутер Branch_1:
Роутер Branch_2:
Сделаем проверки того, что мы имеем на данный момент. Посмотрим на роутере Branch_2:
Начнем с Main_Router:
Роутер Branch_1:
Роутер 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.
Все, сертификаты получены. Один момент. Если у вас на CA-Server-е не настроена автоматическая выдача сертификатов, то после отправки запроса, вам необходимо либо самому залезть на сервер, либо попросить администратора, чтобы он подписал ваши запросы и выдал сертификаты. Делается это в «Certification Authority» -- «Pending Requests». Выбираете ваши заявки и правой клавишей мыши «All Tasks» -- «Issue». После подтверждения вы можете посмотреть на ваши сертификаты в закладке «Issued Certificates». Сертификат должен выглядеть приблизительно вот так:
Теперь проделываем то же самое для других роутеров. Роутер Branch_1:
Роутер Branch_2:
Ну что же, переходим к последней части, а именно настройке IPSec VPN. Начнем, как обычно, с Main_Router:
Пока вы не настроите всё на branch-роутерах, то вы будете видеть вот такие сообщения на Main_Router-е:
Они свидетельствуют о том, что роутер принял на свой интерфейс пакет не IPSec (в данном примере он прилетел от Branch_1 (10.10.1.2)). Так же вы еще увидите сообщения о том, что перестал работать и OSPF.
Продолжим. Переходим на роутер Branch_1:
Роутер Branch_2:
Все, закончили. Теперь перейдем к проверкам. Для начала посмотрим, что мы имеем на одном из Branch роутеров. Зайдем на Branch_1:
Видно, что маршруты снова прилетают по OSPF (1) и установлен пока один VPN (2). Теперь давайте зайдем на PC2 и сделаем команду ping на PC1 и PC3:
Видно, что появился еще один туннель (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). И потребуется заново получить сертификаты (предварительно удалив старые). Так что советую вам делать это одним заходом :). Но, это мелочи, тем более, что все мы это делали виртуально, не имея под рукой физических устройств.
На всякий случай, вот тут я выложил конфигурационные файлы роутеров.
А на этом я хочу закончить этот пост. Как всегда надеюсь, что он был познавателен и полезен вам. Хочу поблагодарить вас за внимание и жду вас в следующих постах!!!
Источник: go-to-easyit.com/2012/10/dmvpn-cisco_30.html
Схема сети, которую мы будем настраивать, выглядит следующим образом:
Итак, небольшая легенда :). Имеется центральный офис 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).
- где:
- 1 – IP-адрес внешнего интерфейса роутера Branch_1;
- 2 – IP-адрес внешнего интерфейса роутера Branch_2;
- 3 – IP-адрес внешнего интерфейса роутера 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.
- где:
- 1 – успешный ping на Branch-роутеры;
- 2 – динамически созданные два туннеля;
Начнем с 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.
Видно, что появился еще один туннель (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). И потребуется заново получить сертификаты (предварительно удалив старые). Так что советую вам делать это одним заходом :). Но, это мелочи, тем более, что все мы это делали виртуально, не имея под рукой физических устройств.
На всякий случай, вот тут я выложил конфигурационные файлы роутеров.
А на этом я хочу закончить этот пост. Как всегда надеюсь, что он был познавателен и полезен вам. Хочу поблагодарить вас за внимание и жду вас в следующих постах!!!
Источник: go-to-easyit.com/2012/10/dmvpn-cisco_30.html
Комментариев нет:
Отправить комментарий