Июн 19 2009

Протокол динамической маршрутизации BGP. Настройка bgp в Quagga

Очень важным достоинством quagga или zebra, когда zebra развивалась на некоммерческой основе, является то, что синтаксис у нее полностью совместим с синтаксисом CLI Cisco и когда наконец то заработала командная строка quagga, называемая vtysh, удобство настройки quagga стало максимальным. В этой статье я коснусь только самых основ настройки bgp сессий, а в следующих статьях, уже разберем вполне работоспособные примеры.

Для начала установим quagga:

cd /usr/ports/net/quagga
make install clean

в меню настройки порта выберем только последний пункт, а именно использование dmalloc, этот пункт рекомендуют для ускорения работы quagga, диалог будет иметь такой вид:

 ┌────────────────────────────────────────────────────────────────────┐
 │                    Options for quagga 0.99.12                      │
 │ ┌────────────────────────────────────────────────────────────────┐ │
 │ │  [ ] ISISD            Enable experimental ISIS daemon          │ │
 │ │  [ ] PAM              PAM authentication for vtysh             │ │
 │ │  [ ] OSPF_NSSA        NSSA support (RFC1587)                   │ │
 │ │  [ ] OSPF_OPAQUE_LSA  OSPF Opaque-LSA support (RFC2370)        │ │
 │ │  [ ] RTADV            IPv6 Router Advertisements               │ │
 │ │  [ ] SNMP             SNMP support                             │ │
 │ │  [ ] TCPSOCKETS       Use TCP/IP sockets for protocol daemons  │ │
 │ │  [X] DLMALLOC         Use dlmalloc (makes bgpd much faster)    │ │
 │ │                                                                │ │
 │ │                                                                │ │
 ├─└────────────────────────────────────────────────────────────────┘─┤
 │                       [  OK  ]       Cancel                        │
 └────────────────────────────────────────────────────────────────────┘

Теперь разрешим запуск:

echo "quagga_enable=YES" >> /etc/rc.conf
echo 'quagga_daemons="zebra bgpd"' >> /etc/rc.conf

А перед запуском из директории с примерами конфигов скопируем bgpd.conf.sample, vtysh.conf.sample и zebra.conf.sample

cd /usr/local/etc/quagga/
cp /usr/local/share/examples/quagga/bgpd.conf.sample ./bgpd.conf
cp /usr/local/share/examples/quagga/vtysh.conf.sample ./vtysh.conf
cp /usr/local/share/examples/quagga/zebra.conf.sample ./zebra.conf

и запустим quagga:

/usr/local/etc/rc.d/quagga start

После того, как вы запустите quagga, можно переходить к настройке, для этого я предпочитаю использовать vtysh.
Запустим его:

vtysh

появится командная строка в которой можно начинать настройку.
А прежде чем начать настройку, чуть чуть теории, самый минимум. BGP — аббревиатура означающая протокол граничных маршрутизаторов
Маршрутизация в интернет основана на протоколе bgp, обмен информации о маршрутах происходит между граничными маршрутизаторами автономных систем. Автономная система или AS, это совокупность сетей объедененных под одним управлением и имеющий выделенный идентификатор. Идентификатор — это целое число, которое как и ip в европе выдает RIPE. Для своих тренировок мы воспользуемся специально зарезервироваными номерами AS для локальных сетей. Схема взаимодействия двух автономных систем будет выглядеть так:

bgp

Поскольку это взаимодействие граничных маршрутизаторов, то между ними сеть будет 192.168.0.0/30, этого достаточно для построения взаимодействия.
Поскольку со схемой, принципами и терминологией разобрались приступим к настройке первого маршрутизатора, анонсирующего сеть 192.168.1.0/24 под автономной системой 65534 и интерфейсом взаимодействия с пиром 192.168.0.1, второй интерфейс его соответственно является шлюзом для сети 192.168.1.0/24
В командной строке vtysh начнем последовательно вводить команды:

configure terminal
no router bgp  7675
router bgp 65534
bgp router-id 192.168.0.1
network 192.168.1.0/24
neighbor 192.168.0.2 remote-as 65535
neighbor 192.168.0.2 soft-reconfiguration inbound
write memory

Команда no router bgp 7675 удалает конфигурацию bgp созданную по умолчанию в файле примере bgpd.conf
Теперь переходим ко второму маршрутизатору, на нем точно так же должна быть установлена и запущена quagga.

configure  terminal
no router bgp  7675
router bgp  65535
bgp  router-id  192.168.0.2
network  192.168.2.0/24
neighbor  192.168.0.1 remote-as  65534
neighbor 192.168.0.1 soft-reconfiguration inbound
write memory

Теперь на первом роутере выходим из режима настройки bgp сессии нажатием комбинации Ctrl-Z и оставшись в командной строке vtysh выполнить немного команд что бы убедится в том что сессия установилась:

show ip bgp summary

Увидим такой вывод этой комманды:

BGP router identifier 192.168.0.1, local AS number 65534
RIB entries 3, using 192 bytes of memory
Peers 1, using 2520 bytes of memory
 
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.2     4 65535       5      11             0         0    0      00:03:04        1
 
Total number of neighbors 1

В этой информации видно что мы приняли 1 префикс(одну сеть) от нашего партнера 192.168.0.2 с удаленной автономной системы 65535. Настройки сделаны правильно.

Подробную информацию о партнере по bgp можно увидеть так:

show ip bgp neighbors 192.168.0.2

И подробная информация выглядит так:

BGP neighbor is 192.168.0.2, remote AS 65535, local AS 65534, external link
  BGP version 4, remote router ID 192.168.0.2
  BGP state = Established, up for 00:08:29
  Last read 00:00:29, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    Route refresh: advertised and received(old & new)
    Address family IPv4 Unicast: advertised and received
  Message statistics:
    Inq depth is 0
    Outq depth is 0
                         Sent       Rcvd
    Opens:                  5          0
    Notifications:          0          0
    Updates:                1          1
    Keepalives:            10          9
    Route Refresh:          0          0
    Capability:             0          0
    Total:                 16         10
  Minimum time between advertisement runs is 30 seconds
 
 For address family: IPv4 Unicast
  Community attribute sent to this neighbor(both)
  1 accepted prefixes
 
  Connections established 1; dropped 0
  Last reset never
Local host: 192.168.0.1, Local port: 179
Foreign host: 192.168.0.2, Foreign port: 59783
Nexthop: 192.168.0.1
Nexthop global: fe80::21c:f0ff:fe9e:56ba
Nexthop local: ::
BGP connection: non shared network
Read thread: on  Write thread: off

Тут мы видим, что BGP state = Established, up for 00:08:29 — состояние сессии установлено 8 минут 29 секунд назад, Видим локальную автономную систему и удаленную, к слову сказать эта информация повторяет инофрмацию на маршрутизаторах Cisco, а там можно держать не одну автономку, а много и информация по локальному асу для определенного нейджбора является полезной. Далее видим что приняли 1 сеть(префикс): 1 accepted prefixes и видим
Nexthop, следующий адрес в маршруте. В общем все нормально.
Теперь проверим анонс какой же сети мы принимаем:

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>* 192.168.2.0/24 [20/0] via 192.168.0.2, em0, 00:19:40

Тут мы видим что 192.168.2.0/24 анонсирована по протоколу bgp через маршрутизатор 192.168.0.2, маршрут известен 00:19:40.
И выйдя из vtysh нажатием Ctrl-D можно проверить таблицу маршутизации хоста:

netstat -rn

и увидим:

192.168.2.0/24     192.168.0.2        UG1         0       51    em0

Сеть попала в таблицу маршрутизации роутера. Все настроено.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Plastilin, 29.08.2009 @ 21:27

    А не смотрели в сторону Vyatta?

  • By hilik, 31.08.2009 @ 11:05

    Не смотрел.

  • By hilik, 04.09.2009 @ 10:44

    Начал разбираться с Vyatta. Скоро думаю пойдет цикл статей о ней, если конечно она стоит того.

  • By ayava, 21.10.2009 @ 19:22

    А можно это сделать когда у меня 20 разных подключений по нашей родине у 10 разных провайдеров?

  • By hilik, 22.10.2009 @ 12:24

    Теоретически можно. Одно из самых простых решений, это объединение разорванных сегментов вашей автономной системы, через туннели. Правда обслуживать такую автономную систему будет ох как не просто. Есть еще варианты, но я их на вскидку не вспомню. Поскольку управляю обычной автономной системой и доступ к региональным представительствам, организовуется с помощью L2 транспортов.

Other Links to this Post


Украинская Баннерная Сеть