» Обучение |
» Форум |
![]() |
![]() |
![]() |
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
» UTM 5 | |
» IVR | |
» ndsad | |
» Цены | |
![]() |
|
|
Все права защищены (c) 2001-2008 NetUP (www.netup.ru) Перепечатка материалов разрешается только с предварительного разрешения компании NetUP (info@netup.ru) |
| Настройка и тестирование протокола BGP на базе оборудования Cisco и Gentoo Linux с пакетом Quagga (zebra) |
СодержаниеВведениеВ настоящей статье детально рассмотрены механизмы функционирования протокола динамической маршрутизации BGP. Приведены инструкции по настройке маршрутизаторов Cisco и пакета Quagga на базе Gentoo Linux. Собран работающий стенд, в котором связность между сетями осуществляется благодаря маршрутам, анонсированным по протоколу BGP. На базе этого стенда проведены испытания переключения на резервный канал при падении основного. Протокол BGP является основным в Интернете и благодаря ему осуществляется доступность провайдеров во всем мире. Рано или поздно каждый серьезный провайдер столкнется с настройкой именно этого протокола. Надеемся, что изложенный в данной статье материал окажет хорошую помощь техническим специалистам при настройке динамической маршрутизации по протоколу BGP. Внимание! В статье использованы фиктивные адреса сетей, а так же номера автономных систем. Для использования протокола BGP в реальной сети Интернет необходимо произвести регистрацию автономной системы и блока IP-адресов. Для этого можно воспользоваться услугами компании НетАП по регистрации. Более подробную информацию о данной услуге можно найти по ссылке - http://www.netup.ru/Autonomous_System_Registration.php Использованные сокращенияВ данной статье использованы следующие сокращения:
Описание протокола BGPПротокол BGP (Border Gateway Protocol; RFC-1265-1268,1467,1655,1771,1772) разработан компаниями IBM и CISCO. Пара BGP-соседей устанавливает между собой соединение по протоколу TCP, порт 179. Соседи, принадлежащие разным AS, должны быть доступны друг другу непосредственно; для соседей из одной AS такого ограничения нет, поскольку протокол внутренней маршрутизации обеспечит наличие всех необходимых маршрутов между узлами одной автономной системы. BGP-маршрутизаторы обмениваются сообщениями об изменении маршрутов. Максимальная длина таких сообщений составляет 4096 октетов, а минимальная 19 октетов. Каждое сообщение имеет заголовок фиксированного размера. Объем информационных полей зависит от типа сообщения.
Поле маркер содержит 16 октетов и его содержимое может легко интерпретироваться получателем. Маркер может использоваться для обнаружения потери синхронизации в работе BGP-партнеров. Поле длина имеет два октета и определяет общую длину сообщения в октетах, включая заголовок. Значение этого поля должно лежать в пределах 19 - 4096. Поле тип представляет собой код разновидности сообщения и может принимать следующие значения:
После того как связь на транспортном протокольном уровне установлена, первое сообщение, которое должно быть послано - это OPEN. При успешном прохождении этого сообщения партнер должен откликнуться сообщением KEEPALIVE. После этого возможны любые сообщения. Кроме заголовка сообщение OPEN содержит следующие поля:
Поле версия описывает код версии используемого протокола, на сегодня для BGP он равен 4. Двух-октетное поле моя автономная система определяет код AS отправителя. Поле время сохранения характеризует время в секундах, которое отправитель предлагает занести в таймер сохранения (после получения сообщения OPEN BGP-маршрутизатор должен выбрать значение времени сохранения, обычно меньшее из полученного в сообщении OPEN и значения, определенного при конфигурации системы (0-3сек); оно определяет максимальное время в секундах между сообщениями KEEPALIVE и UPDATE или между двумя UPDATE-сообщениями). Каждому узлу в рамках BGP приписывается 4-октетный идентификатор (BGP-identifier, задается при инсталляции и идентичен для всех интерфейсов локальной сети). Сообщения типа UPDATE используются для передачи маршрутной информации между BGP-партнерами. Этот тип сообщения позволяет объявить об одном новом маршруте или о закрытии группы маршрутов, причем объявление об открытии нового и закрытии старых маршрутов возможно в пределах одного сообщения. Сообщение UPDATE всегда содержит стандартный заголовок и может содержать другие поля в соответствии со схемой:
Если длина списка отмененных маршрутов равна нулю, ни один маршрут не отменен, а поле отмененные маршруты в сообщении отсутствует. Поле отмененные маршруты имеет переменную длину и содержит список префиксов IP-адресов маршрутов, которые стали недоступны: длина префикса (в битах), равная нулю, означает, что префикс соответствует всем IP-адресам, а сам имеет нулевой размер. Предусмотрены следующие разновидности кодов типа атрибута:
Информация о работоспособности соседних маршрутизаторов получается из KEEPALIVE-сообщений, которые должны посылаться настолько часто, чтобы уложиться во время, отведенное таймером сохранения (hold). Обычно это время не должно превышать одной трети от времени сохранения, но не должно быть и меньше 1 секунды. Если выбранное значение времени сохранения равно нулю, периодическая посылка KEEPALIVE-сообщений не обязательна. NOTIFICATION-сообщения посылаются, когда обнаружена ошибка. BGP-связь при этом немедленно прерывается. Помимо заголовка NOTIFICATION-сообщение имеет следующие поля:
Код ошибки представляет собой одно-октетное поле и указывает на тип данного сообщения. Возможны следующие коды ошибки:
Одно-октетное поле cубкод ошибки предоставляет дополнительную информацию об ошибке. Каждый код ошибки может иметь один или более субкодов. Если поле содержит нуль, это означает, что никаких субкодов не определено. Описание тестового стендаДля тестирования работы протокола BGP специалистами компании НетАП был собран тестовый стенд, включающий в себя четыре автономные системы:
В качестве маршрутизаторов было использовано 3 сервера с операционной системой Gentoo Linux и один маршрутизатор Cisco 3640. Схема стенда приведена на рисунке:
Настройка Cisco для использования BGPМинимальная конфигурацияДля простой конфигурации маршрутизатора Cisco для работы с протоколом BGP используются следующие команды: router bgp 65003 neighbor 172.16.101.2 remote-as 65004 neighbor 172.16.102.1 remote-as 65002 network 192.168.200.0 Команда router bgp [AS] присваивает маршрутизатору номер его автономной системы и включает обмен BGP-маршрутами между автономными системами. Команда neighbor [ip-address] remote-as [AS] добавляет запись в таблицу соседних BGP-маршрутизаторов с указанием IP-адреса маршрутизатора и номера автономной системы, к которой он принадлежит. Команда network [ip-address] указывает маршрутизатору на необходимость анонсировать указанную сеть как доступную через данный маршрутизатор. Выбор оптимального маршрутаПри выборе наилучшего пути к сети назначения в BGP применяется несколько критериев, каждый из которых может быть настроен вручную. Алгоритм выбора маршрута состоит из следующих этапов:
Настройка атрибута WeightАтрибут Weight (вес) является метрикой и позволяет системному администратору вручную присваивать определенный вес всем маршрутам, информация о которых получена от партнеров BGP. Чем больше вес, тем лучше путь. Данная метрика особенно полезна, когда маршрутизатор соединен с несколькими автономными системами. Вес остается локальным параметром для того маршрутизатора, на котором он сконфигурирован. Когда информация о маршрутах поступает из многих источников, атрибут может применяться для того, чтобы маршрутизатор предпочитал определенный интерфейс всем остальным. Атрибут конфигурируется с помощью команды: neighbor <IP-адрес> weight <вес> Допустимые значения веса лежат в диапазоне 0 - 65535. Значение по умолчанию равно 32768. Диагностика сети BGPПосле настройки протокола BGP можно воспользоваться рядом команд для проверки конфигурации и диагностики сети. Эти команды также можно использовать для изучения процесса маршрутизации BGP:
Пример вызова команды show ip bgp: Router#show ip bgp
BGP table version is 67, local router ID is 172.16.101.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 172.16.100.0/24 172.16.102.1 0 0 65002 i
* 172.16.101.2 0 65004 65002 i
r 172.16.101.0/24 172.16.102.1 0 65002 65004 i
r> 172.16.101.2 0 0 65004 i
r> 172.16.102.0/24 172.16.102.1 0 0 65002 i
r 172.16.101.2 0 65004 65002 i
*> 172.16.103.0/24 172.16.102.1 0 0 65002 i
* 172.16.101.2 0 65004 65002 i
*> 192.168.100.0 172.16.102.1 0 65002 65001 i
* 172.16.101.2 0 65004 65002 65001 i
Установкаи настройка Quagga в Gentoo LinuxУстановка QuaggaQuagga - пакет программ, реализующих протоколы маршрутизации, основанные на TCP/IP. Имеется поддержка таких протоколов, как RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP-4 и BGP-4+.В дополнение к традиционному протоколу IPv4, Quagga также поддерживает протоколы маршрутизации для IPv6. Quagga позволяет осуществлять функции маршрутизации на отдельно взятом компьютере, обмениваясь маршрутной информацией с соседями и соответствующим образом изменяя таблицу маршрутов ядра. Вы имеете возможность динамически изменять конфигурацию Quagga и просматривать информацию о текущей конфигурации. Для установки пакета Quagga воспользуйтесь следующей командой: emerge quagga Пакет quagga включает в себя набор демонов для работы с различными протоколами маршрутизации (ripd, bgpd, ospfd и др.), а также демон zebra, который непосредственно служит для формирования таблицы маршрутизации и перераспределения маршрутов между различными протоколами. Конфигурационные файлы quagga доступны в папке /etc/quagga. Ниже приведены конфигурационные файлы для всех трех маршрутизаторов, использованных на тестовом стенде. Сервер amalfi.netupПример файла zebra.conf: hostname amalfi password zebra enable password zebra log file /var/log/zebra.log interface eth0 interface eth1 ip forwarding line vty Пример файла bgpd.conf: hostname amalfi_bgpd password zebra router bgp 65001 bgp router-id 10.1.2.4 network 192.168.100.0/24 neighbor 10.1.2.8 remote-as 65002 log stdout Сервер sat.netupПример файла zebra.conf: hostname sat password zebra enable password zebra log file /var/log/zebra.log interface eth0 interface eth1 ip forwarding line vty Пример файла bgpd.conf: hostname sat_bgpd password zebra router bgp 65004 bgp router-id 172.16.103.2 network 172.16.101.0/24 neighbor 172.16.103.1 remote-as 65002 neighbor 172.16.101.1 remote-as 65003 log stdout Сервер streamer.netupПример файла zebra.conf: hostname streamer password zebra enable password zebra log file /var/log/zebra.log interface eth0 interface eth1 ip forwarding line vty no exec-timeout Пример файла bgpd.conf: hostname streamer_bgpd password zebra router bgp 65002 bgp router-id 10.1.2.8 network 172.16.100.0/24 network 172.16.102.0/24 network 172.16.103.0/24 neighbor 10.1.2.4 remote-as 65001 neighbor 172.16.102.2 remote-as 65003 neighbor 172.16.103.2 remote-as 65004 log stdout Запуск QuaggaПосле завершения настройки необходимо выполнить запуск соответствующих демонов командами: /etc/init.d/zebra start /etc/init.d/bgpd start Управление демонами возможно по протоколу telnet, аналогично управлению маршрутизатором cisco. Для этого необходимо подключиться к порту 2601 (для демона zebra) или к порту 2605 (для демона bgpd) и ввести соответствующие пароли, которые вы указали в конфигурационных файлах. Пример выполнения команды show ip route bgp на маршрутизаторе amalfi: amalfi# show ip route bgp
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
B>* 172.16.100.0/24 [20/0] via 10.1.2.8, eth0, 00:12:45
B>* 172.16.101.0/24 [20/0] via 10.1.2.8, eth0, 00:12:15
B>* 172.16.102.0/24 [20/0] via 10.1.2.8, eth0, 00:12:45
B>* 172.16.103.0/24 [20/0] via 10.1.2.8, eth0, 00:12:45
amalfi# exitНа показанном примере видно, что маршрутизатор успешно получил по протоколу BGP список всех доступных ему автономных систем. Тестирование работы протокола BGPПростой обмен информацией о маршрутахИтак, на стенде мы имеем два независимых маршрута от AS 65003 до AS 65001:
Первый маршрут доступен через интерфейс Ethernet0/0: interface Ethernet0/0 ip address 172.16.101.1 255.255.255.0 Второй маршрут, соответственно, через интерфейс Ethernet0/1: interface Ethernet0/1 ip address 172.16.102.2 255.255.255.0 Изначально оба маршрута работоспособны и, согласно алгоритму выбора маршрута (см. выше) должен быть выбран маршрут 2 (65002 -> 65001). Проверим это, воспользовавшись на маршрутизаторе Cisco командной traceroute: Router#traceroute 192.168.100.1 Type escape sequence to abort. Tracing the route to 192.168.100.1 1 172.16.102.1 12 msec 48 msec 0 msec 2 192.168.100.1 [AS 65001] 0 msec 0 msec 4 msec Теперь отключим короткий маршрут, для чего выключим на Cisco соответствующий сетевой интерфейс: interface Ethernet0/1 shutdown После этого весь трафик до AS 65001 должен пойти по резервному каналу. Проверим это с помощью команды traceroute: Router#traceroute 192.168.100.1 Type escape sequence to abort. Tracing the route to 192.168.100.1 1 172.16.101.2 0 msec 0 msec 0 msec 2 172.16.103.1 [AS 65002] 0 msec 56 msec 0 msec 3 192.168.100.1 [AS 65001] 4 msec 0 msec 4 msec После восстановления основного канала необходимо подождать некоторое время (около 5-10 секунд), прежде чем Cisco обнаружит, что соединение восстановилось. Индикатором этого служит следующая запись журнала: .Jan 2 13:33:15.448: %BGP-5-ADJCHANGE: neighbor 172.16.102.1 Up Как только маршрутизатор обнаружит восстановление основного канала, весь трафик снова пойдет по этому, более короткому пути. Использование «весов» маршрутовИногда использование длины маршрута в качестве основного критерия отбора неприемлимо. Так, например, у вас может быть два канала в Интернет - дешевый основной и дорогой резервный. При этом, маршрут по дешевому каналу длиннее. Что делать в этом случае? На помощь придет возможность указания весов маршрутов. Зададим длинному пути больший вес, чтобы он использовался в качестве основного. Для этого введем следующие команды: ! Входим в режим редактирования параметров BGP router bgp 65003 ! Задаем веса neighbor 172.16.101.2 weight 200 neighbor 172.16.102.1 weight 100 Теперь, в случае, когда доступно оба канала, маршрутизатор выберет более длинный маршрут, поскольку он имеет больший вес: Router#traceroute 192.168.100.1 Type escape sequence to abort. Tracing the route to 192.168.100.1 1 172.16.101.2 0 msec 0 msec 0 msec 2 172.16.103.1 [AS 65002] 0 msec 56 msec 0 msec 3 192.168.100.1 [AS 65001] 4 msec 0 msec 4 msec Введение ограничений на импорт и экспорт маршрутовОчень часто возникает необходимость ограничить список маршрутов, получаемых от того или иного BGP-узла. Действительно, любой узел может заявить, что через него доступна та или иная подсеть, при этом не предоставляя реального маршрута до указанной сети. Это делает реальной угрозу атак типа «отказ в обслуживании», спуфинга и других видов атак. Для защиты от этих проблем вам необходимо определить степень доверия к каждому из соседних BGP-узлов и, в соответствии с этим, ограничить список маршрутов, которые будут получены от него. Остальные маршруты будут проигнорированы. Ограничения по номеру автономной системы задаются с помощью списков доступа по параметру as-path: ip as-path access-list <идентификатор> permit <регулярное выражение> Здесь регулярное выражение задает шаблон, по которому будет срабатывать правило. Например, для ограничения по автономной системе 65004, выражение будет иметь вид ^65004$. Кроме того, можно добавить ограничение по адресу сети с помощью параметра prefix-list: ip prefix-list <имя> seq <номер> permit <адрес подсети> Где <имя> название списка адресов, <номер> порядковый номер записи в списке, < адрес подсети> адрес сети и маска. Теперь необходимо привязать списки к конкертному BGP-соседу. Ключевое слово “in” в настройках указывает на то, что правила фильтрации применяются к адресам анонсированным с данного маршрутизатора. В случае если указано ключевое слово “out”, то фильтры применяются к адресам анонсируемым нами на данный маршрутизатор. В режиме редактирования параметров BGP это можно сделать следующими командами: ! Для ограничения по автономным системам neighbor <адрес узла> filter-list <ID правила> ! Для ограничения по префиксу сети neighbor 10.1.2.4 route-map <имя route-map> in Посмотрим, как можно реализовать данный пример на нашем стенде. Для этого на маршрутизаторе streamer.netup введем ограничения на получаемые сети от маршрутизатора amalfi.netup. Разрешим анонсировать только сеть 192.168.100.0/24 и для большей наглядности настроим amalfi.netup на анонсирование новой, фиктивной сети 10.20.30.0/24. Для этого на streamer.netup изменим конфигурационный файл /etc/quagga/bgpd.conf следующим образом: router bgp 65002 bgp router-id 10.1.2.8 network 172.16.100.0/24 network 172.16.102.0/24 network 172.16.103.0/24 neighbor 10.1.2.4 remote-as 65001 neighbor 10.1.2.4 route-map AMALFI in neighbor 172.16.102.2 remote-as 65003 neighbor 172.16.103.2 remote-as 65004 ! ip prefix-list AMALFI_IP_LIST seq 6 permit 192.168.100.0/24 route-map AMALFI permit 10 match ip address prefix-list AMALFI_IP_LIST
router bgp 65001 bgp router-id 10.1.2.4 network 192.168.100.0/24 network 10.20.30.0/24 neighbor 10.1.2.8 remote-as 65002
streamer# show ip route bgp
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
B>* 172.16.101.0/24 [20/0] via 172.16.103.2, eth0, 00:02:20
B>* 192.168.100.0/24 [20/0] via 10.1.2.4, eth0, 00:02:24
ВыводыПротокол BGP замечательно выполняет задачи по управлению маршрутизацией в глобальных сетях, таких как Интернет. Тестирование показало быструю реакцию оборудования на потерю связи по тому или иному каналу, а также очень гибкие возможности настройки. А такая возможность как фильтрация принимаемых и отправляемых машрутов позволяет использовать BGP в качестве инструмента по оптимизации путей прохождения трафика в Интернете. Согласно данной статье очень удобно использовать протокол BGP для обеспечения резервирования Интернет-канала. Переключение между основным и резервным каналом происходит очень быстро, благодаря чему задержка в предоставлении услуги будет минимальной и пользователи провайдера по достоинству оценят качество сервиса. Ссылки
|
© 2003-2006 NetUP Inc. All Rights reserved. Тел: +7 (495) 543-9220 (многоканальный) +7 (495) 510-1025 (многоканальный) info@netup.ru |