ISP Servis: Настройка BGP na Linux a Bsd (Quagga)
Настройка BGP na Linux a Bsd (Quagga)
Установка Quagga достаточно простая, например, для пользователей OS Debian Linux достаточно ввести команду sudo apt-get install quagga, и пакет quagga будет установлен за несколько минут.
Все файлы конфигурации хранятся в /etc/quagga. Для запуска BGP нам понадобится работать с 3 файлами - daemons для выбора процессов, которые будут запускаться при старте quagga, zebra.conf
(файл, который отвечает за общую конфигурацию сетевых параметров), bgpd.conf (конфигурация самого bgpd процесса).
Ниже рассмотрим конфигурацию небольшого ISP, который имеет в наличие один border AS роутер и двух провайдеров, через которых проходит весь его трафик.
См. рисунок.
Daemons
Настройка daemons тривиальна - zebra=yes, bgpd=yes. Этим мы добились того, чтобы при старте через /etc/init.d/quagga start всегда запускались процессы zebra и bgpd.
zebra.conf
Синтаксис в zebra и bgpd очень близок Ciscо IOS
!
! Zebra configuration saved from vty
! 2010/08/19 21:29:23
!
hostname zebraAlex
password xxxxxxxxxxxxxx
enable password xxxxxxxxxxxxxx
log file /var/log/quagga/zebra.log
!
debug zebra events
debug zebra packet
!
interface eth0
ip address 192.168.255.25/29
ipv6 nd suppress-ra
!
interface eth1
ip address 10.10.10.102/30
ipv6 nd suppress-ra
!
interface eth2
ip address 109.205.240.1/24
ip address 109.205.245.1/24
ip address 109.205.246.1/24
ipv6 nd suppress-ra
!
ip route 109.205.240.0/21 Null0 254
!
ip forwarding
!
!
line vty
exec-timeout 0 0
Кто знаком с Cisco настройками, сразу определит, что мы имеем 3 ethernet интерфейса - eth0 и eth1 используются для соединения с нашими провайдерами, а eth2 смотрит внутрь нашей собственной сети, которая выглядит следующим образом - 109.205.240.0/21.
Команда ip route с направлением маршрута в Null означает, что при любых сбоях на физическом/сетевом уровнях наших интерфейсов, наша сеть будет для данного роутера всегда доступна и через BGP всегда будет
видна нашим соседям.
bgpd.conf
hostname AS12345
password xxxxxxxxxxxx
enable password xxxxxxxxxxx
log file /var/log/quagga/bgpd.log
log stdout
!
router bgp 12345
bgp router-id 192.168.255.25
bgp log-neighbor-changes
network 109.205.240.0/21
От поля router bgp до поля network указывается основная настройка BGP процесса.
12345 - номер AS который вы получите от RIPE NCC.
Bgp router-id - IP-адрес который вы получите от вашего провайдера, будет также использоваться как идентификатор BGP роутера. Network - показывает какой prefix будете анонсировать из вашей AS.
Далее следует настройка пиринг партнеров BGP -
neighbor 192.168.255.29 remote-as 11111
neighbor 192.168.255.29 description ISP1
neighbor 192.168.255.29 next-hop-self
neighbor 192.168.255.29 soft-reconfiguration inbound
neighbor 192.168.255.29 route-map ISP1-in in
neighbor 192.168.255.29 route-map ISP1-out out
neighbor 10.10.10.101 remote-as 22222
neighbor 10.10.10.101 description ISP2
neighbor 10.10.10.101 next-hop-self
neighbor 10.10.10.101 soft-reconfiguration inbound
neighbor 10.10.10.101 route-map ISP2-in in
neighbor 10.10.10.101 route-map ISP2-out out
Neighbor и все что дальше следует, является настройкой BGP соединения с каждым провайдером, в нашем случае 192.168.255.29 - это ISP1 и 10.10.10.101 - это ISP2.
Поля Neighbor 192.168.255.29, и далее - это настройка BGP соединения для первого ISP. В нашем случае это резервный канал, он же ISP1.
Password строка определяет MD5 пароль, который используется для BGP соединения. Пароль должен быть установлен как в нашей сети так и у ISP1.
Последние две строки - настройка двух route map для входящих и исходящих путей от/в ISP1.
Для всех полученных от ISP1 маршрутов используется правило ISP1-in, а для всех посланных ISP1 маршрутов используем ISP1-out.
Таким же способом настраиваем параметры BGP соединения для ISP2.
ip prefix-list bogons description bogus nets
ip prefix-list bogons seq 20 permit 127.0.0.0/8 le 32
ip prefix-list bogons seq 30 permit 10.0.0.0/8 le 32
ip prefix-list bogons seq 35 permit 172.16.0.0/12 le 32
ip prefix-list bogons seq 40 permit 192.168.0.0/16 le 32
ip prefix-list bogons seq 45 permit 169.254.0.0/16 le 32
ip prefix-list bogons seq 50 permit 224.0.0.0/4 le 32
ip prefix-list bogons seq 55 permit 240.0.0.0/4 le 32
ip prefix-list our-CIDR-blocks seq 5 permit 109.205.240.0/21 le 32
ip prefix-list upstream-out seq 10 permit 109.205.240.0/21
!
ip as-path access-list 1 permit _6451[2-9]_
ip as-path access-list 1 permit _645[2-9][0-9]_
ip as-path access-list 1 permit _64[6-9][0-9][0-9]_
ip as-path access-list 1 permit _65[0-9][0-9][0-9]_
Ip prefix list a ip-as path access list - команды для настройки фильтров.
В этом случае к фильтру bogons добавим все сети Bogon, которые не хотим принимать в нашу AS.
В as-path access-listu 1 определим номера приватных AS, которые нам также не нужны в нашем BGP маршрутизаторе.
route-map ISP1-in deny 100
match as-path 1
!
route-map ISP1-in deny 110
match ip address prefix-list bogons
!
route-map ISP1-in deny 120
match ip address prefix-list our-CIDR-blocks
!
route-map ISP1-in permit 200
set local-preference 100
!
route-map ISP1-out permit 100
match ip address prefix-list upstream-out
set as-path prepend 12345 12345 12345 12345 12345
!
route-map ISP1-out deny 200
Описание route map для ISP1-in-
по-порядку от самого низкого номера правила:
match as-path 1 - запрет приема в апдейтах роуты приватных AS номеров. См. ip as-path access-list 1
match ip address prefix-list bogons - запрет на прием приватных сетей IP
match ip address prefix-list our-CIDR-blocks - запрет на прием собственных адресов из Интернета
set as-path prepend - продлеваем путь к нашей сети через первого провайдера на 5 АС номеров. Т.е. все внешние BGP роутеры распознают этот маршрут как Backup.
set local-preference 100 - настроить для всего трафика, который будет проходить через ISP1 дальше в Интернет local-preference 100
Local-preference a weight - это параметры, используемые в BGP4 для контроля исходящего трафика внутри AS (local preference), или внутри одного роутера в случае с weight.
route-map ISP2-in deny 100
match as-path 1
!
route-map ISP2-in deny 110
match ip address prefix-list bogons
!
route-map ISP2-in deny 120
match ip address prefix-list our-CIDR-blocks
!
route-map ISP2-in permit 200
set local-preference 200
!
route-map ISP2-out permit 100
match ip address prefix-list ourIP
!
route-map ISP2-out deny 200
Описание route map для ISP2:
Речь пойдет о настройках для главного подключения.
Они схожи с настройками для резервного подключения, однако существуют два больших отличия.
a. не установлен as path prepending. Это означает, что внешние BGP роутеры распознают этот маршрут как наиболее короткий и пошлют сюда свой трафик.
b. все входящие маршруты полученные от ISP2 получат local preference 200, который выше чем у маршрутов резервного подключения, означает это, что исходящий трафик со всей AS будет передаваться через этот маршрут и этого пира.
Мы также можем установить set weight 200 - т.е. маршруты ISP2 получат высокий приоритет ещё и локально на роутере.
Мониторинг BGP
Сначала нужно подсоединиться к BGP процессу, для этого используется telnet localhost 2605. В случае надобности подсоединиться к zebra процессу используйте - telnet localhost 2601
Для мониторинга состояния нашего BGP соединения используются теже команды, что и в маршрутизаторах Cisco :
- show ip bgp summary - информация о состоянии нашего BGP маршрутизатора, где представлены общие сведения о наших пиринг партнерах, а именно IP адреса, номера AS, состояние соединения
- show ip bgp neighbors - подробная информация о наших пиринг партнерах (далее соседях)
- show ip bgp neighbors X.X.X.X - подробная информация о соединении с конкретным соседом
- show ip bgp neighbors X.X.X.X advertised-route - отобразит все исходящие сети посланные выбранному соседу
- show ip bgp neighbors X.X.X.X received-route - отобразит все сети полученные от выбранного соседа
- show ip bgp - отобразит все полученные нами маршруты
- show ip bgp Y.Y.Y.Y - отобразит все пути куда пойдет трафик до конкретного IP адреса Y.Y.Y.Y
- debug bgp updates - начнет отладку всех входящих и исходящих обновлений
- debug bgp events - наблюдать за всеми событиями BGP