Релиз стабильной версии Apache 2.4

Сегодня состоялся релиз стабильной версии http сервера Apache под номером 2.4.1. Первая стабильная версия ветки 2.2 была выпущена в далеком 2005 году. Не смотря на то, что в новом релизе большое множество нововведений он обратно совместим с API версии 2.2.х.

Основные нововведения:

  • Несколько МРМ могут быть собраны в виде динамически загружаемых модулей, которые возможно активировать без пересборки;
  • Модуль Event MPM теперь не является экспериментальным. Event MPM основан на коде модуля Worker и реализует гибридную модель обработки соединений, сочетающую многопоточность с пулом ожидающих соединения процессов;
  • Реализована поддержка асинхронных операций чтения и записи;
  • Директива LogLevel может быть сконфигурирована для каждого модуля и каждой директории отдельно. Поверх отладочного уровня логирования могут быть добавлены новые уровни от trace1 до trace8;
  • Появилась возможность определения через оператор If для блоков конфигурации;
  • Возможно указывать значение параметра KeepAliveTimeout в миллисекундах;
  • Директива NameVirtualHost объявлена устаревшей (deprecated);
  • Директива AllowOverrideList предоставляет более тонкую настройку .htaccess-файлов;
  • Возможность использовать переменные в конфигурационных файлах;
  • Потребление памяти по сравнению с веткой 2.2 снижено.

Новые модули:

  • mod_proxy_fcgi — бэкенд протокола FastCGI для mod_proxy;
  • mod_proxy_scgi — бэкенд протокола SCGI для mod_proxy;
  • mod_proxy_express — динамически конфигурируемые прокси для mod_proxy;
  • mod_remoteip — заменяет адрес IP и имя хоста клиента на запрос с IP-адреса списка представленных прокси или балансировки нагрузки с помощью заголовков запроса;
  • mod_heartmonitor, mod_lbmethod_heartbeat — позволяет mod_proxy_balancer распределять нагрузку основываясь на данных о количестве активных соединений на бэкенд-серверах;
  • mod_sed — улучшенная замена mod_substitute, позволяющая редактировать тело ответа посредством sed;
  • mod_allowmethods — модуль ограничения некоторых методов НТТР без помех для аутентификации и авторизации;
  • mod_lua — внедряет интерпретатор языка Lua в HTTPD для настройки и бизнес-логики;
  • mod_log_debug — позволяет добавлять настраиваемое отладочное логирование на различных фазах обработки запросов;
  • mod_buffer — обеспечивает буферизацию стеков фильтров ввода-вывода;
  • mod_ratelimit — обеспечивает ограничение пропускной способности для клиентов;
  • mod_reflector — обеспечивает отражение тела запроса через стек филтра вывода.

Изменения в модулях:

  • mod_ssl — добавлена поддержка проверки статуса клиентского сертификата на OCSP серверах, а также добавлена возможность совместного использования данных SSL сессии на нескольких http-серверах, через задействование memcached;
  • mod_proxy — значительно увеличена производительность работы директивы ProxyPass в блоках Location и LocationMatch;
  • mod_proxy_balancer — расширено число параметров BalancerMembers, которые можно менять через balancer-manager, добавлена возможность добавления новых параметров BalancerMembers через balancer-manager;
  • mod_cache — может теперь кэшировать запросы HEAD, директивы модуля могут быть установлены на отдельные каталоги, а не только для всего сервера (где это возможно), модуль может предоставлять старые данные из кэша, если сервер недоступен (ошибка 5хх);
  • mod_include — поддержка атрибута OnError в директиве include, что позволяет предоставлять документ ошибки вместо строки ошибки по умолчанию;
  • ]mod_cgi, mod_include, mod_isapi,… — более строгая проверка трансляций заголовков в переменные окружения, что позволяет снизить вероятность XSS-атак через подстановку скриптов в заголовки, теперь такие заголовки будут отбрасываться;
  • mod_authz_core — с помощью директивы Require можно использовать расширенную логику авторизации;
  • mod_ldap, mod_authnz_ldap — добавлена поддержка вложенных групп, улучшения в обработке таймаутов, возможность использования инструментария LDAP для отладки.

Расширения:

  • fcgistarter — новый инструмент запуска демона FastCGI;
  • htcacheclean — с его помощью могут быть указаны кэшируемые URL с опциональными метаданными, объём кэша может быть ограничен в дескрипторах;
  • rotatelogs — может создавать линк на текущий лог-файл.

Средства для разработчиков модулей:

  • Добавлен check_config для проверки конфигурации на ранней стадии загрузки. Он позволяет независимо проанализировать параметры определенных директив и при необходимости откорректировать их;
  • Добавлен парсер выражений общего назначения, API которого основан на ap_expr.h. Код парсера основан на ранее реализованном парсере для mod_ssl;
  • Добавлен интерфейс для кэширование небольших объектов, основанный на ранее созданном для mod_ssl кэше сессионных данных. В качестве хранилища можно использовать цикличный буфер в разделяемой памяти, dbm-базу на диске и memcached;
  • Для мониторинга статуса mod_cache добавлен cache_status, который вызывается после принятия решения о кэшировании. По умолчанию добавляет при ответе заголовки X-Cache в X-Cache-Detail.

Скачать продукт можно на официальном сайте
Список всех изменений в оригинале

NO_PUBKEY. Получение GPG-ключа.

При установке пакетов в Linux, с помощью команды apt-get иногда возникает ошибка вида «W: GPG error: [..] Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY [..]». Обычно такая ситуация возникает после добавления нового репозитория в /etc/apt/sources.list с последующей попыткой установить пакет из этого репозитория.

Причина происхождения проблемы — отсутствие в вашей системе публичного GnuPG-ключа репозитория, из которого вы пытаетесь инсталлировать пакет (который, в свою очередь, подписан данным ключом). Хеш нужного ключа указывается в тексте ошибки после NO_PUBKEY (т.е. на месте второго «[..]»). Именно его и надо добавить в базу apt вашей системы для успешной установки пакета.

Чтобы это сделать, требуется выполнить две команды:

gpg --keyserver subkeys.pgp.net --recv KEY
gpg --export --armor KEY | sudo apt-key add -

Здесь вместо KEY нужно подставить значение того GPG-ключа, который вы хотите добавить в свою базу. Так, например, если вы получали ошибку NO_PUBKEY F120156012B83718, вам потребуется выполнить следующие команды:

gpg --keyserver subkeys.pgp.net --recv ADB4438160A655EF
gpg --export --armor ADB4438160A655EF| sudo apt-key add -

После успешного экспорта GPG-ключа в свою базу вы можете повторить попытку установить нужный вам пакет.

——

есть способ проще и элегантнее, возможно пригодится

sudo apt-get update

дождитесь строк типа

W: Ошибка: deb.opera.com unstable Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY ADB4438160A655EF

ADB4438160A655EF — это КЛЮЧ, он разный для разных репозитариев

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ADB4438160A655EF

——

если у вас прокси в сети, то

sudo apt-key adv --recv-keys --keyserver-options http-proxy=«адрес_прокси: порт» --keyserver keyserver.ubuntu.com ADB4438160A655EF

——

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `sudo apt-get update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`

Парсинг биржевых котировок

Решение задачи по парсингу биржевых котировок с финансовых сайтов. Используется только CURL для получения информации, все остальное — чистый PHP.

function get_web_page($url) {

$uagent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, false); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_exec($ch);

curl_close($ch);

return $content;
}

$url = "http://www.finam.ru";

$result = get_web_page($url);

//print $result;
//$text = $result;

print "
";
print "";

$result= mb_convert_encoding($result,'UTF-8','Windows-1251');

//VTB AO
$findme = $result;
$findme0 = "ВТБ ао";
$pos1 = strpos($findme, $findme0); // вычисление позиции
$a1 = strlen($findme0); // длина строки поиска (60)
$b1 = substr($findme,$pos1); // отрезаем findme до позиции начала строки findme0
$c1 = substr($b1, 0, $a1);
$e1 = preg_replace('#(.*?)]* href=[^>]*?>(.*?)#', '\\1\\2\\3', $c1);
$findme2 = '';
$pos2 = strpos($b1, $findme2);
$a2 = strlen($findme2);
$b2 = substr($b1,$pos2);
$c2 = substr($b2,$a2);
$d2 = substr($c2,0,5); // size of value
$findme3 = "";
$pos3 = strpos($b2, $findme3);
$a3 = strlen($findme3);
$b3 = substr($b2,$pos3);
$c3 = substr($b3,$a3);
$d3_temp = substr($c3,0,6); // size of value
if (strval($d3_temp) < 0) {
$d3 = substr($c3,0,7);
$d3 = "".$d3."";
} else {
$d3 = substr($c3,0,6);
$d3 = "+".$d3."";
}
print "".$e1.": ".$d2." ".$d3."";
print "
";

//BRENT
$findme = $result;
$findme0 = "Brent*";
$pos1 = strpos($findme, $findme0); // вычисление позиции
$a1 = strlen($findme0); // длина строки поиска (60)
$b1 = substr($findme,$pos1); // отрезаем findme до позиции начала строки findme0
$c1 = substr($b1, 0, $a1);
$e1 = preg_replace('#(.*?)]* href=[^>]*?>(.*?)#', '\\1\\2\\3', $c1);
$findme2 = '';
$pos2 = strpos($b1, $findme2);
$a2 = strlen($findme2);
$b2 = substr($b1,$pos2);
$c2 = substr($b2,$a2);
$d2 = substr($c2,0,6); // size of value
$findme3 = "";
$pos3 = strpos($b2, $findme3);
$a3 = strlen($findme3);
$b3 = substr($b2,$pos3);
$c3 = substr($b3,$a3);
$d3_temp = substr($c3,0,6); // size of value
if (strval($d3_temp) < 0) {
$d3 = substr($c3,0,7);
$d3 = "".$d3."";
} else {
$d3 = substr($c3,0,6);
$d3 = "+".$d3."";
}
print "".$e1.": ".$d2." ".$d3."";
print "
";

//NICKEL
$findme = $result;
$findme0 = "Никель";
$pos1 = strpos($findme, $findme0); // вычисление позиции
$a1 = strlen($findme0); // длина строки поиска (60)
$b1 = substr($findme,$pos1); // отрезаем findme до позиции начала строки findme0
$c1 = substr($b1, 0, $a1);
$e1 = preg_replace('#(.*?)]* href=[^>]*?>(.*?)#', '\\1\\2\\3', $c1);
$findme2 = '';
$pos2 = strpos($b1, $findme2);
$a2 = strlen($findme2);
$b2 = substr($b1,$pos2);
$c2 = substr($b2,$a2);
$d2 = substr($c2,0,5); // size of value
$findme3 = "";
$pos3 = strpos($b2, $findme3);
$a3 = strlen($findme3);
$b3 = substr($b2,$pos3);
$c3 = substr($b3,$a3);
$d3_temp = substr($c3,0,6); // size of value
if (strval($d3_temp) < 0) {
$d3 = substr($c3,0,7);
$d3 = "".$d3."";
} else {
$d3 = substr($c3,0,6);
$d3 = "+".$d3."";
}
print "".$e1.": ".$d2." ".$d3."";
print "
";

//GOLD
$findme = $result;
$findme0 = "Золото";
$pos1 = strpos($findme, $findme0); // вычисление позиции
$a1 = strlen($findme0); // длина строки поиска (60)
$b1 = substr($findme,$pos1); // отрезаем findme до позиции начала строки findme0
$c1 = substr($b1, 0, $a1);
$e1 = preg_replace('#(.*?)]* href=[^>]*?>(.*?)#', '\\1\\2\\3', $c1);
$findme2 = '';
$pos2 = strpos($b1, $findme2);
$a2 = strlen($findme2);
$b2 = substr($b1,$pos2);
$c2 = substr($b2,$a2);
$d2 = substr($c2,0,7); // size of value
$findme3 = "";
$pos3 = strpos($b2, $findme3);
$a3 = strlen($findme3);
$b3 = substr($b2,$pos3);
$c3 = substr($b3,$a3);
$d3_temp = substr($c3,0,6); // size of value
if (strval($d3_temp) < 0) {
$d3 = substr($c3,0,7);
$d3 = "".$d3."";
} else {
$d3 = substr($c3,0,6);
$d3 = "+".$d3."";
}
print "".$e1.": ".$d2." ".$d3."";
print "
";

print "";

?>

 

Интересная инфа тут: http://parsing-and-i.blogspot.com

Парсинг котировок валют

Как то надо было доставать котировки валют с внешнего сайта. Использовал CURL для получения контента и простой xml_parser_create для парсинга информации.

$res = '';

function startElement($parser, $name, $attrs) {
global $res;
switch ($name) {
case 'VALCURS':
$d = mb_convert_encoding(urldecode($attrs['DATE']),'UTF-8', 'windows-1251');
//$dd = $d[0].$d[1].$d[2].$d[3].$d[4];
//$res .= 'Дата: '.$dd.'';
break;
}
}

function endElement($parser, $name) {}

function contents($parser, $data) {
global $res;
$data = mb_convert_encoding($data,'windows-1251','UTF-8');
//$res .= trim($data)."";
}

$ch = curl_init();

//$date = date("d/m/Y");
//$url = "http://www.cbr.ru/scripts/XML_daily.asp?///date_req=".$date;
$url = "http://www.cbr.ru/scripts/XML_daily.asp";

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_PROXYPORT, 0);
curl_setopt($ch, CURLOPT_PROXY, '');

$data = curl_exec($ch);

curl_close($ch);

$XMLparser = xml_parser_create();

xml_set_element_handler($XMLparser, 'startElement', 'endElement');
xml_set_character_data_handler($XMLparser, 'contents');

$xml_array = file($url);

$res .= "".$xml_array[67].": ".$xml_array[70]."";
$res .= "".$xml_array[74].": ".$xml_array[77]."";
print $res;

if (!xml_parse($XMLparser, $data)) {
die('Ошибка обработки данных');
}

xml_parser_free($XMLparser);
?>

Интересная инфа тут: http://parsing-and-i.blogspot.com

How to Static NAT two Public IPs to 1 Private IP?

A common question I get is can I NAT more than one public IP to a private IP using the Cisco ASA (or PIX) firewall.

The simple answer is yes, but you can’t using the «static» command as you would expect or else you’ll get the error «ERROR: duplicate of existing static».

So the following configuration will fail;

static (Inside,Outside) 201.10.10.2 10.10.10.1 netmask 255.255.255.255
static (Inside,Outside) 100.20.30.3 10.10.10.1 netmask 255.255.255.255

However using policy NAT on the PIX/ASA using code 7.x and beyond (Tested on 8.x) the following will work.

access-list policy_1 extended permit ip host 10.10.10.1 any
access-list policy_2 extended permit ip host 10.10.10.1 any
static (Inside,Outside) 201.10.10.2 access-list policy_1
static (Inside,Outside) 100.20.30.3 access-list policy_2

Interestingly if you ping 100.20.30.3 from the outside you see the echo-reply come from 201.10.10.2. ICMP isn’t stateful through the firewall so the Policy NAT will use the first IP in the list as the source address of any outgoing initiated flow.

Avaya G430 — root password

Используем «backdoor» пароль для пользователя root.

Данный метод работает при прямом подключении к порту Services, т.е. с помощью cross-кабеля и с настройками ноутбука: 192.11.13.5 / 255.255.255.252. Соединение, соотв., устанавливается с IP: 192.11.13.6.

login: root
pass: ggdaseuaimhrke

Получаем доступ к G430

G430-???(super)# sh run

! version 30.12.1
Config info release 30.12.1 time "15:34:26 10 JAN 2012 " serial_number 11N529803 029
set logging file enable
set logging file condition all Error
set logging file condition BOOT Debug
!
no ip telnet
no snmp-server community
set port classification 10/3 regular
set port classification 10/4 regular
!
interface Vlan 1
icc-vlan
exit
!
interface FastEthernet 10/2
exit
!
interface USB-Modem
description "Default Modem Setup"
timeout absolute 10
ppp authentication ras
no shutdown
ip address 10.3.248.253 255.255.255.252
exit
!
rtp-stat qos-trap
no rtp-stat fault
analog-test
exit
!#
!# End of configuration file. Press Enter to continue.

G430-???(super)#

Далее заходим еще раз и вводим:

username root password {???????} access-type admin

где (???????) — это новый пароль.

Перелогиниваемся, и входим под новым паролем.

Создание IPSec VPN туннеля между Linux и Cisco PIX

Создание IPSEC VPN туннеля на основе pre-shared keys между linux 2.6 ipsec-tools(racoon) и cisco PIX firewall 5xx

Введение:

Термин VPN (Virtual Private Network) переводится как «виртуальная частная сеть».

Этот сервис предоставляющий безопасную (защищенную шифрованием), надежную связь на основе уже существующего подключения к общей сети internet, например тем кому необходимо соединить удаленную локальную сеть или удаленный офис в единую сеть с обеспечением безопастности передаваемых данных.

В моем примере будет создаваться защищенный IPSEC канал между двумя сетевыми устройствами, первое это Cisco PIX firewall — аппаратный фаервол от известного производителя и второе компьютер, работающий в качестве шлюза под управлением OS Linux. IPSEC стандарт разработанный и принятый к реализации, для повышения безопасности используемого IP протокола (см. http://www.rfc-editor.org/ RFC 2401 — IPSec) Ниже приводится небольшая схема поясняющая устанавливаемое соединение.

Схема соединения :

( office_1 )--[ pix ] ~~ internet ~~ [ linux ]--( office_2 )

сети и интерфейсы :

сеть office_1 — 10.0.0.0/24
сеть office_2 — 192.168.0.0/24

pix_int — 10.0.0.1/24 (внутренний интерфейс, office_1)
pix_ext — 172.16.1.1 (внешний интерфейс)

linux_ext — 172.16.2.1 (внешний интерфейс)
linux_int — 192.168.0.1/24 (внутренний интерфейс, office_2)

Настраиваем pix (у меня был 506E):

! общая настройка, у вас она уже по всей видимости выполнена
! и необходимости тут настраивать что-либо еще нет.
interface ethernet0 auto
interface ethernet1 auto
nameif ethernet0 outside security0
nameif ethernet1 inside security100
mtu outside 1500
mtu inside 1500
ip address outside 172.16.1.1 255.255.255.0
ip address inside 10.0.0.1 255.255.255.0
route outside 0.0.0.0 0.0.0.0 172.16.1.254 1
! настройка ipsec_acl для разрешения доступа сетям
access-list ipsec_acl permit ip 10.0.0.1 255.255.255.0 192.168.0.0 255.255.255.0
access-list ipsec_acl permit ip 192.168.0.0 255.255.255.0 10.0.0.0 255.255.255.0
! исключение ipsec_acl из NAT
nat (inside) 0 access-list ipsec_acl
! The "sysopt connection permit-ipsec" command enables packets that have
! been processed by IPSec to bypass access list checks.
sysopt connection permit-ipsec
! определение политики IPSec
! определение протоколов для шифрации трафика
crypto ipsec transform-set myset1 esp-3des esp-sha-hmac
! определение номера последовательности и имени IPSec ISAKMP
crypto map toOFFICE2 20 ipsec-isakmp
! определение perfect forward secrecy (PFS) группы 2 (1024-bit Diffie-Hellman)
crypto map toOFFICE2 20 set pfs group2
! Трафик определенный нашим ACL который будет шифроватся через туннель
crypto map toOFFICE2 20 match address ipsec_acl
! кто будет принимать наше VPN соединение и терминировать его
crypto map toOFFICE2 20 set peer 172.16.2.1
! устанавливаем нашу схему шифрования трафика
crypto map toOFFICE2 20 set transform-set myset1
! данный туннель устанавливается на outside интерфейсе
crypto map toOFFICE2 interface outside
! задание параметров и политики IKE
! IKE будет работать на внешнем интерфейсе
isakmp enable outside
! secretkeyx - pre-shared key для шифрования с нашим удаленным peer'ом
isakmp key secretkeyx address 172.16.2.1 netmask 255.255.255.255
! использовать свой адрес для IKE идентификации с удаленным хостом
isakmp identity address
! метод аутентификации, по исвестному ключу
isakmp policy 9 authentication pre-share
! шифрование 3des
isakmp policy 9 encryption 3des
! hash алгоритм sha
isakmp policy 9 hash sha
! использование Diffie-Hellman группы 2
isakmp policy 9 group 2
! время жизни SA (security association) в секундах, 86400 = 24 часа
isakmp policy 9 lifetime 86400
! keepalive для соединения, 120 seconds = 2 минуты
isakmp keepalive 120

На этом настройка PIX закончена. Для обьяснения большинства параметров указанных выше, смотрите документацию.

Настройка Linux, на примере SLES-9 :

Использовалось стандартное ядро, поставляемое с SLES-9:

srv1:/etc/racoon # uname -a
Linux srv1 2.6.5-7.97-bigsmp #1 SMP Fri Jul 2 14:21:59 UTC 2004 i686 i686 i386 GNU/Linux
srv1:/etc/racoon # rpm -qf /boot/vmlinuz-2.6.5-7.97-bigsmp
kernel-bigsmp-2.6.5-7.97

Опции ядра linux для пересборки, если у вас ядро не поддерживает IPSEC,
необходимые для поддержки IPSEC.

-> Networking
-> Networking support (NET [=y])
-> Networking options
-> TCP/IP networking

CONFIG_INET_AH=m (IP: AH transformation)
CONFIG_INET_ESP=m (IP: ESP transformation)
CONFIG_INET_IPCOMP=m (IP: IPComp transformation)
CONFIG_INET_TUNNEL=m (IP: tunnel transformation)

-> Cryptographic options
-> Cryptographic API

включить все пункты модулями

CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_TEST=m

далее пересобираете ядро и перезагружаетесь в него.

Для установления соединения были использованы ipsec-tools-0.3.3-1.3 идущие в поставке SLES.

На момент написания статьи на сайте http://ipsec-tools.sf.net/ была доступна версия IPsec-tools 0.6.1

Настройка конфигурационных файлов /etc/racoon/ :

в файл psk.txt вы записываете ваши секретные ключи для нашего примера в данный файл необходимо добавить следующую запись:

172.16.1.1 secretkeyx

в файле setkey.conf определяются SA/SP базы (man setkey)

Содержимое:

flush;
spdflush;

# важно!
# не перепутайте направление трафика (IP адреса сетей и маршрутизаторов)
# для исходящего трафика
spdadd 192.168.0.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.2.1-172.16.1.1/require;
# для входящего трафика
spdadd 10.0.0.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/172.16.1.1-172.16.2.1/require;

конфигурационный файл для racoon — racoon.conf :

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/cert";
log notify;
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
listen
{
isakmp 172.16.2.1 [500];
}
timer
{
# These value can be changed per remote node.
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend.
persend 1; # the number of packets per a send.

# timer for waiting to complete each phase.
phase1 30 sec;
phase2 15 sec;
}

## IKE phase 1
remote 172.16.1.1
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;

my_identifier address 172.16.2.1;

nonce_size 16;
lifetime time 24 hour;
initial_contact on;
proposal_check obey; # obey, strict or claim

proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}

## IKE phase 2
sainfo address 192.168.0.0/24 any address 10.0.0.0/24 any {
pfs_group 2; # pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

Далее запускаем racoon через /etc/rc.d/init.d/racoon start или руками

# racoon -f /etc/racoon/racoon.conf

и при наличии трафика в тунеле, в логах вы увидите что-то похожее на :

Sep 21 22:07:16 sles9 racoon: INFO: respond new phase 1 negotiation: 172.16.2.1[500]<=>172.16.1.1[500]
Sep 21 22:07:16 sles9 racoon: INFO: begin Identity Protection mode.
Sep 21 22:07:16 sles9 racoon: INFO: ISAKMP-SA established 172.16.2.1[500]-172.16.1.1[500] spi:93b2202c65692650:247ac3da3bb61f85
Sep 21 22:07:16 sles9 racoon: INFO: respond new phase 2 negotiation: 172.16.2.1[0]<=>172.16.1.1[0]
Sep 21 22:07:16 sles9 racoon: INFO: IPsec-SA established: ESP/Tunnel 172.16.1.1->172.16.2.1 spi=182739187(0xae460f3)
Sep 21 22:07:16 sles9 racoon: INFO: IPsec-SA established: ESP/Tunnel 172.16.2.1->172.16.1.1 spi=14128346(0xd794da)

для проверки, на linux сервере можете подать команду :

$ ping -I 192.168.0.1 10.0.0.xx

где xx IP из офисной сети 1, любой адрес (внутренний интерфейс pix’a пинговатся не будет)

Решение проблем:

просмотр текущего состояния тунеля на PIX’e осуществляется двумя командами:

show isakmp sa
show crypto sa

 

При перезапуске или даже остановке racoon у вас возможно все-еще будет работать IPSEC VPN туннель так как используется реализация на уровне Linux ядра.

Для того чтобы перезапустить туннель на стороне PIX’a, необходимо выполнить 2 команды в _режиме конфигурации_ (conf t):

clear isakmp sa
clear crypto sa

Как только появится трафик совпадающий по ipsec acl или при его наличии, туннель должен поднятся.

Cisco IPSec over ADSL

Задача: две точки подключенные к ADSL, на одной установлена Cisco 26xx, на другой Zyxel ZyWALL, надо было их связать в одну сеть.

Решил я это сделать по средствам VPN IPSec, но столкнулся с проблемами. Дело в том, что Cisco смотрит в сторону провайдера через спутниковый канал, а ADSL нужен только для того чтобы связать две точки. Вот в этом то и заключалась проблема, решение и описание проблемы я раскрою чуть ниже в конфигурации.

Конфигурация:

Конфигурация IPSEC типовая

crypto isakmp policy 10
authentication pre-share
lifetime 28800
crypto isakmp key protectmeplease address 10.10.10.10
crypto isakmp keepalive 10 periodic
crypto isakmp aggressive-mode disable
!
crypto isakmp peer address 10.10.10.10
!
!
crypto ipsec transform-set optimus esp-des esp-sha-hmac
no crypto ipsec nat-transparency udp-encaps
!
crypto map letmein local-address BVI1
crypto map letmein 10 ipsec-isakmp
set peer 10.10.10.10
set transform-set optimus
match address 102

Интерфейс в сторону локальной сети

interface FastEthernet0/0.999
description LAN
encapsulation dot1Q 999
ip address 172.10.10.1 255.255.255.0
ip nat inside
ip virtual-reassembly

Интерфейс в сторону спутникового модема

interface FastEthernet0/1
description Satellite
ip address 192.168.1.2 255.255.255.252
duplex auto
speed auto
no cdp enable

Интерфейс DSL

interface ATM0/3/0
no ip address
no ip redirects
no atm ilmi-keepalive
dsl operating-mode auto
bridge-group 1
pvc 8/35
encapsulation aal5snap

Бриджовый интерфейс для ATM0/3/0, IPSEC туннель вешается именно на него

interface BVI1
description ADSL
ip address 10.20.20.20 255.255.255.0
no cdp enable
ip nat outside
ip virtual-reassembly
crypto map letmein

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

ACL 102 задает политику обмена пакетами, в нем надо указать из какой сети в какую пакеты будут ходить в IPSEC туннеле, короче указываем обе LAN сетки обоих точек, source должна быть та которая терминируется на Cisco, а destination LAN сетка которая терминируется на ZyWall.

access-list 102 permit ip 172.10.10.0 0.0.0.255 172.20.20.0 0.0.0.255

А сейчас начнется самое интересное 🙂

У нас есть default маршрут в сторону спутникового канала

ip route 0.0.0.0 0.0.0.0 192.168.1.1

А так же маршрут, который говорит что наш IPSEC peer находится за сетью СТК

ip route 10.10.10.10 255.255.255.255 10.20.20.1

Вроде все настроено, но пакеты не ходят, туннель не инициируется даже по первой фазе IKE.

Оказывается, чтоб туннель заработал надо создать фэйковый маршрут который говорит что сетка второго офиса находится за шлюзом ADSL

Добавляем:

ip route 172.20.20.0 255.255.255.0 10.20.20.1

Оказывается, чтобы туннель поднялся надо пустить трафик который соответствует политике прохождения трафика, короче пустить пинг из локалки первого офиса в локалку второго (ACL 102).

Настройка DMVPN на маршрутизаторах Cisco

Dynamic Multipoint VPN (DMVPN) — виртуальная частная сеть с возможностью динамического создания туннелей между узлами.

На этой странице детально описывается процедура организации сети DMPVN на маршрутизаторах Cisco. Рассматриваются варианты настройки проколов динамической маршрутизации OSPF и EIGRP, аутентификация маршрутизаторов по сертификатам и pre-shared key.

На странице dmvpn/config представлена схема и конфигурационные файлы для виртуальной сети Xentaur, которая рассматривается на этой странице.

Задача

Центральный офис (находящийся за dyn1) соединён с несколькими удалёнными (находящимися за dyn3 и dyn5). Необходимо обеспечить связь удалённых офисов с центральным и, при необходимости, устанавливать туннель между удалёнными офисами.

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

Изображенная топология называется — звезда (hub-and-spoke), где:

dyn1 — центр звезды, hub-маршрутизатор;
dyn3 и dyn5 — вершины звезды, spoke-маршрутизаторы.

Решение

Если в данной схеме использовать обычную виртуальную частную сеть, соединяющую сети (site-to-site VPN), то на маршрутизаторах, которые находятся в удалённых офисах, необходимо будет настроить туннель для связи с центральным офисом и туннели для связи с другими удалёнными офисами. Для того чтобы все удалённые офисы могли работать между собой напрямую, необходимо будет настроить туннели со всеми офисами, что приведёт к созданию полносвязной топологии (full mesh). Как следствие, количество настроек на маршрутизаторах, как в центральном офисе, так и в удалённых существенно увеличивается.
Технология DMVPN позволяет решить эту задачу более масштабируемым методом, чем создание связей точка-точка между всеми офисами и объединения их в полносвязную топологию:

При добавлении новых маршрутизаторов в существующую сеть DMVPN, необходимо настроить только новый маршрутизатор, изменений на уже существующих маршрутизаторах не требуется.

DMVPN позволяет использовать динамически назначенные IP-адреса на spoke-маршрутизаторах.

Если двум spoke-маршрутизаторам необходимо установить туннель напрямую, то он устанавливается динамически.

В основе DMVPN лежат несколько технологий:
mGRE-туннели;
Протокол NHRP (Next Hop Resolution Protocol);
Протоколы динамической маршрутизации;
Профили IPsec (IPsec profiles).

Так как DMVPN использует несколько технологий, то поиск неисправностей в его настройках может занимать достаточно много времени. Для того чтобы избежать ошибок, желательно пошагово проверять выполненные настройки, работу соответствующих протоколов и доступность сетей.

Схематическое изображение последовательности выполнения необходимых настроек:

Базовые настройки сети

Настройку сети DMVPN будем выполнять на условном примере, отражающем ключевые особенности сетей, в которых целесообразно использовать эту технологию.

За каждым маршрутизатором находится сеть, которая имитирует локальную сеть офисов:

dyn1 — 10.1.1.0/24;
dyn3 — 10.1.3.0/24;
dyn5 — 10.1.5.0/24.

Для внешних интерфейсов выбраны сети:

dyn1 — 192.168.1.0/24;
dyn3 — 192.168.3.0/24;
dyn5 — 192.168.5.0/24.

Настройка маршрутизации между внешними интерфейсами маршрутизаторов

В данной тестовой сети на каждом маршрутизаторе прописаны статические маршруты к сетям внешних интерфейсов других маршрутизаторов.
Статические маршруты на hub-маршрутизаторе (dyn1):

dyn1(config)# ip route 192.168.3.0 255.255.255.0 192.168.1.2
dyn1(config)# ip route 192.168.5.0 255.255.255.0 192.168.1.2

mGRE-туннели

В топологии звезда (hub-n-spoke) использование GRE-туннелей точка-точка приведёт к большому количеству настроек, так как IP-адреса всех spoke-маршрутизаторов должны быть известны и настроены на центральном маршрутизаторе (hub).

Альтернативой GRE-туннелей точка-точка является multipoint GRE (mGRE) туннель, который позволяет терминировать на себе несколько GRE-туннелей. mGRE-туннель позволяет одному GRE-интерфейсу поддерживать несколько IPsec-туннелей и упрощает количество и сложность настроек, по сравнению с GRE-туннелями точка-точка.

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

Настройка mGRE-туннелей

Для адресации туннелей выделена сеть 10.10.10.0/24, все туннели находятся в одной сети. На hub-маршрутизаторе и spoke-маршрутизаторах mGRE-туннели настраиваются аналогично (далее пример для hub-маршрутизатора).
Создание туннельного интерфейса:

dyn1(config)#interface Tunnel0

Задание IP-адреса на интерфейсе:

dyn1(config-if)#ip address 10.10.10.1 255.255.255.0

Так как GRE добавляет дополнительные заголовки к IP-пакету, необходимо изменить значение MTU на интерфейсе:

dyn1(config-if)#ip mtu 1416

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

Настройка соответствия между туннельным интерфейсом и физическим:

dyn1(config-if)#tunnel source FastEthernet1/0

Включение mGRE-туннеля:

dyn1(config-if)#tunnel mode gre multipoint

(Опционально) Задание ключа, который идентифицирует туннель:

dyn1(config-if)#tunnel key 999

Если будет использоваться топология с двумя hub-маршрутизаторами и, соответственно, двумя сетями DMVPN, то ключ указывает на принадлежность интерфейса одной из сетей DMVPN.

Next Hop Resolution Protocol (NHRP)

Next Hop Resolution Protocol (NHRP) — клиент-серверный протокол преобразования адресов, позволяющий всем хостам, которые находятся в NBMA(Non Broadcast Multiple Access)-сети, динамически выучить NBMA-адреса (физические адреса) друг друга обращаясь к next-hop-серверу (NHS). После этого хосты могут обмениваться информацией друг с другом напрямую.
В сети DMVPN:

Hub-маршрутизатор будет работать как NHS, а spoke-маршрутизаторы будут клиентами.

Hub-маршрутизатор хранит и обслуживает базу данных NHRP, в которой хранятся соответствия между физическими адресами и адресами mGRE-туннелей spoke-маршрутизаторов.

На каждом spoke-маршрутизаторе hub-маршрутизатор статически указан как NHS и задано соответствие между физическим адресом и адресом mGRE-туннеля hub-маршрутизатора.

При включении каждый spoke-маршрутизатор регистрируется на NHS и, при необходимости, запрашивает у сервера информацию об адресах других spoke-маршрутизаторов для построения spoke-to-spoke туннелей.

Network ID — характеристика локальная для каждого маршрутизатора (аналогия — OSPF process ID). Разные интерфейсы могут участвовать в разных NHRP сессиях; это просто разграничитель того, что сессия NHRP на одном интерфейсе не та что на другом. Соответственно, совершенно не обязательно, чтобы Network ID совпадали на разных маршрутизаторах.

Настройка NHRP

Настройка NHRP на hub-маршрутизаторе

Включение NHRP на интерфейсе:

dyn1(config)#interface Tunnel0
dyn1(config-if)#ip nhrp network-id 999

Hub-маршрутизатор будет автоматически добавлять соответствия между адресами spoke-маршрутизаторов:

dyn1(config-if)#ip nhrp map multicast dynamic

(Опционально) Настройка аутентификации:

dyn1(config-if)#ip nhrp authentication nhrppass

Настройка NHRP на spoke-маршрутизаторах

Включение NHRP на интерфейсе:

dyn3(config)#interface Tunnel0
dyn3(config-if)#ip nhrp network-id 999

Адрес туннельного интерфейса hub-маршрутизатора указывается как next-hop-сервер:

dyn3(config-if)#ip nhrp nhs 10.10.10.1

Статическое соответствие между адресом mGRE-туннеля и физическим адресом hub-маршрутизатора (первый адрес — адрес туннельного интерфейса, второй — адрес внешнего физического интерфейса):

dyn3(config-if)#ip nhrp map 10.10.10.1 192.168.1.1

Адрес внешнего физического интерфейса hub-маршрутизатора указывается как получатель multicast-пакетов от локального маршрутизатора:

dyn3(config-if)#ip nhrp map multicast 192.168.1.1

(Опционально) Настройка аутентификации:

dyn3(config-if)#ip nhrp authentication nhrppass

(Опционально) Настройка флага неуникальности ip-адреса туннеля в базе nhrp на hub-маршрутизаторе:

dyn3(config-if)#ip nhrp registration no-unique

Если изменится внешний адрес spoke-маршрутизатора и этой команды не будет, то hub-маршрутизатор не обновит свою базу nhrp из-за ошибки: unique address registered already

Проверка работы mGRE-туннелей и протокола NHRP

Проверка туннельных интерфейсов

После того, как на маршрутизаторах настроены mGRE-туннели и настроен протокол NHRP, туннели находятся в состоянии up и все IP-адреса туннелей доступны.

На dyn5:

dyn5#sh ip int br
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.5.5 YES manual up up
FastEthernet1/0 10.1.5.5 YES manual up up
Tunnel0 10.10.10.5 YES manual up up

Просмотр информации о туннельном интерфейсе:

dyn5#sh int tunnel 0
Tunnel0 is up, line protocol is up
Hardware is Tunnel
Internet address is 10.10.10.5/24
MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 192.168.5.5 (FastEthernet0/0), destination UNKNOWN
Tunnel protocol/transport multi-GRE/IP
Key 0x3E7, sequencing disabled
Checksumming of packets disabled
……
С dyn5 пингуется и dyn1 и dyn3:
dyn5#ping 10.10.10.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 148/200/280 ms
dyn5#ping 10.10.10.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 104/199/296 ms

Проверка NHRP на spoke-маршрутизаторе

Информация о NHS:

dyn5#sh ip nhrp nhs
Legend: E=Expecting replies, R=Responding
Tunnel0: 10.10.10.1 RE

Суммарная информация NHRP (уже установлен динамический туннель с dyn3):

dyn5#sh ip nhrp brief
Target Via NBMA Mode Intfc Claimed
10.10.10.1/32 10.10.10.1 192.168.1.1 static Tu0 < >
10.10.10.3/32 10.10.10.3 192.168.3.3 dynamic Tu0 < >

Подробная информация о других маршрутизаторах полученная по NHRP:

dyn5#sh ip nhrp
10.10.10.1/32 via 10.10.10.1, Tunnel0 created 00:12:29, never expire
Type: static, Flags: nat used
NBMA address: 192.168.1.1
10.10.10.3/32 via 10.10.10.3, Tunnel0 created 00:11:17, expire 01:47:19
Type: dynamic, Flags: router
NBMA address: 192.168.3.3

Получатель multicast-трафика:

dyn5#sh ip nhrp multicast
I/F NBMA address
Tunnel0 192.168.1.1 Flags: static

Суммарная информация о записях NHRP:

dyn5#sh ip nhrp summary
IP NHRP cache 2 entries, 528 bytes
1 static 1 dynamic 0 incomplete

Статистика по пакетам NHRP:

dyn5#sh ip nhrp traffic
Tunnel0: Max-send limit:100Pkts/10Sec, Usage:0%
Sent: Total 3
1 Resolution Request 0 Resolution Reply 2 Registration Request
0 Registration Reply 0 Purge Request 0 Purge Reply
0 Error Indication 0 Traffic Indication
Rcvd: Total 2
0 Resolution Request 1 Resolution Reply 0 Registration Request
1 Registration Reply 0 Purge Request 0 Purge Reply
0 Error Indication 0 Traffic Indication

Проверка NHRP на hub-маршрутизаторе

Суммарная информация NHRP:

dyn1#sh ip nhrp brief
Target Via NBMA Mode Intfc Claimed
10.10.10.3/32 10.10.10.3 192.168.3.3 dynamic Tu0 < >
10.10.10.5/32 10.10.10.5 192.168.5.5 dynamic Tu0 < >

Подробная информация о других маршрутизаторах полученная по NHRP:

dyn1#sh ip nhrp
10.10.10.3/32 via 10.10.10.3, Tunnel0 created 00:25:05, expire 01:34:54
Type: dynamic, Flags: authoritative unique registered
NBMA address: 192.168.3.3
10.10.10.5/32 via 10.10.10.5, Tunnel0 created 00:25:29, expire 01:34:30
Type: dynamic, Flags: authoritative unique registered
NBMA address: 192.168.5.5

Получатели multicast-трафика:

dyn1#sh ip nhrp multicast
I/F NBMA address
Tunnel0 None Flags: dynamic
Tunnel0 None Flags: dynamic

Суммарная информация о записях NHRP:

dyn1#sh ip nhrp summary
IP NHRP cache 2 entries, 496 bytes
0 static 2 dynamic 0 incomplete

Статистика по пакетам NHRP:

dyn1#sh ip nhrp traffic
Tunnel0
Sent: Total 4
0 Resolution Request 2 Resolution Reply 0 Registration Request
2 Registration Reply 0 Purge Request 0 Purge Reply
0 Error Indication
Rcvd: Total 5
2 Resolution Request 0 Resolution Reply 3 Registration Request
0 Registration Reply 0 Purge Request 0 Purge Reply
0 Error Indication

Настройка маршрутизации

Рассматривается использование протоколов EIGRP и OSPF для настройки маршрутизации между сетями офисов. Для реального использования достаточно выбрать один из этих протоколов, и выполнить соответствующие ему настройки.

Настройка EIGRP

Если в качестве протокола маршрутизации будет использоваться EIGRP, то необходимо:

Включить EIGRP для сетей mGRE-интерфейсов и локальных сетей;
Отключить автоматическое суммирование сетей по классовому признаку;
Настроить EIGRP на mGRE-интерфейсе.

Включение EIGRP для сетей mGRE-интерфейсов и локальных сетей:

dyn1(config)#router eigrp 1
dyn1(config-router)#network 10.10.10.0 0.0.0.255
dyn1(config-router)#network 10.1.1.0 0.0.0.255

Отключение автоматического суммирования сетей:

dyn1(config-router)#no auto-summary

Настройка EIGRP на mGRE-интерфейсах

Для работы в сети DMVPN необходимо дополнительно настроить EIGRP.

На hub-маршрутизаторе необходимо отключить правило расщепления горизонта (split horizon), иначе EIGRP не будет анонсировать маршруты, выученные через mGRE-интерфейс назад в этот же интерфейс:

dyn1(config-if)#no ip split-horizon eigrp 1

По умолчанию EIGRP будет подставлять IP-адрес hub-маршрутизатора в качестве next-hop для маршрутов которые он анонсирует, даже когда анонсирует маршруты назад через тот же интерфейс, на котором они были выучены. Для сети DMVPN необходимо чтобы EIGRP использовал в качестве next-hop адреса spoke-маршрутизаторов. Поэтому на hub-маршрутизаторе необходимо отключить это правило:

dyn1(config-if)#no ip next-hop-self eigrp 1

При использовании DMVPN в больших сетях время сходимости сети может увеличиваться. Для того чтобы избежать возможных проблем с маршрутизацией, на маршрутизаторах необходимо изменить hold time (по умолчанию 15 секунд):

dyn1(config-if)#ip hold-time eigrp 1 35

Если на одном из маршрутизаторов этот параметр изменен, то соседи этого маршрутизатора будут использовать этот таймер. Для того чтобы маршрутизатор сам использовал определенное значение таймера, необходимо изменить таймер на соответствующем интерфейсе соседа.

Проверка работы EIGRP

Соседи EIGRP на dyn1:

dyn1#sh ip eigrp neighbors
IP-EIGRP neighbors for process 1
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 10.10.10.5 Tu0 31 00:01:08 384 5000 0 22
0 10.10.10.3 Tu0 32 00:01:31 327 5000 0 25

Соседи EIGRP на dyn5:

dyn5#sh ip eigr neighbors
IP-EIGRP neighbors for process 1
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 10.10.10.1 Tu0 33 00:03:29 235 5000 0 35

Таблица маршрутизации dyn1:

dyn1#sh ip route
Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP
D — EIGRP, EX — EIGRP external, O — OSPF, IA — OSPF inter area
N1 — OSPF NSSA external type 1, N2 — OSPF NSSA external type 2
E1 — OSPF external type 1, E2 — OSPF external type 2
i — IS-IS, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2
ia — IS-IS inter area, * — candidate default, U — per-user static route
o — ODR, P — periodic downloaded static route

Gateway of last resort is not set

S 192.168.5.0/24 [1/0] via 192.168.1.2
10.0.0.0/24 is subnetted, 4 subnets
D 10.1.3.0 [90/297246976] via 10.10.10.3, 00:01:34, Tunnel0
C 10.10.10.0 is directly connected, Tunnel0
C 10.1.1.0 is directly connected, FastEthernet0/0
D 10.1.5.0 [90/297246976] via 10.10.10.5, 00:01:34, Tunnel0
C 192.168.1.0/24 is directly connected, FastEthernet1/0
S 192.168.3.0/24 [1/0] via 192.168.1.2

Таблица маршрутизации dyn3 (сеть 10.1.5.0 доступна через dyn5, а не через dyn1):

dyn3#sh ip route
Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP
D — EIGRP, EX — EIGRP external, O — OSPF, IA — OSPF inter area
N1 — OSPF NSSA external type 1, N2 — OSPF NSSA external type 2
E1 — OSPF external type 1, E2 — OSPF external type 2
i — IS-IS, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2
ia — IS-IS inter area, * — candidate default, U — per-user static route
o — ODR, P — periodic downloaded static route

Gateway of last resort is not set

S 192.168.5.0/24 [1/0] via 192.168.3.2
10.0.0.0/24 is subnetted, 4 subnets
C 10.1.3.0 is directly connected, FastEthernet1/0
C 10.10.10.0 is directly connected, Tunnel0
D 10.1.1.0 [90/297270016] via 10.10.10.1, 00:01:24, Tunnel0
D 10.1.5.0 [90/310046976] via 10.10.10.5, 00:01:16, Tunnel0
S 192.168.1.0/24 [1/0] via 192.168.3.2
C 192.168.3.0/24 is directly connected, FastEthernet0/0

Настройка OSPF

Для OSPF выбрана топология в которой mGRE-интерфейсы находятся в зоне 0, а локальные сети — каждая в своей зоне. Сеть разбита на зоны, так как это позволяет суммировать сети внутри зоны и не передавать в другие офисы подробную информацию о сетях (для данного примера это не актуально, но в реальной сети может существенно уменьшить таблицу маршрутизации и количество вычислений кратчайшего пути).

На маршрутизаторах необходимо:

  1. Включить OSPF для сетей mGRE-интерфейсов в зоне 0;
  2. Включить OSPF для локальных сетей в соответствующей зоне;
  3. Настроить OSPF на mGRE-интерфейсе.

Включение OSPF для сетей mGRE-интерфейсов в зоне 0:

dyn1(config)#router ospf 1
dyn1(config-router)#network 10.10.10.0 0.0.0.255 area 0

Включение OSPF для локальных сетей в соответствующей зоне (офису за dyn1 соответствует зона 1):

dyn1(config-router)#network 10.1.1.0 0.0.0.255 area 1

Настройка OSPF на mGRE-интерфейсе

Так как mGRE-интерфейсы образуют NBMA-сеть, то на этих интерфейсах необходимо изменить настройки OSPF. Подробнее о работе OSPF в NBMA-сетях на странице OSPF в Cisco.

На hub-маршрутизаторе и spoke-маршрутизаторах отличаются настройки приоритетов, остальные настройки совпадают.

Приоритет интерфейса влияет на то, какой маршрутизатор будет выбран выделенным маршрутизатором (DR) для сети. В топологии «звезда» роль DR должен взять на себя центральный маршрутизатор.

На hub-маршрутизаторе приоритет устанавливается 10:

dyn1(config)#interface Tunnel0
dyn1(config-if)#ip ospf priority 10

На spoke-маршрутизаторах приоритет устанавливается 0 для того чтобы маршрутизаторы не могли участвовать в выборах DR:

dyn3(config)#interface Tunnel0
dyn3(config-if)#ip ospf priority 0

Указание типа сети OSPF на mGRE-интерфейсе:

dyn1(config-if)#ip ospf network broadcast

Изменение интервала между отправкой hello-пакетов:

dyn1(config-if)#ip ospf hello-interval 30

Проверка работы OSPF

Соседи OSPF на dyn1:

dyn1#sh ip ospf neigh

Neighbor ID Pri State Dead Time Address Interface
192.168.3.3 0 FULL/DROTHER 00:01:51 10.10.10.3 Tunnel0
192.168.5.5 0 FULL/DROTHER 00:01:52 10.10.10.5 Tunnel0

Соседи OSPF на dyn3:

dyn3#sh ip ospf neighbor

Neighbor ID Pri State Dead Time Address Interface
192.168.1.1 10 FULL/DR 00:01:55 10.10.10.1 Tunnel0

Таблица маршрутизации на dyn1:

dyn1#sh ip route
Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP
D — EIGRP, EX — EIGRP external, O — OSPF, IA — OSPF inter area
N1 — OSPF NSSA external type 1, N2 — OSPF NSSA external type 2
E1 — OSPF external type 1, E2 — OSPF external type 2
i — IS-IS, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2
ia — IS-IS inter area, * — candidate default, U — per-user static route
o — ODR, P — periodic downloaded static route

Gateway of last resort is not set

S 192.168.5.0/24 [1/0] via 192.168.1.2
10.0.0.0/24 is subnetted, 4 subnets
O IA 10.1.3.0 [110/11112] via 10.10.10.3, 00:02:48, Tunnel0
C 10.10.10.0 is directly connected, Tunnel0
C 10.1.1.0 is directly connected, FastEthernet0/0
O IA 10.1.5.0 [110/11112] via 10.10.10.5, 00:02:48, Tunnel0
C 192.168.1.0/24 is directly connected, FastEthernet1/0
S 192.168.3.0/24 [1/0] via 192.168.1.2

Таблица маршрутизации на dyn3:

dyn3#sh ip route
Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP
D — EIGRP, EX — EIGRP external, O — OSPF, IA — OSPF inter area
N1 — OSPF NSSA external type 1, N2 — OSPF NSSA external type 2
E1 — OSPF external type 1, E2 — OSPF external type 2
i — IS-IS, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2
ia — IS-IS inter area, * — candidate default, U — per-user static route
o — ODR, P — periodic downloaded static route

Gateway of last resort is not set

S 192.168.5.0/24 [1/0] via 192.168.3.2
10.0.0.0/24 is subnetted, 4 subnets
C 10.1.3.0 is directly connected, FastEthernet1/0
C 10.10.10.0 is directly connected, Tunnel0
O IA 10.1.1.0 [110/11121] via 10.10.10.1, 00:01:26, Tunnel0
O IA 10.1.5.0 [110/11112] via 10.10.10.5, 00:01:26, Tunnel0
S 192.168.1.0/24 [1/0] via 192.168.3.2
C 192.168.3.0/24 is directly connected, FastEthernet0/0

Настройка IPsec

Первая фаза (настройка IKE)

Для тестовой сети в политике isakmp используются настройки по умолчанию:

Алгоритм шифрования: DES — Data Encryption Standard (56 bit keys);
Алгоритм хеширования: Secure Hash Standard;
Метод аутентификации: Rivest-Shamir-Adleman Signature;
Группа Diffie-Hellman: #1 (768 bit);
Время жизни SA: 86400 seconds, no volume limit.

Аутентификация по pre-shared key

В политике с аутентификацией по pre-shared key, метод аутентификации изменен, так как по умолчанию используется аутентификация по сертификатам.

Остальные параметры используют значения по умолчанию.

Создать политику isakmp:

dyn1(config)#crypto isakmp policy 20
dyn1(config-isakmp)#authentication pre-share

Так как адрес peer заранее не известен и может быть получен динамически, то при настройке pre-shared key необходимо указывать шаблонный адрес (wildcard address).

Настроить isakmp pre-shared key:

dyn1(config)#crypto isakmp key 0 isakmpkey address 0.0.0.0 0.0.0.0

Аутентификация по сертификатам

Аутентификацию по pre-shared key не рекомендуется использовать для DMVPN, так как pre-shared key должен быть указан с шаблонным адресом, и нет привязки к адресу маршрутизатора с которым устанавливается туннель.

В тестовой сети hub-маршрутизатор будет выполнять роль центра сертификатов.

Всем маршрутизаторам выданы сертификаты.

Более подробно о настройке центра сертификатов на маршрутизаторе Cisco и процедуре выдачи сертификатов маршрутизаторам на странице Центр сертификатов на маршрутизаторе Cisco.

Создать политику isakmp (так как по умолчанию используется аутентификация по сертификатам, то в тестовых целях можно оставить все настройки политики по умолчанию):

dyn1(config)#crypto isakmp policy 10
dyn1(config-isakmp)#

Вторая фаза (настройка IPsec-профиля)

Так как hub-маршрутизатор не знает заранее IP-адреса spoke-маршрутизаторов, то для второй фазы IPsec нужна динамическая crypto map (dynamic crypto map), но для туннельных интерфейсов эквивалентом dynamic crypto map является IPSec-profile:

применяется на туннельном интерфейсе;
после применения любой трафик исходящий из туннельного интерфейса инициирует создание IPsec-туннеля (нет необходимости использовать ACL, как в обычной crypto map);
source и destination адреса туннельного интерфейса используются для создания IPsec-туннеля. Адреса могут быть прописаны в настройках интерфейса или получены динамически с помощью NHRP (не задаётся адрес peer, как в обычной crypto map);

Создаем transform set:

dyn1(config)#crypto ipsec transform-set DMVPN-TR esp-des

Так как mGRE-интерфейс обеспечивает создание туннеля, то IPsec можно перевести в транспортный режим (по умолчанию используется туннельный режим):

dyn1(cfg-crypto-trans)#mode transport

Создать IPSec-профиль:

dyn1(config)#crypto ipsec profile DMVPN
dyn1(config-profile)#set transform-set DMVPN-TR

Применение IPsec-профиля

Применение IPsec-профиля на mGRE-интерфейсе:

dyn1(config)#interface Tunnel0
dyn1(config-if)#tunnel protection ipsec profile DMVPN

Проверка работы IPsec

Проверка работы IKE с аутентификацией по pre-shared key

Проверка isakmp SA на dyn1:

dyn1#show crypto isakmp sa
dst src state conn-id slot status
192.168.1.1 192.168.5.5 QM_IDLE 2 0 ACTIVE
192.168.1.1 192.168.3.3 QM_IDLE 1 0 ACTIVE

Проверка isakmp SA на dyn3 до установки туннеля spoke-to-spoke:

dyn3#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst src state conn-id slot status
192.168.1.1 192.168.3.3 QM_IDLE 1004 0 ACTIVE

IPv6 Crypto ISAKMP SA

Проверка isakmp SA на dyn3 после установки туннеля spoke-to-spoke. Для этого достаточно просто пропинговать туннельный интерфейс соседнего spoke-маршрутизатора (но пакетов icmp желательно послать штук 10):

dyn3#sh cry isa sa
IPv4 Crypto ISAKMP SA
dst src state conn-id slot status
192.168.1.1 192.168.3.3 QM_IDLE 1004 0 ACTIVE
192.168.5.5 192.168.3.3 QM_IDLE 1005 0 ACTIVE

IPv6 Crypto ISAKMP SA

Более подробная информация про isakmp SA (аутентификация по pre-shared key):

dyn1#show crypto isakmp sa detail
Codes: C — IKE configuration mode, D — Dead Peer Detection
K — Keepalives, N — NAT-traversal
X — IKE Extended Authentication
psk — Preshared key, rsig — RSA signature
renc — RSA encryption

C-id Local Remote I-VRF Status Encr Hash Auth DH Lifetime Cap.
2 192.168.1.1 192.168.5.5 ACTIVE des sha psk 1 23:56:14
Connection-id:Engine-id = 2:1(software)
1 192.168.1.1 192.168.3.3 ACTIVE des sha psk 1 23:56:12
Connection-id:Engine-id = 1:1(software)

Проверка работы IKE с аутентификацией по сертификатам

Проверка isakmp SA на dyn1:

dyn1#sh cry isa sa
dst src state conn-id slot status
192.168.1.1 192.168.5.5 QM_IDLE 2 0 ACTIVE
192.168.1.1 192.168.3.3 QM_IDLE 1 0 ACTIVE

Проверка isakmp SA на dyn3 до установки туннеля spoke-to-spoke:
dyn3#sh crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst src state conn-id slot status
192.168.1.1 192.168.3.3 QM_IDLE 1006 0 ACTIVE

IPv6 Crypto ISAKMP SA

Проверка isakmp SA на dyn3 после установки туннеля spoke-to-spoke. Для этого достаточно просто пропинговать туннельный интерфейс соседнего spoke-маршрутизатора (но пакетов icmp желательно послать штук 10):

dyn3#sh crypto isakmp sa detail
Codes: C — IKE configuration mode, D — Dead Peer Detection
K — Keepalives, N — NAT-traversal
X — IKE Extended Authentication
psk — Preshared key, rsig — RSA signature
renc — RSA encryption
IPv4 Crypto ISAKMP SA

C-id Local Remote I-VRF Status Encr Hash Auth DH Lifetime Cap.

1006 192.168.3.3 192.168.1.1 ACTIVE des sha rsig 1 23:57:00
Engine-id:Conn-id = SW:6

1007 192.168.3.3 192.168.5.5 ACTIVE des sha rsig 1 23:59:26
Engine-id:Conn-id = SW:7

Более подробная информация про isakmp SA (аутентификация по сертификатам):

dyn1#show crypto isakmp sa detail
X — IKE Extended Authentication
psk — Preshared key, rsig — RSA signature
renc — RSA encryption

C-id Local Remote I-VRF Status Encr Hash Auth DH Lifetime Cap.
2 192.168.1.1 192.168.5.5 ACTIVE des sha rsig 1 23:59:43
Connection-id:Engine-id = 2:1(software)
1 192.168.1.1 192.168.3.3 ACTIVE des sha rsig 1 23:59:34
Connection-id:Engine-id = 1:1(software)

Проверка работы IPsec

Просмотр информации о crypto map на dyn1:

dyn1#sh crypto map
Crypto Map «Tunnel0-head-0» 65536 ipsec-isakmp
Profile name: DMVPN
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
DMVPN-TR,
}

Crypto Map «Tunnel0-head-0» 65537 ipsec-isakmp
Map is a PROFILE INSTANCE.
Peer = 192.168.3.3
Extended IP access list
access-list permit gre host 192.168.1.1 host 192.168.3.3
Current peer: 192.168.3.3
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
DMVPN-TR,
}

Crypto Map «Tunnel0-head-0» 65538 ipsec-isakmp
Map is a PROFILE INSTANCE.
Peer = 192.168.5.5
Extended IP access list
access-list permit gre host 192.168.1.1 host 192.168.5.5
Current peer: 192.168.5.5
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
DMVPN-TR,
}
Interfaces using crypto map Tunnel0-head-0:
Tunnel0

Просмотр информации о crypto map на dyn3 до создания динамического туннеля с dyn5:

dyn3#sh crypto map
Crypto Map «Tunnel0-head-0» 65536 ipsec-isakmp
Profile name: DMVPN
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
DMVPN-TR,
}

Crypto Map «Tunnel0-head-0» 65537 ipsec-isakmp
Map is a PROFILE INSTANCE.
Peer = 192.168.1.1
Extended IP access list
access-list permit gre host 192.168.3.3 host 192.168.1.1
Current peer: 192.168.1.1
Security association lifetime: 4608000 kilobytes/3600 seconds
PFS (Y/N): N
Transform sets={
DMVPN-TR,
}
Interfaces using crypto map Tunnel0-head-0:
Tunnel0

Проверка IPsec SA на dyn1:

dyn1#show crypto ipsec sa

interface: Tunnel0
Crypto map tag: Tunnel0-head-0, local addr 192.168.1.1

protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.1/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (192.168.3.3/255.255.255.255/47/0)
current_peer 192.168.3.3 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 144, #pkts encrypt: 144, #pkts digest: 144
#pkts decaps: 110, #pkts decrypt: 110, #pkts verify: 110
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0

local crypto endpt.: 192.168.1.1, remote crypto endpt.: 192.168.3.3
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet1/0
current outbound spi: 0x76324587(1983006087)

inbound esp sas:
spi: 0x68D0FDFE(1758526974)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 2008, flow_id: SW:8, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4576176/3198)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0x76324587(1983006087)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 2005, flow_id: SW:5, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4576171/3184)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

outbound ah sas:

outbound pcp sas:

protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.1/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (192.168.5.5/255.255.255.255/47/0)
current_peer 192.168.5.5 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 144, #pkts encrypt: 144, #pkts digest: 144
#pkts decaps: 106, #pkts decrypt: 106, #pkts verify: 106
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0

local crypto endpt.: 192.168.1.1, remote crypto endpt.: 192.168.5.5
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet1/0
current outbound spi: 0xF5CB7B75(4123753333)

inbound esp sas:
spi: 0x31209EB8(824221368)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 2006, flow_id: SW:6, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4604536/3177)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0xF5CB7B75(4123753333)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 2007, flow_id: SW:7, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4604530/3161)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

outbound ah sas:

outbound pcp sas:

Проверка IPsec SA на dyn3 после установки туннеля spoke-to-spoke:

dyn3#sh crypto ipsec sa

interface: Tunnel0
Crypto map tag: Tunnel0-head-0, local addr 192.168.3.3

protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.3.3/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (192.168.1.1/255.255.255.255/47/0)
current_peer 192.168.1.1 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 56, #pkts encrypt: 56, #pkts digest: 56
#pkts decaps: 69, #pkts decrypt: 69, #pkts verify: 69
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 10, #recv errors 0

local crypto endpt.: 192.168.3.3, remote crypto endpt.: 192.168.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x68D0FDFE(1758526974)

inbound esp sas:
spi: 0x76324587(1983006087)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 47, flow_id: SW:47, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4598083/3535)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0x68D0FDFE(1758526974)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 48, flow_id: SW:48, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4598082/3475)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

outbound ah sas:

outbound pcp sas:

protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.3.3/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (192.168.5.5/255.255.255.255/47/0)
current_peer 192.168.5.5 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 6, #pkts encrypt: 6, #pkts digest: 6
#pkts decaps: 7, #pkts decrypt: 7, #pkts verify: 7
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0

local crypto endpt.: 192.168.3.3, remote crypto endpt.: 192.168.5.5
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x76C6CEF8(1992740600)

inbound esp sas:
spi: 0x6DD29A5(115157413)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 53, flow_id: SW:53, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4518903/3505)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0x76C6CEF8(1992740600)
transform: esp-des ,
in use settings ={Tunnel, }
conn id: 54, flow_id: SW:54, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4518903/3490)
IV size: 8 bytes
replay detection support: N
Status: ACTIVE

outbound ah sas:

outbound pcp sas:

Просмотр информации о DMVPN сети

Так как на маршрутизаторе dyn3 записи различных типов — динамическая и статическая, то вся информация проверяется на нем.

В некоторых версиях IOS может не быть команды show dmvpn. Она появилась в Cisco IOS 12.4(9)T.

Просмотр информации о DMVPN:

dyn3#show dmvpn
Legend: Attrb —> S — Static, D — Dynamic, I — Incompletea
N — NATed, L — Local, X — No Socket
# Ent —> Number of NHRP entries with same NBMA peer

Tunnel0, Type:Spoke, NHRP Peers:2,
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb
—— ————— ————— —— ——— ——
1 192.168.1.1 10.10.10.1 UP 00:14:47 S
1 192.168.5.5 10.10.10.5 UP 00:14:36 D

Более подробная информация о DMVPN до применения IPsec profile:

dyn3#show dmvpn detail
Legend: Attrb —> S — Static, D — Dynamic, I — Incompletea
N — NATed, L — Local, X — No Socket
# Ent —> Number of NHRP entries with same NBMA peer

————— Interface Tunnel0 info: —————
Intf. is up, Line Protocol is up, Addr. is 10.10.10.3
Source addr: 192.168.3.3, Dest addr: MGRE
Protocol/Transport: «multi-GRE/IP», Protect «»,
Tunnel VRF «», ip vrf forwarding «»

NHRP Details: NHS: 10.10.10.1 RE

Type:Spoke, NBMA Peers:2
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb Target Network
—— ————— ————— —— ——— —— ——————
1 192.168.1.1 10.10.10.1 UP 00:01:06 S 10.10.10.1/32

# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb Target Network
—— ————— ————— —— ——— —— ——————
1 192.168.5.5 10.10.10.5 UP 00:00:52 D 10.10.10.5/32
Pending DMVPN Sessions:

Более подробная информация о DMVPN после применения IPsec profile:

dyn3#show dmvpn detail
Legend: Attrb —> S — Static, D — Dynamic, I — Incompletea
N — NATed, L — Local, X — No Socket
# Ent —> Number of NHRP entries with same NBMA peer

————— Interface Tunnel0 info: —————
Intf. is up, Line Protocol is up, Addr. is 10.10.10.3
Source addr: 192.168.3.3, Dest addr: MGRE
Protocol/Transport: «multi-GRE/IP», Protect «DMVPN»,
Tunnel VRF «», ip vrf forwarding «»

NHRP Details: NHS: 10.10.10.1 RE

Type:Spoke, NBMA Peers:2
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb Target Network
—— ————— ————— —— ——— —— ——————
1 192.168.1.1 10.10.10.1 UP 00:20:47 S 10.10.10.1/32

IKE SA: local 192.168.3.3/500 remote 192.168.1.1/500 Active
Crypto Session Status: UP-ACTIVE
fvrf: (none)
IPSEC FLOW: permit 47 host 192.168.3.3 host 192.168.1.1
Active SAs: 2, origin: crypto map
Outbound SPI : 0x68D0FDFE, transform : esp-des
Socket State: Open
# Ent Peer NBMA Addr Peer Tunnel Add State UpDn Tm Attrb Target Network
—— ————— ————— —— ——— —— ——————
1 192.168.5.5 10.10.10.5 UP 00:20:47 D 10.10.10.5/32

IKE SA: local 192.168.3.3/500 remote 192.168.5.5/500 Active
IKE SA: local 192.168.3.3/500 remote 192.168.5.5/500 Active
Crypto Session Status: UP-ACTIVE
fvrf: (none)
IPSEC FLOW: permit 47 host 192.168.3.3 host 192.168.5.5
Active SAs: 2, origin: crypto map
Outbound SPI : 0x76C6CEF8, transform : esp-des
Socket State: Open

Pending DMVPN Sessions:

Конфигурации маршрутизаторов

В конфигурационных файлах сохранены все настройки:

Различные протоколы динамической маршрутизации:
OSPF;
EIGRP;

Различные методы аутентификации:
по pre-shares key;
по сертификатам.

Для реального использования достаточно выбрать один из протоколов маршрутизации и метод аутентификации.

Так как у EIGRP AD (administrative distance) меньше, чем у OSPF, то при использовании обоих протоколов, в таблице маршрутизации будут маршруты EIGRP.

Так как у политики isakmp, которая использует аутентификацию по сертификатам, на всех маршрутизаторах номер меньше чем у политики с pre-shared key, то при использовании обоих политик, аутентификация будет проводиться по сертификатам.

Конфигурация hub-маршрутизатора (dyn1)

dyn1#sh run
Building configuration…
Current configuration : 5618 bytes
!
! Last configuration change at 23:01:18 UTC Fri Feb 27 2009
! NVRAM config last updated at 23:07:10 UTC Fri Feb 27 2009
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname dyn1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
ip cef
!
!
ip domain name xgu.ru
ip host dyn1 192.168.1.1
!
!
!
crypto pki server dyn1
!
crypto pki trustpoint dyn1
enrollment url http://dyn1:80
revocation-check crl
rsakeypair dyn1
!
crypto pki trustpoint dyn
enrollment url http://dyn1:80
revocation-check crl
!
!
crypto pki certificate chain dyn1
certificate ca 01
308201F7 30820160 A0030201 02020101 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 34353534
5A170D31 32303232 37323234 3535345A 300F310D 300B0603 55040313 0464796E
3130819F 300D0609 2A864886 F70D0101 01050003 818D0030 81890281 8100C2F6
FAC39C79 1F083E69 F2952D2E 9B0B439E 9970825F 2B8B69E5 104264F9 B6712BE1
DBDBDC5D 38D13DF3 9B9ADE18 53EDA6D5 F50F5958 B5BC485E 03B4A958 F53C1B2F
64149E25 4552E596 BC87D9C2 04F9B0F2 5158ED70 6A8E9600 9D99716B 991D9DE5
65C7CAEF B48FEE1B E37B0E48 A4784731 D7B70BE9 1E264E66 A1AF6EDE 433F0203
010001A3 63306130 0F060355 1D130101 FF040530 030101FF 300E0603 551D0F01
01FF0404 03020186 301F0603 551D2304 18301680 14316E92 9C655E50 81B8C728
E0967B27 1B2D34DA 9E301D06 03551D0E 04160414 316E929C 655E5081 B8C728E0
967B271B 2D34DA9E 300D0609 2A864886 F70D0101 04050003 8181005E 77BD000F
8AF70F5E 5B1BF974 754BBCD8 548494FE AC7EE542 A1F60A15 2FD74C84 01EC7C5D
1F4361B9 109A154F 208CE0A7 B53F6BAC D8D35C71 F5319EA1 60083F1C 60E65441
9D752A26 BB90F676 7E9F0F2A 9B0FE3C8 C254AFD5 7A055242 E856D93E 5CE9D5E4
0E2722D3 46540D03 F69688C6 FDC4EDE2 F138818F 5D0076F2 BF5CA2
quit
crypto pki certificate chain dyn
certificate 04
308201AC 30820115 A0030201 02020104 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 35363231
5A170D31 30303232 37323235 3632315A 301C311A 30180609 2A864886 F70D0109
02160B64 796E312E 7867752E 7275305C 300D0609 2A864886 F70D0101 01050003
4B003048 024100A6 B5406A29 6DC12463 BF3204E9 00DF0F76 28157CEE 30FE7086
95CF3C17 06680971 23FFB531 7E52632A A779EA0C 54C54304 63D20B6D 4065408D
F1532CDA CC3B3902 03010001 A34F304D 300B0603 551D0F04 04030205 A0301F06
03551D23 04183016 8014316E 929C655E 5081B8C7 28E0967B 271B2D34 DA9E301D
0603551D 0E041604 1452D06E 52DA5CB4 F90D2966 31A4D112 3E2FC81F 32300D06
092A8648 86F70D01 01040500 03818100 A4E9A982 2E293A24 1B89C9FE F8A03BE1
024AF029 417B3A23 D7EABBAB 8E83664A 7821BFDC 65CD0280 1C7BAE0F 41053A45
0E8FB6FA 83A6FFA2 11075443 4AB6658E 0F17A141 FAC2E7A9 D093890B 8DA9E90C
8C5A7C82 0B4D261D 452690DE 894D9BF4 14EE9FF5 F9632C3A F5F34115 F42AA444
954ACE4F 32A47FD0 AF588B7F 299027DA
quit
certificate ca 01
308201F7 30820160 A0030201 02020101 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 34353534
5A170D31 32303232 37323234 3535345A 300F310D 300B0603 55040313 0464796E
3130819F 300D0609 2A864886 F70D0101 01050003 818D0030 81890281 8100C2F6
FAC39C79 1F083E69 F2952D2E 9B0B439E 9970825F 2B8B69E5 104264F9 B6712BE1
DBDBDC5D 38D13DF3 9B9ADE18 53EDA6D5 F50F5958 B5BC485E 03B4A958 F53C1B2F
64149E25 4552E596 BC87D9C2 04F9B0F2 5158ED70 6A8E9600 9D99716B 991D9DE5
65C7CAEF B48FEE1B E37B0E48 A4784731 D7B70BE9 1E264E66 A1AF6EDE 433F0203
010001A3 63306130 0F060355 1D130101 FF040530 030101FF 300E0603 551D0F01
01FF0404 03020186 301F0603 551D2304 18301680 14316E92 9C655E50 81B8C728
E0967B27 1B2D34DA 9E301D06 03551D0E 04160414 316E929C 655E5081 B8C728E0
967B271B 2D34DA9E 300D0609 2A864886 F70D0101 04050003 8181005E 77BD000F
8AF70F5E 5B1BF974 754BBCD8 548494FE AC7EE542 A1F60A15 2FD74C84 01EC7C5D
1F4361B9 109A154F 208CE0A7 B53F6BAC D8D35C71 F5319EA1 60083F1C 60E65441
9D752A26 BB90F676 7E9F0F2A 9B0FE3C8 C254AFD5 7A055242 E856D93E 5CE9D5E4
0E2722D3 46540D03 F69688C6 FDC4EDE2 F138818F 5D0076F2 BF5CA2
quit
!
!
!
!
crypto isakmp policy 10
!
crypto isakmp policy 20
authentication pre-share
crypto isakmp key isakmpkey address 0.0.0.0 0.0.0.0
!
!
crypto ipsec transform-set DMVPN-TR esp-des
mode transport
!
!
crypto ipsec profile DMVPN
set transform-set DMVPN-TR
!
!
interface Tunnel0
ip address 10.10.10.1 255.255.255.0
no ip redirects
ip mtu 1416
no ip next-hop-self eigrp 1
ip nhrp authentication nhrppass
ip nhrp map multicast dynamic
ip nhrp network-id 999
no ip split-horizon eigrp 1
ip ospf network broadcast
ip ospf hello-interval 30
ip ospf priority 10
tunnel source FastEthernet1/0
tunnel mode gre multipoint
tunnel key 999
tunnel protection ipsec profile DMVPN
!
interface FastEthernet0/0
ip address 10.1.1.1 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet0/1
no ip address
shutdown
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 192.168.1.1 255.255.255.0
duplex auto
speed auto
!
router eigrp 1
network 10.1.1.0 0.0.0.255
network 10.10.10.0 0.0.0.255
no auto-summary
!
router ospf 1
log-adjacency-changes
network 10.1.1.0 0.0.0.255 area 1
network 10.10.10.0 0.0.0.255 area 0
!
ip forward-protocol nd
ip route 192.168.3.0 255.255.255.0 192.168.1.2
ip route 192.168.5.0 255.255.255.0 192.168.1.2
!
!
ip http server
no ip http secure-server
!
!
control-plane
!
!
line con 0
exec-timeout 0 0
logging synchronous
line aux 0
line vty 0 4
!
!
end

Конфигурация spoke1 (dyn3)

dyn3#sh run
Building configuration…

Current configuration : 4466 bytes
!
! Last configuration change at 22:57:58 UTC Fri Feb 27 2009
! NVRAM config last updated at 23:00:31 UTC Fri Feb 27 2009
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname dyn3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip cef
!
!
!
ip domain name xgu.ru
ip host dyn1 192.168.1.1
!
multilink bundle-name authenticated
!
!
!
!
crypto pki trustpoint dyn1
enrollment url http://dyn1:80
revocation-check crl
!
!
crypto pki certificate chain dyn1
certificate 02
308201F0 30820159 A0030201 02020102 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 35323031
5A170D31 30303232 37323235 3230315A 301C311A 30180609 2A864886 F70D0109
02160B64 796E332E 7867752E 72753081 9F300D06 092A8648 86F70D01 01010500
03818D00 30818902 818100B5 3C4F3F80 1AF47759 9707CF2D FF5A62CF 8409EA97
CC9940C1 4DAB0907 DAB67FEC AB6CEFB5 23B2102A C715F0C6 E928AD13 9C46EFE7
0A1088D9 64B143E0 60E0846B 4E309FE3 34A956DE 8BBAE8B5 24482691 33E33E6F
DA4D5D71 2ED3000C 17091FFB 8330F259 DB29EE82 F791251B C856222E 50E7E2D4
DC7834BD 9CA9DD90 9B3A4902 03010001 A34F304D 300B0603 551D0F04 04030205
A0301F06 03551D23 04183016 8014316E 929C655E 5081B8C7 28E0967B 271B2D34
DA9E301D 0603551D 0E041604 142D0CE0 43342D6A 6E707455 9546A505 8AA3389B
BD300D06 092A8648 86F70D01 01040500 03818100 5BA5FF5C B9CE9D85 D5FAECBA
1CC46FFA C380C2BC 0CD47900 AB18C0DC 2785DE8C B60C0066 EBFD009C A77C8D77
02E57E58 C569D21F 1ED99D77 FB48EF54 33CCAE81 DEDCAC47 F95DCB79 0969BA3F
1BF21012 682C0E6C 736343BB 11E2AFA2 0782B200 FDE760D4 6D052C0D 7006AF57
EEFFDF10 BC51F753 A0210C0D 2E39CCD3 EF5A7652
quit
certificate ca 01
308201F7 30820160 A0030201 02020101 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 34353534
5A170D31 32303232 37323234 3535345A 300F310D 300B0603 55040313 0464796E
3130819F 300D0609 2A864886 F70D0101 01050003 818D0030 81890281 8100C2F6
FAC39C79 1F083E69 F2952D2E 9B0B439E 9970825F 2B8B69E5 104264F9 B6712BE1
DBDBDC5D 38D13DF3 9B9ADE18 53EDA6D5 F50F5958 B5BC485E 03B4A958 F53C1B2F
64149E25 4552E596 BC87D9C2 04F9B0F2 5158ED70 6A8E9600 9D99716B 991D9DE5
65C7CAEF B48FEE1B E37B0E48 A4784731 D7B70BE9 1E264E66 A1AF6EDE 433F0203
010001A3 63306130 0F060355 1D130101 FF040530 030101FF 300E0603 551D0F01
01FF0404 03020186 301F0603 551D2304 18301680 14316E92 9C655E50 81B8C728
E0967B27 1B2D34DA 9E301D06 03551D0E 04160414 316E929C 655E5081 B8C728E0
967B271B 2D34DA9E 300D0609 2A864886 F70D0101 04050003 8181005E 77BD000F
8AF70F5E 5B1BF974 754BBCD8 548494FE AC7EE542 A1F60A15 2FD74C84 01EC7C5D
1F4361B9 109A154F 208CE0A7 B53F6BAC D8D35C71 F5319EA1 60083F1C 60E65441
9D752A26 BB90F676 7E9F0F2A 9B0FE3C8 C254AFD5 7A055242 E856D93E 5CE9D5E4
0E2722D3 46540D03 F69688C6 FDC4EDE2 F138818F 5D0076F2 BF5CA2
quit
!
!
!
crypto isakmp policy 10
!
crypto isakmp policy 20
authentication pre-share
crypto isakmp key isakmpkey address 0.0.0.0 0.0.0.0
!
!
crypto ipsec transform-set DMVPN-TR esp-des
mode transport
!
!
crypto ipsec profile DMVPN
set transform-set DMVPN-TR
!
!
!
interface Tunnel0
ip address 10.10.10.3 255.255.255.0
no ip redirects
ip mtu 1416
ip nhrp authentication nhrppass
ip nhrp map 10.10.10.1 192.168.1.1
ip nhrp map multicast 192.168.1.1
ip nhrp network-id 999
ip nhrp nhs 10.10.10.1
ip nhrp cache non-authoritative
ip ospf network broadcast
ip ospf hello-interval 30
ip ospf priority 0
tunnel source FastEthernet0/0
tunnel mode gre multipoint
tunnel key 999
tunnel protection ipsec profile DMVPN
!
interface FastEthernet0/0
ip address 192.168.3.3 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 10.1.3.3 255.255.255.0
duplex full
!
router eigrp 1
network 10.1.3.0 0.0.0.255
network 10.10.10.0 0.0.0.255
no auto-summary
!
router ospf 1
log-adjacency-changes
network 10.1.3.0 0.0.0.255 area 3
network 10.10.10.0 0.0.0.255 area 0
!
ip route 192.168.1.0 255.255.255.0 192.168.3.2
ip route 192.168.5.0 255.255.255.0 192.168.3.2
no ip http server
no ip http secure-server
!
!
!
logging alarm informational
!
!
!
control-plane
!
!
line con 0
exec-timeout 0 0
logging synchronous
stopbits 1
line aux 0
stopbits 1
line vty 0 4
!
!
end

Конфигурация spoke2 (dyn5)

dyn5#sh run
Building configuration…

Current configuration : 4486 bytes
!
! Last configuration change at 23:01:02 UTC Fri Feb 27 2009
! NVRAM config last updated at 23:01:03 UTC Fri Feb 27 2009
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname dyn5
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip cef
!
!
no ip domain lookup
ip domain name xgu.ru
ip host dyn1 192.168.1.1
!
multilink bundle-name authenticated
!
!
!
!
!
crypto pki trustpoint dyn1
enrollment url http://dyn1:80
revocation-check crl
!
!
!
!
crypto pki certificate chain dyn1
certificate 03
308201F0 30820159 A0030201 02020103 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 35323032
5A170D31 30303232 37323235 3230325A 301C311A 30180609 2A864886 F70D0109
02160B64 796E352E 7867752E 72753081 9F300D06 092A8648 86F70D01 01010500
03818D00 30818902 818100B2 5B009C5C 96CE1EC6 50277830 567B7A7E D2E708C9
08D76929 FEBBEF08 CAB21B0B 1608D6F4 E95E4289 B982C020 4CE04C0C 98D529D6
194B0E43 EA66C3D2 D4DA1C91 137F3E0D 0A82C6A1 C3E35FF7 5835F8C2 AB4F6041
1C795126 E5624959 14125BFD 5F8B0D23 86F89692 8665B1EA 155267DC 597E3BBD
D09767B1 94DCA421 6604ED02 03010001 A34F304D 300B0603 551D0F04 04030205
A0301F06 03551D23 04183016 8014316E 929C655E 5081B8C7 28E0967B 271B2D34
DA9E301D 0603551D 0E041604 144898BD AAA7C3C3 7AF48494 F40A655A 7164F361
6E300D06 092A8648 86F70D01 01040500 03818100 91A1FD53 C06730AE D5265C09
C8B00F77 4F404E0A BA40FD59 1E337390 4597F3E8 3E9537B1 64030C48 4373EB95
EF0E7364 9E4E0DFE 9D9E40E7 B261C899 6A71EAD4 3C3478BA 6C7FC386 F80BE286
CF5A9013 E5CF37BC A3B228E1 D1C67B35 EAF9EF69 40E79C95 7DC25C3A E5C1E4A7
63CD2727 3820B8DF B5675215 D41BFD8C A34392C7
quit
certificate ca 01
308201F7 30820160 A0030201 02020101 300D0609 2A864886 F70D0101 04050030
0F310D30 0B060355 04031304 64796E31 301E170D 30393032 32373232 34353534
5A170D31 32303232 37323234 3535345A 300F310D 300B0603 55040313 0464796E
3130819F 300D0609 2A864886 F70D0101 01050003 818D0030 81890281 8100C2F6
FAC39C79 1F083E69 F2952D2E 9B0B439E 9970825F 2B8B69E5 104264F9 B6712BE1
DBDBDC5D 38D13DF3 9B9ADE18 53EDA6D5 F50F5958 B5BC485E 03B4A958 F53C1B2F
64149E25 4552E596 BC87D9C2 04F9B0F2 5158ED70 6A8E9600 9D99716B 991D9DE5
65C7CAEF B48FEE1B E37B0E48 A4784731 D7B70BE9 1E264E66 A1AF6EDE 433F0203
010001A3 63306130 0F060355 1D130101 FF040530 030101FF 300E0603 551D0F01
01FF0404 03020186 301F0603 551D2304 18301680 14316E92 9C655E50 81B8C728
E0967B27 1B2D34DA 9E301D06 03551D0E 04160414 316E929C 655E5081 B8C728E0
967B271B 2D34DA9E 300D0609 2A864886 F70D0101 04050003 8181005E 77BD000F
8AF70F5E 5B1BF974 754BBCD8 548494FE AC7EE542 A1F60A15 2FD74C84 01EC7C5D
1F4361B9 109A154F 208CE0A7 B53F6BAC D8D35C71 F5319EA1 60083F1C 60E65441
9D752A26 BB90F676 7E9F0F2A 9B0FE3C8 C254AFD5 7A055242 E856D93E 5CE9D5E4
0E2722D3 46540D03 F69688C6 FDC4EDE2 F138818F 5D0076F2 BF5CA2
quit
!
!
!
crypto isakmp policy 10
!
crypto isakmp policy 20
authentication pre-share
crypto isakmp key isakmpkey address 0.0.0.0 0.0.0.0
!
!
crypto ipsec transform-set DMVPN-TR esp-des
mode transport
!
!
crypto ipsec profile DMVPN
set transform-set DMVPN-TR
!
!
!
interface Tunnel0
ip address 10.10.10.5 255.255.255.0
no ip redirects
ip mtu 1416
ip nhrp authentication nhrppass
ip nhrp map 10.10.10.1 192.168.1.1
ip nhrp map multicast 192.168.1.1
ip nhrp network-id 999
ip nhrp nhs 10.10.10.1
ip nhrp cache non-authoritative
ip ospf network broadcast
ip ospf hello-interval 30
ip ospf priority 0
tunnel source FastEthernet0/0
tunnel mode gre multipoint
tunnel key 999
tunnel protection ipsec profile DMVPN
!
interface FastEthernet0/0
ip address 192.168.5.5 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 10.1.5.5 255.255.255.0
duplex full
!
router eigrp 1
network 10.1.5.0 0.0.0.255
network 10.10.10.0 0.0.0.255
no auto-summary
!
router ospf 1
log-adjacency-changes
network 10.1.5.0 0.0.0.255 area 5
network 10.10.10.0 0.0.0.255 area 0
!
ip route 192.168.1.0 255.255.255.0 192.168.5.2
ip route 192.168.3.0 255.255.255.0 192.168.5.2
no ip http server
no ip http secure-server
!
!
logging alarm informational
!
!
!
control-plane
!
!
line con 0
exec-timeout 0 0
logging synchronous
stopbits 1
line aux 0
stopbits 1
line vty 0 4
!
!
end

Дополнительная информация

  1. Dynamic Multipoint IPsec VPNs — http://www.cisco.com/en/US/tech/tk583/tk372/technologies_white_paper09186a008018983e.shtml
  2. Dynamic Multipoint VPN — http://www.cisco.com/en/US/products/sw/iosswrel/ps1839/products_feature_guide09186a0080110ba1.html
  3. NHRP — http://www.cisco.com/en/US/docs/ios/12_4/ip_addr/configuration/guide/hadnhrp_ps6350_TSD_Products_Configuration_Guide_Chapter.html
  4. DMVPN dual ISP:
    Dual-ISP, dual-hub on one router, DMVPN with GRE/IPSec and EIGRP — http://www.virtadept.com/?p=184
    DMVPN на 2821 и 2 ISP — http://www.supporting.ru/cgi-bin/forum.cgi?action=thread&id=36733

Наташа Самойленко

http://xgu.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_DMVPN_%D0%BD%D0%B0_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80%D0%B0%D1%85_Cisco