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).

ADSL на Cisco 857

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

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 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

В результате у нас будет установлен пароль на терминальное подключение mypassword, установлен пароль на привилегированный режим mysecretpass, сгенерирован 1024-битный rsa ключ для аутентификации через ssh и разрешено удалённое подключение только через ssh (телнет выключен) для которого создан пользователь user с наивысшими правами и паролем mypass.

Также за ненадобностью отключаем возможность управление роутером через SDM а так же протокол CDP:

R1(config)#no ip http server
R1(config)#no ip http secure-server
R1(config)#no cdp run

Теперь нужно назначить ip адрес маршрутизаторы, дабы им можно было управлять не только через консоль, но и через сеть. Для этого назначаем vlan’у номер 1 ip адрес (можно создать и новый vlan, но тогда нужно будет порту, который смотрит в локальную сеть назначать новый vlan, т.к. по умолчанию всем 4 портам назначен первый vlan).

R1(config)#interface vlan1
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip nat inside
R1(config-if)#no shutdown
R1(config-if)#interface fastethernet 0
R1(config-if)#no shutdown
R1(config-if)#exit

Все, теперь можно управлять маршрутизатором через ssh указав ip 192.168.1.1, подключив первый порт роутера (Fa0) к сети. Этот же адрес будет адресом шлюза по умолчанию в локальной сети.

Теперь переходим к настройке подключения к провайдеру.

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-if)#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-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 Dialer0

А теперь по-подробней: дня начала конфигурируем atm интерфейс, задав нужные параметры pvc и указываем тип инкапсуляции, далее настраиваем виртуальный интерфейс Dialer0, указав что ip получаем по DHCP от провайдера (ip address negotiated), включаем нат, указываем размер mtu, тип инкапсуляции (ppp), авторизации (ppp authentication pap callin) ну и задаем сами параметры авторизации — логин и пароль (ppplogin@dsl.ukrtel.net и ppppass соответственно). Напоследок назначаем маршрут по умолчанию.

Теперь настраиваем NAT и если необходимо, пробрасываем порт на внутреннюю машинку:

R1(config)#ip nat inside source list 1 interface Dialer0 overload
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat inside source static tcp 192.168.1.2 80 interface Dialer0 80

Также необходимо на локальном интерфейсе (в нашем случае Fa0) указать размер mtu, выполнив команду:

R1(config-if)#ip tcp adjust-mss 1452

Все, настройка закончена… можно приступать к тестированию.

Для этого на компьютере, подключённом к локальной сети настраиваем параметры сети, указав шлюз по умолчанию — ip маршрутизатора, а днс — ip адреса OpenDNS (давненько пользуюсь, удобный сервис) либо DNS своего провайдера.

На этом все. На самом деле настроек гораздо больше, но в большинстве случаев должно хватить и этого.

Надеюсь кому-то эта статейка будет полезна. Комментарии, критика и пожелания приветствуются 🙂

P.S. Писал по памяти глядя на рабочие конфиги, так что могут быть неточности. Все настройки производились на Cisco 857, но по идее должны работать и на остальных 800-й серии, которые поддерживают ADSL. Для включения ssh необходим IOS advsecurityk9