Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> Cisco —> IPSEC over GRE with RIP

Cisco IPSEC over GRE with RIP on ADSL

Автор: m0ps.


ПРЕДИСЛОВИЕ: Тема довольно-таки избитая, поэтому в начале думал просто написать себе шпаргалку, но потом решил что вдруг еще кому-то сгодиться. За основу взято эту статью.
ЗАДАЧА:
Допустим, есть 2 территориально разнесенных офиса, в каждом из которых есть ADSL канал со статическим ip. Необходимо объединить их, обеспечив шифрование передающейся информации а также настроить динамический роутинг, дабы не париться каждый раз с маршрутами в ручную :)
РЕШЕНИЕ:
Для начала немного подробностей:
1) В моем случае связь между отделениями существенна через MPLS от УТ, но данная конфигурация должна без проблем работать если в качестве транзитной сети будет выступать интернет либо выделенная линия.
2) Оборудование - два Cisco ISR 857 с c850-advsecurityk9-mz.124-15.T7.bin IOS'ами.
3) Многие удивляться, почему я выбрал RIP? Ну во первых так сложилось исторически, а во вторых это единственный протокол, поддерживаемый всеми устройствами в сети. Конфигурацию рипа можно с с легкостью заменить на OSPF.
4) Сеть за первым роутером - 172.16.1.0/24 внутренний ip 172.16.1.254/24 внешний ip статический, но выдается провайдером - 10.10.10.1/24. Сеть за вторым роутером - 172.16.2.0/24 внутренний ip 172.16.2.254/24, внешний ip статический, но выдается провайдером - 10.10.10.2/24. IP адреса туннельных интерфейсов (Tunnel0) - 172.16.254.1/30 и 172.16.254.2/30
И так приступим... Для начала необходимо произвести базовые настройка маршрутизатора. Для этого подключаемся через консольный кабель, запускаем putty и подключаемся к serial порту к которому подключён кабель (скорее всего будет COM1). Не забываем произвести правильные настройки putty:
Speed:		9600
Data bits:	8
Stop bits:	1
Parity:		None
Flow control:	None

После включения маршрутизатора на экране должен отображаться процесс загрузки. Увидев приглашение, нажимаем Enter и вводим дефолтные логин (cisco) и пароль (cisco). В ответ получаем приглашение командной строки:
Router>

Переходим в привилегированный режим, в котором выполняются все основные операции,  следующей командой:
Router>enable
Router#

Далее можно сразу приступить к конфигурированию маршрутизатора, но я предпочитаю очищать дефолтный конфиг и настраивать с ноля. Для этого выполняем следующую команду и перегружаем роутер:
Router#erase startup-config
Router#reload

Далее подтверждаем желание перегрузиться и ждем…
В процессе загрузки маршрутизатор предложит войти в меню автоматической конфигурации, но мы вежливо отказываемся, ответив на вопрос no и дождавшись полной загрузки снова входим в привилегированный режим  (на это раз вводить логин и пароль не нужно). Для входа в меню конфигурации роутера вводим команду:
Router#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#

Задаем имя роутера и доменное имя.
Router(config)#hostname R1
R1(config)#ip domain-name mydomain

Также добавляем пользователя:
R1(config)#username user privilege 15 password mypass

Теперь необходимо обеспечить элементарную безопасность роутера включив шифрование паролей, установив пароли на терминальное подключение и привилегированный режим а также включив ssh, который понадобиться в дальнейшем для управления маршрутизатором.
R1(config)#service password-encryption
R1(config)#line con 0
R1(config-line)#password mypassword
R1(config-line)#login
R1(config-line)#exit
R1(config)#enable secret mysecretpass
R1(config)#crypto key generate rsa
R1(crypto key generate rsa)#1024
R1(config)#ip ssh time-out 120
R1(config)#ip ssh authentication-retries 3
R1(config)#line vty 0 4 
R1(config-line)#transport input ssh
R1(config-line)#login local

Также за ненадобностью отключаем возможность управление роутером через SDM а так же протокол CDP:
R1(config)#no ip http server
R1(config)#no ip http secure-server
R1(config)#no cdp run

Если нужно, включаем SNMP, задав read-only commynity:
R1(config)#snmp-server community MY_COMMYNITY RO

Настраиваем отправку логов на внешний syslog-сервер:
R1(config)#logging origin-id hostname
R1(config)#logging source-interface Vlan1
R1(config)#logging 172.16.1.200

Дальше настроим автоматическое резервное копирование файлов конфигурации на ftp сервер. Для начала зададим имя пользователя и пароль для ftp:
R1(config)#ip ftp username cisco
R1(config)#ip ftp password mypassword

Теперь настроим само резервирование:
R1(config)#archive
R1(config-archive)#log config
R1(config-archive-log-cfg)#hidekeys
R1(config-archive)#path ftp://172.16.1.200/cisco-backups/$h-%t
R1(config-archive)#write-memory

Теперь при сохранении конфигурации командой write-memory, startup config автоматически будет копироваться на ftp сервер.
Теперь приступим к конфигурированию интерфейса, смотрящего в локальную сеть и ADSL подключения к провайдеру. Для начала локальный интерфейс, в случае с Cisco 857 надо назначить ip единственному влану - Vlan1:
R1(config)#interface Vlan1
R1(config-if)#description Localnet IP for FA ports
R1(config-if)#ip address 172.16.1.254 255.255.255.0
R1(config-if)#ip tcp adjust-mss 1360

Все, теперь можно управлять маршрутизатором через ssh подключившись к ip 172.16.1.254, подключив роутер к сети. Об ip tcp adjust-mss 1360 будет написано ниже.
Теперь переходим к настройке подключения к провайдеру.
R1(config)#interface atm0
R1(config-if)#description Connectet to Ukrtelecom's DSLAM
R1(config-if)#no ip address
R1(config-if)#logging event atm pvc state
R1(config-if)#pvc 1/32
R1(config-if-atm-vc)#encapsulation aal5snap
R1(config-if-atm-vc)#pppoe-client dial-pool-number 1
R1(config-if-atm-vc)#exit
R1(config)#interface Dialer0
R1(config-if)#description ISP PPPoE
R1(config-if)#ip address negotiated
R1(config-if)#ip nat outside
R1(config-if)#ip mtu 1492
R1(config-if)#encapsulation ppp
R1(config-if)#dialer pool 1
R1(config-if)#ppp authentication pap callin
R1(config-if)#ppp pap sent-username ppplogin@dsl.ukrtel.net password ppppass

И добавим маршрут по умолчанию:
R1(config)#ip route 0.0.0.0 0.0.0.0 Dialer0

Все, теперь можно приступать к настройке IPSEC over GRE. Для начала настроим isakmp policy, а также зададим pre-share key:
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#encr aes
R1(config-isakmp)#hash md5
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#lifetime 43200
R1(config)#crypto isakmp key KJLNFHDSU*&4fj address 10.10.10.2

Теперь укажем transform-set и сконфигурируем криптомап и аксесс лист, для определения, какой трафик будет подвергнут шифрованию:
R1(config)#crypto ipsec transform-set VPN esp-aes esp-md5-hmac
R1(cfg-crypto-trans)#mode transport

R1(config)#crypto map main2branch 10 ipsec-isakmp
R1(config-crypto-map)#description Cryptomap Main to Branch Office
R1(config-crypto-map)#set peer 10.10.10.2
R1(config-crypto-map)#set transform-set VPN
R1(config-crypto-map)#match address 101
R1(config)#access-list 101 permit gre host 10.10.10.1 host 10.10.10.2

И наконец создаем туннельный интерфейс:
R1(config)#interface Tunnel0
R1(config-if)#description Tunnel interface to Branch Office
R1(config-if)#ip address 172.16.254.1 255.255.255.252
R1(config-if)#ip mtu 1400
R1(config-if)#tunnel source Dialer0
R1(config-if)#tunnel destination 10.10.10.2

Тут хочу немного остановиться на значениях mtu, ибо часто именно из-за размера пакетов и возникают проблемы. Для начала хочу заметить, что на интерфейсе Dialer0 необходимо указать mtu равным 1492 байта, т.к. 8 бай используется для ADSL инкапсуляции. Дальше... на туннельном интерфейсе задаем mtu равным 1400 байт. Можно конечно и немного сэкономить и указать его равным 1412 байт, т.к. для IPSEC over GRE инкапсуляции потребуется как-раз 80 байт, но я предпочитаю указывать именно 1400. Спросите почему - а просто так, целое число :))). Ну и на конец, очень важно указать на интерфейсе, смотрящем в локальную сеть ip tcp adjust-mss 1360 (40 байт меньше чем на туннельном интерфейсе).
И на конец, конфигурируем RIP:
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#passive-interface Dialer0
R1(config-router)#network 172.16.0.0

Тут стоит заметить, что внешний интерфейс необходимо сделать пассивным, дабы маршруты распространялись только через туннель.
Ну и самое главное - применяем криптомап на интерфейсе Dialer0, для включения шифрования трафика:
R1(config)#interface Dialer0
R1(config-if)#crypto map main2branch

На этом вроде бы все. Конфигурация второго роутера аналогична, только не забываем указывать правильные ip адреса.
Узнать состояние первой фазы IPSEC'a можно следующим образом:
R1#sh crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id slot status
10.10.10.2      10.10.10.1      QM_IDLE        2001    0    ACTIVE

IPv6 Crypto ISAKMP SA

Состояние второй фазы можно узнать следующей командой:
R1#sh crypto ipsec sa int dialer 0

interface: Dialer0
    Crypto map tag: main2branch, local addr 10.10.10.1

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.10.10.1/255.255.255.255/47/0)
   remote ident (addr/mask/prot/port): (10.10.10.2/255.255.255.255/47/0)
   current_peer 10.10.10.2 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 37901, #pkts encrypt: 37901, #pkts digest: 37901
    #pkts decaps: 40587, #pkts decrypt: 40587, #pkts verify: 40587
    #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.: 10.10.10.1, remote crypto endpt.: 10.10.10.2
     path mtu 1492, ip mtu 1492, ip mtu idb Dialer0
     current outbound spi: 0x3230B877(842053751)

     inbound esp sas:
      spi: 0xD32440DF(3542368479)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Transport, }
        conn id: 9, flow_id: Motorola SEC 1.0:9, crypto map: main2branch
        sa timing: remaining key lifetime (k/sec): (4470120/20481)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x3230B877(842053751)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Transport, }
        conn id: 10, flow_id: Motorola SEC 1.0:10, crypto map: main2branch
        sa timing: remaining key lifetime (k/sec): (4474852/20481)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE

     outbound ah sas:

     outbound pcp sas:

Не забываем после окончания настроек сохранить конфигурацию командной write.
P.S. На этом все, если у кого есть какие замечания - милости прошу...



размещено: 2009-04-29,
последнее обновление: 2009-07-01,
автор: m0ps


Yurij, 2009-06-18 в 10:18:57

Чувствуется, у автора в голове порядок. Буду ждать новых статей.

konstantine, 2009-07-01 в 7:14:18

Сеть за вторым роутером - 172.16.2.0/24 внутренний ip 172.16.1.254/24

Может 172.16.2.254/24.

Snicker, 2009-10-30 в 15:51:48

Добавлю:
можно использовать tunnel protection вместо crypto map.
Ссылка на статью Cisco:
http://www.cisco.com/en/US/docs/ios/12_3t/12_3t14/feature/guide/gtIPSctm.html

Евгений, 2009-11-10 в 12:06:15

Небольщое уточнение:
--
хочу заметить, что на интерфейсе Dialer0 необходимо указать mtu равным 1492 байта, т.к. 8 бай используется для ADSL инкапсуляции.
--
ADSL инкапсуляция тут не при чём, 8 байт нужно для PPPoE.
А за статью спасибо!

DAurum, 2009-12-28 в 12:56:09

Экспромтом есть несколько замечаний (кроме тех, что выше):

1. Динамическая маршрутизация на два хоста - это перебор и не более, чем доп. нагрузка на маршрутизатор.

2. ip route 0.0.0.0 0.0.0.0 Dialer0 в явном виде — это зло, если он не является выходом в интернет (насколько я понимаю, таковым он не является). Маршрут по-умолчанию, как по мне, должен уходить в Tunnel0, как минимум у одного и маршрутизаторов (если удалённый офис ходит в интернет через центральный офис).

3. Распространение маршрутов я бы сделал иначе (фрагмент):
router rip
passive-interface default
no passive-interface Tunnel0
no passive-interface Vlan1

4. На внешние интерфесы накинуть access-list, который разрешает только (либо для всех 10.10.10.0/24, либо для отдельных хостов этой сети, например, для аварийного входа по ssh) пакеты:
a) ipsec
b) udp isakmp
c) tcp ssh (аварийный вход)
d) icmp echo-request (для отладки, чтобы его можно было пингать)
e) icmp echo-reply (для отладки, чтобы принимать ответы на свой пинг)

5. Настроить NAT для пинга и ssh в сеть 10.10.10.0/24, чтобы была возможность проверить доступность хостов, а также для аварийного входа.

6. По возможности отказаться от GRE (не думаю, что у вас есть задачи, для которых единственное решение - GRE), т.к. инкапсуляция-декапсуляция именно в GRE - это ОЧЕНЬ ресурсоёмкий процесс, который падает на плечи центрального процессора маршрутизатора Cisco, в отличие от IPSEC (маршрутизаторы ISR имеют бортовой VPN-модуль).



 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0397 секунд
Из них PHP: 38%; SQL: 62%; Число SQL-запросов: 45 шт.
Исходный размер: 41363; Сжатая: 9816