Quagga linux ��� ���
Quagga is a routing software suite, providing implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. Quagga is a fork of GNU Zebra which was developed by Kunihiro Ishiguro.
The Quagga architecture consists of a core daemon, zebra, which acts as an abstraction layer to the underlying Unix kernel and presents the Zserv API over a Unix or TCP stream to Quagga clients. It is these Zserv clients which typically implement a routing protocol and communicate routing updates to the zebra daemon. Existing Zserv implementations are:
IPv4 | IPv6 | |
---|---|---|
zebra | — kernel interface, static routes, zserv server | |
ripd | ripngd | — RIPv1/RIPv2 for IPv4 and RIPng for IPv6 |
ospfd | ospf6d | — OSPFv2 and OSPFv3 |
bgpd | — BGPv4+ (including address family support for multicast and IPv6) | |
isisd | — IS-IS with support for IPv4 and IPv6 |
Quagga daemons are each configurable via a network accessible CLI (called a ‘vty’). The CLI follows a style similar to that of other routing software. There is an additional tool included with Quagga called ‘vtysh’, which acts as a single cohesive front-end to all the daemons, allowing one to administer nearly all aspects of the various Quagga daemons in one place.
Please see the Documentation for further detailed information. Community support is also available via the mailling lists.
Источник
Маршрутизация с Quagga
Статья опубликована в майском номере Системный Администратор
Современные сети не редко имеют сложную структуру, с несколькими шлюзами и точками подключения к Интернет. Использование Quagga поможет решить вопросы маршрутизации IP-пакетов в разветвленных сетях.
Как известно в Unix системах настройки статической маршрутизации производятся при помощи утилит iproute2 или route/ifconfig, входящих в стандартную поставку любого дистрибутива. Для сетей с относительно простой топологией в которых таблица маршрутизации постоянна или меняется редко, их возможностей вполне хватает.
В случае изменения маршрута (например, вышел из строя роутер) необходимые изменения в таблицы маршрутизации на шлюзах необходимо будет вносить вручную.
Конечно, можно написать простенький скрипт который будет проверять доступность некоторого узла и в случае необходимости изменять маршрут, но такой способ работает не всегда и очень неудобен.
В тоже время на сегодня доступны целый ряд протоколов динамической маршрутизации – RIP, OSPF, BGP, IGRP, EIRGP, IS-IS и другие, применение которых избавляет администратора от необходимости постоянной ручной корректировки маршрутов и отслеживания их актуальности. Такие протоколы позволяют маршрутизаторам сообщать друг другу информацию об актуальной топологии сети, позволяя маршрутизатору вычислить оптимальный маршрут. В качестве критерия используются самые разные параметры, которые зависят от выбранного протокола — количество промежуточных узлов, пропускная способности каналов, MTU, задержки и стоимость. В случае недоступности одного из роутеров, протоколы динамической маршрутизации позволяют автоматически корректировать таблицы маршрутов.
На сегодня выбор приложений поддерживающих динамические протоколы маршрутизации для Unix систем такой:
- nx-routed(The Nexus Routing Daemon) – поддерживает протокол RIPv2;
- OpenBGPD/OpenOSPFD– реализации протоколов BGPv4 и OSPF для OpenBSD;
- BIRD (BIRD Internet Routing Daemon)– поддерживает статическую маршрутизацию и протоколы BGPv4, RIPv2, OSPFv2/v3;
- Quagga — поддерживает статическую маршрутизацию и протоколы BGPv4 и v4+, RIP v1/v2/v3, OSPF v2/v3, IS-IS и маршрутизацию MIB (если SNMP демон поддерживает SMUX RFC1227).
При помощи любого из этих решений можно превратить обычный компьютер в полнофункциональный маршрутизатор. Так как в моем случае установка планировалась на Ubuntu Linux, то OpenBGPD был сразу отброшен. Вариант nx-routed малофункционален и к тому же проект практически заброшен. Остается BIRD и Quagga. В репозитарии Ubuntu Linux доступен лишь второй, но разработчики BIRD предлагают репозитарии и пакеты для Ubuntu/Debian (сборку из исходных текстов конечно же не исключаем). Например, для Ubuntu 9.10 его можно подключить, прописав в /etc/apt/source.list:
deb http://bird.network.cz/debian/ karmic main |
Но далее речь пойдет о Quagga.
Установка Quagga в Ubuntu Linux
Проект Quagga основан на коде другого подобного проекта GNU Zebra, который прекратил существование в 2005 году. Нужный пакет доступен в репозитариях большинства дистрибутивов Linux, а также в портах FreeBSD, OpenBSD, NetBSD. Интегрирован Quagga и в OpenSolaris. Чтобы установить Quagga в Ubuntu, достаточно ввести:
$ sudo apt-get install quagga quagga-doc |
После выполнения команды в каталоге /etc/quagga появится два конфигурационных файла. Здесь нужно отметить, что особенностью Quagga является запуск отдельного демона на каждый поддерживаемый протокол, базовое управление осуществляет демон zebra (core daemon), который представляет необходимые API остальным демонам и перестраивает таблицу маршрутизации. Статические маршруты устанавливаются также при помощи демона zebra. Такая схема позволяет при необходимости легко добавить поддержку другого протокола, но наличие нескольких процессов и конфигурационных файлов делает ее менее удобной для управления, ведь изначально команды демонам передаются при помощи telnet. Эту проблему решают при помощи терминала vtysh, который подключаясь к сокету каждого запущенного процесса Quagga выступает в качестве прокси для пользовательских команд.
В файле /etc/quagga/daemons как раз указывается, какие демоны будут загружаться, то есть протоколы будет поддерживать Quagga. По умолчанию все параметры установлены в no, и после установки ничего работать не будет.
Проверяем настройки Quagga
Далее для примера активируем лишь поддержку BGP и OSPF:
$ sudo nano /etc/quagga/daemons zebra=yes bgpd=yes ospfd=yes # протокол OSPF IPv6 ospf6d=no ripd=no # протокол RIPng IPv6 ripngd=no isisd=no |
Вместо буквенных обозначений предусмотрено и использование цифровых – 0 (отключено), до 1 (высокий приоритет) … 10 (наименьший приоритет).
Список TCP портов, на которых слушают подключения демоны, можно узнать, просмотрев /etc/services:
$ grep zebra /etc/services zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # RIPd vty (zebra) ripngd 2603/tcp # RIPngd vty (zebra) ospfd 2604/tcp # OSPFd vty (zebra) bgpd 2605/tcp # BGPd vty (zebra) ospf6d 2606/tcp # OSPF6d vty (zebra) ospfapi 2607/tcp # ospfapi (zebra) isisd 2608/tcp # ISISd vty (zebra) |
В Quagga реализовано два способа подачи рабочих параметров демонам – при помощи конфигурационных файлов и напрямую в терминальном режиме (terminal mode), подключившись к нужному порту. Обычно используют оба варианта, загружая начальные параметры при помощи файлов, а при необходимости настройки корректируются на лету. При этом установки в terminal mode также сохраняются в конфигурационные файлы, поэтому при перезагрузке таблица маршрутизации полностью восстанавливается.
Шаблоны файлов настроек демонов находятся в каталоге /usr/share/doc/quagga/examples, переименовываем и копируем их в /etc/quagga:
$ sudo cp –v /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf $ sudo cp –v /usr/share/doc/quagga/examples/bgpd.conf.sample /etc/quagga/bgpd.conf $ sudo cp –v /usr/share/doc/quagga/examples/ospfd.conf.sample /etc/quagga/ospfd.conf $ sudo cp –v /usr/share/doc/quagga/examples/vtysh.conf.sample /etc/quagga/vtysh.conf |
Также во время загрузки скрипт /etc/init.d/quagga устанавливает настройки работы демонов из файла /etc/quagga/debian.conf. По умолчанию для каждого демона указан режим работы “—daemon” и IP-адрес на котором он принимает подключения “-A 127.0.0.1”. Дополнительно пропишем параметры “—keep_kernel” и “—retain”, что позволит автоматически сохранять старые и новые маршруты, плюс укажем учетную запись quagga, от имени которой будут выполняться демоны:
vtysh_enable=yes zebra_options=” –daemon -A 127.0.0.1 -u quagga –keep_kernel –retain” bgpd_options=” –daemon -A 127.0.0.1 -u quagga –retain” ospfd_options=” –daemon -A 127.0.0.1 -u quagga” |
При установке при помощи пакетов в системе уже создается нужная учетная запись:
$ grep quagga /etc/passwd quagga:x:110:119:Quagga routing suite. /var/run/quagga/:/bin/false |
Иначе ее необходимо создать вручную. Обязательно изменим владельцев конфигурационных файлов:
$ sudo chown quagga:quagga /etc/quagga/zebra.conf $ sudo chown quagga:quagga /etc/quagga/ospfd.conf $ sudo chown quagga:quagga /etc/quagga/bgpd.conf |
Теперь можно запускать Quagga.
$ sudo /etc/init.d/quagga restart Starting Quagga daemons (prio:10): zebra bgpd ospfd. |
Команды “ps aux | grep quagga” и “netstat –ant | grep 260” должны показать, что соответствующие процессы запущены, и демоны слушают свои порты.
Конфигурационные файлы Quagga
Конфигурационные файлы Quagga содержат набор команд, которые выполняет демон после запуска. В большей части они по синтаксису совпадают с вводимым вручную в terminal mode. Комментарии указываются при помощи восклицательного “!” знака или решетки “#”. Для начала посмотрим zebra.conf:
$ sudo nano /etc/quagga/zebra.conf ! название шлюза hostname Router-01 ! пароль для vty, если пуст, подключиться нельзя password zebra ! пароль для режима администрирования/настроек enable password z3bRa ! в принципе двух предыдущий записей достаточно ! описание интерфейсов interface lo interface eth0 ! установка флага многоадресной рассылки и значение ширины канала в кб/сек ! для расчета стоимости multicast bandwidth 10000000 ! interface ppp0 ! статический маршрут ip route 10.0.0.0/0 eth0 ! ip route 0.0.0.0/0 1.2.3.4 ! файл журнала log file /var/log/quagga/zebra.log |
Проверяем наличие каталога /var/log/quagga и права, его владельцем должны быть пользователь и группа — quagga:quagga.
По умолчанию в файлах bgpd.conf и ospfd.conf снят комментарий лишь со строк установки пароля. Для примера настроим ospfd.conf.
$ sudo nano /etc/quagga/ospfd.conf ! включаем router ospf ! устанавливаем ID в качестве, которого используется IP-адрес ospf router-id 192.168.1.1 ! определяем интерфейсы для OSPF network 192.168.1.0/24 area 0 ! network 172.17.0.0/16 area 1 log file /var/log/quagga/ospfd.log |
Простой конфигурационный файл для настройки BGP выглядит аналогично. Но настройки этого протокола произведем при помощи командной строки.
Управление с консоли
Демоны Quagga поддерживают управление при помощи Cisco подобного синтаксиса. Все команды, введенные в консоли, сохраняются в конфигурационный файл (автоматически и по команде). Подключиться к рабочему демону можно при помощи telnet или vtysh. При использовании консоли vtysh сразу попадаем в режим управления. В случае telnet необходимо два раза ввести пароль.
$ sudo vtysh |
Список команд виртуальной консоли Quagga
Символ приглашения командной строки должен измениться. Чтобы получить список всех команд, достаточно нажать клавишу со знаком вопроса. Начинаем настройки:
# configure terminal |
В BGP под autonomous system понимают группу маршрутизаторов которые взаимодействуют между собой в одной административной области. Что позволяет использовать одновременно два и более подключения к Интернет, с распределением нагрузки между ними. Диапазон номеров AS 64512 – 65535 (RFC1930, сайт http://www.bgp4.as) выделен для внутреннего использования (private space). Удаляем предыдущую запись (номер ASN), если он не нужен, и создаем новый процесс со своим ASN (autonomous system number).
(config)# no router bgp 7675 (config)# router bgp 64512 (config-router)# bgp router-id 192.168.1.1 |
Анонсируем свои сети.
(config-router)# network 192.168.1.0/24 (config-router)# network 172.10.1.0/24 |
Объявляем соседей, указав IP и номер AS.
(config-router)# neighbor 10.0.0.5 remote-as 64513 (config-router)# neighbor 172.16.103.1 remote-as 65535 (config-router)# log file /var/log/bgp.log |
Выходим и записываем информацию.
(config-router)# end # write file Building Configuration… Integrated configuration saved to /etc/quagga/Quagga.conf |
Обратите внимание, что все настройки сохраняются в другой файл, поэтому всегда можно отследить установки сделанные из консоли.
Настройка остальных маршрутизаторов, как по протоколу BGP, так и OSPF производится аналогично. На самом деле параметров можно описать очень много и для каждого протокола будет своя специфика. Так дополнительно можно указать маршруты, которые мы не ходим получать, установить параметры доступа, разные способы анонсирования сетей, community и так далее.
Все команды, вводимые в консоли, вступают сразу в силу, при правке конфигурационных файлов требуется перезапуск Quagga. Теперь можно просмотреть маршруты:
# show ip route Codes: K – kernel route, C – connected, S – static, R – RIP, O – OSPF, I – ISIS, B – BGP, > – selected route, * – FIB route K>* 0.0.0.0/0 via 192.168.17.2, eth0 C>* 127.0.0.0/8 is directly connected, lo C>* 192.168.17.0/24 is directly connected, eth0 B>* 172.16.103.0/24 [20/0] via 192.168.1.1, eth0, 20:02:00 |
И так далее. Информация в выводе дает возможность разобраться в источнике нового маршрута и используемом при обмене протоколе. Соответственно если отключить один из маршрутизаторов, указание об анонсированных им сетях исчезнет из таблицы.
Таблицу по конкретному протоколу получаем в контексте “show ip”.
# show ip bgp # show ip ospf database |
Проверяем настройки интерфейсов, конфигурационные данные, статистика использования памяти:
# show interface # show running-config # show memory |
Все довольно просто. Чтобы разобраться, достаточно немного поэкспериментировать.
Проект Quagga в наследство от Zebra получил небольшой CGI скрипт написанный на Perl, реализующий простой веб-интерфейс позволяющий получать информацию о настройках (контекст “show ip”). Найти его можно в каталоге /usr/share/doc/quagga/tools вместе с еще несколькими скриптами. Но все они требуют доработки под свои нужды.
В итоге после относительно небольших настроек при помощи Quagga мы получим сеть маршрутизаторов взаимодействующих между собой строя динамические таблицы маршрутизации и подстраиваясь под изменения в сети. В статье показана очень самая простая схема, достаточная чтобы понять суть настроек. При необходимости ее легко дополнить и развить.
Источник