четверг, 30 мая 2013 г.

Настройка L2TPv3 (L2 Tunnel over IP)

Доброго времени суток, коллеги.
В этой статье будет рассказано как пробросить второй уровень (L2) через третий – IP уровень (L3) на оборудовании cisco посредством протокола L2TPv3. Подробнее о протоколе можно прочитать тут.
Рассмотрим три схемы сети (от простого к сложному):
  1. Проброс одной подсети между двумя маршрутизаторами
  2. Проброс двух подсетей между двумя маршрутизаторами
  3. Проброс двух подсетей между тремя маршрутизаторами

Используемое оборудование:
  1.        Cisco Router 2800
  2.        Cisco Switch 2950

Рассмотрим первый вариант.

Нужно прокинуть L2 канал через IP сеть интернета из одного офиса в другой, другими словами объединить в одну не маршрутизируемую сеть два географически распределенных офиса.
Туннель L2 будут держать маршрутизаторы cisco2800. Клиентской подсети присвоен VLAN200.
Прошивка роутеров:
Cisco IOS Software, 2800 Software (C2800NM-ADVIPSERVICESK9-M), Version 12.4(24)T7, RELEASE SOFTWARE (fc2)  System image file is "flash:c2800nm-advipservicesk9-mz.124-24.T7.bin"
Необходимые условия для работоспособности L2 канала:
  1. Интерфейсы L3, прокидывающие L2 сеть, на маршрутизаторах не должны иметь IP адреса. На рисунке это Fa0/1 и Gi0/1 роутеров Router_2 и Router_1 соответственно. (Router(config-if)#no ip address)
  2.  Обязательно должен быть включен CEF. (Router(config)#ip cef)

Приступим к настройке.
Router_1
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface GigabitEthernet0/0
ip address 1.1.1.1 255.255.255.0
l2tp-class l2tp-defaults
exit
interface GigabitEthernet0/1
no ip address
xconnect 2.2.2.1 123 encapsulation l2tpv3 pw-class L2Tunnel
exit

Router_2
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/0
exit
interface FastEthernet0/0
ip address 2.2.2.1 255.255.255.0
l2tp-class l2tp-defaults
exit
interface FastEthernet0/1
no ip address
xconnect 1.1.1.1 123 encapsulation l2tpv3 pw-class L2Tunnel
exit

Switch_1
Switch_2
interface FastEthernet0/13
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/12
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/17
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/18
switchport access vlan 200
switchport mode access
exit
Разберем подробнее команды на роутере:
pseudowire-class L2Tunnel – создаем класс для псевдо-канала L2 с именем L2Tunnel
encapsulation l2tpv3 – указываем метод инкапсуляции
protocol l2tpv3 – указываем тип протокола, в нашем случае это l2tp версии 3.
xconnect 2.2.2.1 123 encapsulation l2tpv3 pw-class L2Tunnel – Создает L2 туннель с роутером имеющим IP 2.2.2.1, где 123 – уникальный идентификатор виртуального канала VCID.
 Рассмотрим второй вариант.
Имеем два географически удаленных офиса с тем же оборудованием. Только в данном случае нам необходимо прокинуть еще одну изолированную сеть (Vlan300) в туннель.
Есть два пути решения:
  1.   Оставить предыдущую схему и отделить Vlan’ы коммутатором.
  2.   Построить два L2 канала при помощи саб-интерфейсов.

В данном случае для полноты восприятия рассмотрим решение с использованием sub-интерфейсов.\
Конфигурируем:
Router_1
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface GigabitEthernet0/0
ip address 1.1.1.1 255.255.255.0
l2tp-class l2tp-defaults
exit
interface GigabitEthernet0/1
no ip address
exit
interface GigabitEthernet0/1.1
encapsulation dot1Q 200
xconnect 2.2.2.1 123 encapsulation l2tpv3 pw-class L2Tunnel
exit
pseudowire-class L2Tunnel_2
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface GigabitEthernet0/1.2
encapsulation dot1Q 300
xconnect 2.2.2.1 124 encapsulation l2tpv3 pw-class L2Tunnel_2
exit


Router_2
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/0
exit
interface FastEthernet0/0
ip address 2.2.2.1 255.255.255.0
l2tp-class l2tp-defaults
exit
interface FastEthernet0/1
no ip address
exit
interface FastEthernet0/1.1
encapsulation dot1Q 200
xconnect 1.1.1.1  123 encapsulation l2tpv3 pw-class L2Tunnel
exit
pseudowire-class L2Tunnel_2
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface FastEthernet0/1.2
encapsulation dot1Q 300
xconnect 1.1.1.1 124 encapsulation l2tpv3 pw-class L2Tunnel_2
exit


Switch_1
Switch_2
interface FastEthernet0/13
switchport mode trunk
exit
interface FastEthernet0/12
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/3
switchport access vlan 300
switchport mode access
exit
interface FastEthernet0/17
switchport mode trunk
exit
interface FastEthernet0/18
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/19
switchport access vlan 300
switchport mode access
exit


Увидев настройку, можно догадаться, что при помощи саб-интерфейса можно с одного роутера построить несколько L2 каналов как на один роутер, так и на несколько роутеров сразу.
Рассмотрим третий вариант.
Имеем три географически удаленных офиса. Допустим, что нужно объединить два офиса Office2_1 и Office1_1 в одну L2 подсеть. А также три офиса Office1_2, Office2_2 и Office2_2 в другую изолированную L2 сеть.
Доставим на Router_3 дополнительный Fast Ethernet Layer 3 HWIC (Fa0/3/0). Канал L2 (Vlan300) между роутерами Router_1 и Router_2 будет держать Router_3, поэтому на место Router_3 можно поставить железку помощнее cisco 2800. А коммутировать эту сеть будет Switch_3.

Конфигурация будет такой:
Router_1
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface GigabitEthernet0/0
ip address 1.1.1.1 255.255.255.0
l2tp-class l2tp-defaults
exit
interface GigabitEthernet0/1
no ip address
exit
interface GigabitEthernet0/1.1
encapsulation dot1Q 200
xconnect 2.2.2.1 123 encapsulation l2tpv3 pw-class L2Tunnel
exit
pseudowire-class L2Tunnel_2
encapsulation l2tpv3
protocol l2tpv3
ip local interface GigabitEthernet0/0
exit
interface GigabitEthernet0/1.2
encapsulation dot1Q 300
xconnect 3.3.3.1 124 encapsulation l2tpv3 pw-class L2Tunnel_2
exit

Router_2
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/0
exit
interface FastEthernet0/0
ip address 2.2.2.1 255.255.255.0
exit
interface FastEthernet0/1
no ip address
exit
interface FastEthernet0/1.1
encapsulation dot1Q 200
xconnect 1.1.1.1 123 encapsulation l2tpv3 pw-class L2Tunnel
exit
pseudowire-class L2Tunnel_3
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/0
exit
interface FastEthernet0/1.2
encapsulation dot1Q 300
xconnect 3.3.3.1 125 encapsulation l2tpv3 pw-class L2Tunnel_3
exit

Router_3
pseudowire-class L2Tunnel
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/1
exit
interface FastEthernet0/1
ip address 3.3.3.1 255.255.255.0
exit
interface FastEthernet0/0
no ip address
exit
interface FastEthernet0/0
no ip address
xconnect 1.1.1.1 124 encapsulation l2tpv3 pw-class L2Tunnel_2
exit
pseudowire-class L2Tunnel_3
encapsulation l2tpv3
protocol l2tpv3
ip local interface FastEthernet0/1
exit
interface FastEthernet0/3/0
xconnect 2.2.2.1 125 encapsulation l2tpv3 pw-class L2Tunnel_3
exit

Switch_1
Switch_2
Switch_3
interface FastEthernet0/13
switchport mode trunk
exit
interface FastEthernet0/12
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/3
switchport access vlan 300
switchport mode access
exit
interface FastEthernet0/17
switchport mode trunk
exit
interface FastEthernet0/18
switchport access vlan 200
switchport mode access
exit
interface FastEthernet0/19
switchport access vlan 300
switchport mode access
exit
interface Gi0/0
switchport access vlan 300
switchport mode access
exit
interface Gi0/1
switchport access vlan 300
switchport mode access
exit
interface FastEthernet0/24
switchport access vlan 300
switchport mode access
exit
Можно не докупать дополнительный L3 HWIC, а использовать sub-интерфейсы на Router_3. Также можно настроить аутентификацию канала при помощи команды authentication.  
Напоминаю, что best practice настраивать L2TPv3 не на физический интерфейс, а на Loopback. Но для простоты тестирования и лучшего восприятия, настройка производилась на физическом интерфейсе.
Траблшутить канал можно командами:
show l2tun tunnel state
show l2tun session
show xconnect all
На этом предлагаю закончить.
Вопросы, замечания и предложения пишите в комментариях или на почту.
Удачного тестирования!

пятница, 17 мая 2013 г.

Настройка и дополнительная безопасность абонентов в UTM5.

Доброго времени суток, коллеги!
В прошлой статье мы рассматривали ограничение скорости абонентам. В этой статье будет рассмотрена автоматическая привязка абонентов к портам коммутаторов и к ACL маршрутизаторов. Ядро UTM5 работает на ОС Centos 5.7. Данные с маршрутизаторов UTM5 получает по протоколу NetFlow. Информацию по установке и настройке UTM5 можно найти в документации с официального сайта.
Возьмем прошлую схему.

Рассмотрим географически распределенную систему в трех районах Москвы: Ясенево, Бутово, Люберцы. Центр обработки данных находится в Ясенево, там же будет физически располагаться сервер UTM5.
Type
Нostname
IP адрес
router
Yasenevo
1.1.1.1
switch
Switch10021
1.1.1.2
switch
Switch10022
1.1.1.3
router
Lyuber
2.2.2.1
switch
Switch10023
2.2.2.2
switch
Switch10024
2.2.2.3
router
Butovo
3.3.3.1
switch
Switch10025
3.3.3.2

Логика работы:
При включении интернета, IP адрес абонента добавляется в разрешающий ACL на маршрутизаторе. Также добавляется в ACL на порт коммутатора.
При выключении интернета, IP адрес абонента удаляется из разрешающего ACL на маршрутизаторе. Также удаляется из ACL на порту коммутатора, и отключается порт.
Приступим к предварительной настройке.
1.      Для коммутаторов при включении интернета.
conf t
no ip access-list extended UTM4
ip access-list extended UTM4
permit ip host 1.1.1.4 any
exit
interface FastEthernet0/4
ip access-group UTM4 in
no shutdown
exit
exit
wr
exit
2.      Для коммутаторов при выключении интернета.
conf t
interface FastEthernet0/4
ip access-group UTM4 in
shutdown
exit        
no ip access-list extended UTM4
ip access-list extended UTM4
deny ip any any
exit
exit
wr
3.      Для маршрутизаторов при включении интернета.
conf t
ip access-list extended 160
permit ip host 1.1.1.4 any
exit
wr
4.      Для маршрутизаторов при выключении интернета.
conf t
ip access-list extended 160
no permit ip host 1.1.1.4 any
exit
wr
На маршрутизаторе привязываем ACL к интерфейсу:
conf t
interface GigabitEthernet0/0
  ip access-group 160 out
exit
Устанавливаем expect: yum install expect –y
Настройку с примерами можно найти в интернете или в предыдущей статье «Ограничение скорости абонентам в UTM5 при помощи Expect.»
Подключаемся к коммутатору: autoexpect ssh cisco@1.1.1.2
Применяем первый список команд. Создаем новую папку для хранения скриптов: mkdir /scripts/ 
Копируем скрипт в данную папку: cp script.exp /scripts/Switch_on.exp
Редактируем: nano /scripts/Switch_on.exp
В зависимости от версий expecta синтаксис будет немного различаться. Поэтому рассмотрим, что нужно заменить в данном скрипте на нашем шаблонном наборе команд:
$name#conf t
$name(config)# no ip access-list extended UTM$port
$name(config)# ip access-list extended UTM$port
$name(config-ext-nacl)# permit ip host $ip any
$name(config-ext-nacl)# exit
$name(config)# interface FastEthernet0/$port
$name(config-if)#ip access-group UTM$port in
$name(config-if)#no shutdown
$name(config)# exit
$name#exit
$name#wr
$name#exit

Передавать скрипту будем три параметра: IP адрес коммутатора, порт коммутатора, IP адрес абонента.
Добавим в скрипт соответствующие строчки:

set sw [lindex $argv 0]
set port [lindex $argv 1]
set ip [lindex $argv 2]

Т.к. имена коммутаторов различаются, а скрипт один на все коммутаторы, то добавим присвоение соответствующих имен к IP адресу коммутатора:

set switch10021 1.1.1.2
set switch10022 1.1.1.3
set switch10023 2.2.2.2
set switch10024 2.2.2.3
set switch10025 3.3.3.2

if {$sw==$switch10021} {set nom switch10021}
if {$sw==$switch10022} {set nom switch10022}
if {$sw==$switch10023} {set nom switch10023}
if {$sw==$switch10024} {set nom switch10024}
if {$sw==$switch10025} {set nom switch10025}

Сохраняем и тестируем. Абонент с IP адресом 1.1.1.4 подключен к коммутатору 1.1.1.3 в порт 9:  /scripts/Switch_on.exp 1.1.1.2 9 1.1.1.4
Получаем на выходе:

switch10022#conf t
switch10022(config)# no ip access-list extended UTM9
switch10022(config)# ip access-list extended UTM9
switch10022(config-ext-nacl)# permit ip host 1.1.1.4 any
switch10022(config-ext-nacl)# exit
switch10022(config)# interface FastEthernet0/9
switch10022(config-if)#ip access-group UTM9 in
switch10022(config-if)#no shutdown
switch10022(config)# exit
switch10022#exit
switch10022#wr
switch10022#exit

Скрипт для привязки абонента к порту коммутатора при включении интернета готов.
Аналогичные действия проделываем и для отключения интернета:
1.       Подключаемся к коммутатору, применяем команды из пункта 2, копируем скрипт /scripts/Switch_off.exp
2.      Вносим соответствующие изменения в скрипт и проверяем что все работает.
Приступаем к настройке.
Копируем 4 файла:
1.     cp /netup/utm5/rfw5.cfg /netup/utm5/rfw5_Switch_on.cfg
2.     cp /netup/utm5/bin/utm5_rfw /netup/utm5/bin/utm5_rfw_Switch_on
3.     cp /netup/utm5/bin/safe_utm5_rfw /netup/utm5/bin/safe_utm5_rfw_Switch_on
4.     cp /etc/init.d/utm5_rfw /etc/init.d/utm5_rfw_Switch_on
Редактируем соответствующие файлы:
1. Nano /netup/utm5/rfw5_Switch_on.cfg
rfw_name=Switch_Internet_on   //Имя фраервола, которое указываем в UTM5
core_host=127.0.0.1                       //IP адрес, где запущен UTM5
core_port=12758                          //Порт подключения к ядру
rfw_login=login                            // Логин     
rfw_password=passwd                // Пароль
firewall_type=local                      // Тип фраервола
rfw_ssl_type=none
sync_flags=enable:disable
firewall_path=/scripts/Switch_on.exp      //Путь до скрипта
log_level=3
log_file_main=/netup/utm5/log/rfw5_main_Switch_on.log
log_file_debug=/netup/utm5/log/rfw5_debug_Switch_on.log
log_file_critical=/netup/utm5/log/rfw5_critical_Switch_on.log
 2. Nano /netup/utm5/bin/safe_utm5_rfw_Switch_on
 #!/bin/sh
# description: UTM Billing System Radius Safe start script trap '' 1 2 3 15
pid_file=/var/run/utm5_Switch_on.pid         //Имя процесса
utm_exec=utm5_rfw_Switch_on                  //Имя исполняемого файла
err_log=/netup/utm5/log/rfw5_Switch_on.log
exec_dir=/netup/utm5/bin
root_email=root
rfw_flags=""
rfw_cfg=/netup/utm5/rfw5_Switch_on.cfg  //Путь до конф файла.
 3.Nano /etc/init.d/utm5_rfw_Switch_on
#!/bin/sh
# chkconfig: 2345 90 10
# description: UTM Billing System firewall control tool  trap '' 1 2 3 15
utm_exec=safe_utm5_rfw_Switch_on
exec_dir=/netup/utm5/bin

Запускаем: /etc/init.d/utm5_rfw_Switch_on star
Добавляем в автозагрузку: chkconfig --level 35 utm5_rfw_Switch_on on
Приступаем к настройке в UTM5:
Регистрируем коммутатор:

Добавляем брандмауэр:

Добавляем правило Firewall:

Заходим в настройки пользователей и добавляем информацию о коммутаторе и порте:

Перезапускаем:

/etc/init.d/utm5_rfw_Switch_on stop
/etc/init.d/utm5_rfw_Switch_on start

Аналогичные действия проделываем и для отключения интернета.
Приступим к настройке маршрутизатора.
Подключаемся к маршрутизатору: autoexpect ssh cisco@1.1.1.1
Применяем первый список команд для маршрутизатора при включении интернета.
Копируем скрипт в созданную папку: cp script.exp /scripts/cisco_1.1.1.1_on.exp
Редактируем: nano /scripts/cisco_1.1.1.1_on.exp
Рассмотрим, что нужно заменить в данном скрипте на нашем шаблонном наборе команд:

conf t
ip access-list extended 160
permit ip host $ip any
exit
wr

Передавать скрипту будем один параметр: IP адрес абонента.
Добавим в скрипт строчку:
set ip [lindex $argv 0]
Сохраняем и тестируем: cisco_1.1.1.1_on.exp 1.1.1.7

conf t
ip access-list extended 160
permit ip host 1.1.1.7 any
exit
wr

Приступаем к настройке:
Копируем 4 файла:
cp /netup/utm5/rfw5.cfg /netup/utm5/rfw5_cisco_1.1.1.1_on.cfg
cp /netup/utm5/bin/utm5_rfw /netup/utm5/bin/utm5_rfw_ cisco_1.1.1.1_on
cp /netup/utm5/bin/safe_utm5_rfw /netup/utm5/bin/safe_utm5_rfw_cisco_1.1.1.1_on
cp /etc/init.d/utm5_rfw /etc/init.d/utm5_rfw_cisco_1.1.1.1_on
И настраиваем соответственно.
После настройки скриптов, приступим к настройки UTM5:
Добавляем брандмауэр:

Добавляем правило firewall:

Заходим в настройки пользователя и добавляем его в группу «Ясенево».

Перезапускаем:
/etc/init.d/utm5_rfw_cisco_1.1.1.1_on stop
/etc/init.d/utm5_rfw_cisco_1.1.1.1_on start
Аналогичные действия проделываем и для отключения интернета.
Скрипты для маршрутизаторов рекомендуется не группировать, в отличие от коммутаторов. Маршрутизаторы могут быть разными, как и интерфейсы. Обрабатывание скриптов на маршрутизаторах ограничиваем по группам.
На этом предлагаю закончить.
Вопросы, замечания и предложения пишите в комментариях или на почту.
Удачного тестирования!