Quagga - расширенный пакет программ маршрутизации, который обеспечивает реализацию протоколов маршрутизации, основанных на TCP/IP. Этот документ - руководство для quagga-0.96. Quagga - ответвление GNU Zebra. 1. Введение 2. Установка 3. Основные команды 4. Zebra 5. RIP 6. OSPFv2 7. OSPFv3 1. Введение ----------- Quagga - пакет программ, реализующих протоколы маршрутизации, основанных на TCP/IP и поддерживает такие протоколы как RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP-4, and BGP-4+ (см. раздел 1.4 Поддерживаемые RFC). Quagga также поддерживает BGP Route Reflector и Route Server behavior. В дополнение к традиционному протоколу IPv4 Quagga также поддерживает протоколы маршрутизации для IPv6. Совместно с демоном SNMP, который поддерживает SMUX протокол, Quagga обеспечивает протокол маршрутизации MIBs (см. раздел 15. Поддержка SNMP). Quagga использует расширенную программную архитектуру для того, чтобы предоставить Вам качественный механизм маршрутизации. Quagga имеет интерактивный интерфейс пользователя для каждого протокола маршрутизации и поддерживает общие клиентские команды. Вы можете использовать библиотеку Quagga для написания собственных программ. Zebra поставляется по лицензии GNU General Public License. 1.1 Начальная информация о Quagga 1.2 Системная архитектура 1.3 Поддерживаемые платформы 1.4 Поддерживаемые RFC 1.5 Где взять Quagga 1.6 Списки рассылки 1.7 Bug Reports 1.1 Начальная информация о Quagga --------------------------------- Сегодня сети TCP/IP повсеместно распространены. Internet проник в страны, компании и дома. Когда Вы подключаетесь к Internet, то информация проходит через бесчисленные толпы безвестных маршрутизаторов. Quagga позволяет отсуществить функции маршрутизации на отдельно взятом компьютере, обмениваясь маршрутной информацией с соседями и соответствующим образом изменяя таблицу маршрутов ядра. Вы имеете возможность динамически изменять конфигурацию Quagga и просматривать информацию о текущей конфигурации. В дополнение к реализации протоколов маршрутизации, Quagga может добавлять статические маршруты, адреса интерфейсов и специфические флаги интерфейсов. Конфигурирование Quagga в случае малой сети, сети xDSL или кампусной сети не отличается сложностью. Единственная вещь, которую Вы должны сделать, это настроить адреса сетевых интерфейсов, указать несколько статичных маршрутов и настроить маршрут по умолчанию. Если сеть является довольно большой, или если сетевая структура довольно часто изменяется, возможно Вы захотите использовать протоколы динамической маршрутизации типа RIP, OSPF или BGP. Традиционно настройка маршрутизации в UNIX осуществляется с помощью команд ifconfig и route. Состояние таблицы маршрутизации отображается утилитой netstat. В большинстве случаев использование этих утилит требует полномочий пользователя root. Quagga имеет совершенно иной принцип управления. Существуют два различных режима - normal mode и enable mode. В режиме normal возможен лишь просмотр текущей конфигурации, в режиме enable возможно изменение конфигурации. Эти режимы, не зависящие от учетных записей UNIX, будут большим подспорьем администраторам в плане увеличения безопасности. В настоящее время Quagga поддерживает общие unicast протоколы маршрутизации. Multicast протоколы, типа BGMP, PIM-SM, PIM-DM может быть будут поддерживаться в Quagga 2.0. Грядет поддержка MPLS, фильтрация TCP/IP, поддержка QoS 1.2 Системная архитектура ------------------------- Традиционное программное обеспечение маршрутизации сделано как одна программа, которая обеспечивает все функциональные возможности протокола маршрутизации. Quagga использует несколько другой подход. Каждый протокол маршрутизации обслуживается отдельным демоном, с последующим формированием таблиц маршрутизации. Одновременно работать могут несколько разынх демонов в сообществе с управляющим демоном zebra. ripd демон обрабатывает протокол RIP, в то время как ospfd - демон, который поддерживает OSPF v 2. bgpd поддерживает протокол BGP-4. Демон zebra служит для формирования таблицы маршрутизации и перераспределения маршрутов между различными протоколами. Совсем необязательно, чтобы демоны выполнялись на одной и машине. Вы можете даже запустить несколько одинаковых демонов на одной машине, что открывает большие перспективы. +----+ +----+ +-----+ +-----+ |bgpd| |ripd| |ospfd| |zebra| +----+ +----+ +-----+ +-----+ | +---------------------------|--+ | v | | UNIX Kernel routing table | | | +------------------------------+ Quagga System Architecture Благодаря разделяемой архитектуре повышается расширяемость, модульность и ремонтопригодность. В тоже время возникает проблема большого числа файлов конфигурации. Каждый демон имеет свой собственный файл конфигурации и терминальный интерфейс. Когда Вы конфигурируете статический маршрут, это должно быть сделано в файле конфигурации zebra, а при конфигурировании маршрутов BGP - в файле конфигурации bgpd. Это может сильно раздражать. Для решения данной проблемы может быть использован vtysh, оболочка, которая соединяется с демонами посредством сокетов UNIX и работает как прокси-сервер для пользовательского ввода. Quagga планировалась как мультипоточная программа, и нацелена на работу с ядром с ядром, которое поддерживает процессы с параллельными потоками команд. Но в настоящее время есть некоторые проблемы с библиотеками, идущими с GNU/Linux или FreeBSD, поэтому мультипоточность была отключена. Когда zebra работает под ядром GNU Hurd, она действует непосредственно как таблица маршрутизации ядра. В GNU Hurd все сервисы TCP/IP обеспечиваются пользовательским процессом pfinet. Quagga обеспечит все механизмы выбора маршрутизации для процесса. Эта возможность будет реализована, когда GNU Hurd перейдет в версию stable. 1.3 Поддерживаемые платформы ---------------------------- В настоящее время Quagga выполняется на GNU/Linux, BSD и Solaris. Ниже представлен список версий ОС, Портирование ее на другие платформы не является чем-то сложным. Пожалуйста сообщите нам, когда Вы узнаете, что Quagga выполняется на платформе, которая не упомянута ниже. * GNU/Linux 2.0.37 * GNU/Linux 2.2.x * GNU/Linux 2.3.x * FreeBSD 2.2.8 * FreeBSD 3.x * FreeBSD 4.x * NetBSD 1.4 * OpenBSD 2.5 * Solaris 2.6 * Solaris 7 Поддержка некоторых реализаций IPv6 находится в развитии. Quagga поддерживает нижеприведенные стеки IPv6. Для BSD-систем рекомендуется KAME IPv6, Solaris IPv6 не поддерживается. * Linux IPv6 stack for GNU/Linux 2.2.x and higher. * KAME IPv6 stack for BSD. * INRIA IPv6 stack for BSD. 1.4 Поддерживаемые RFC ---------------------- Ниже приводится список поддерживаемых RFC RFC1058 Routing Information Protocol. C.L. Hedrick. Jun-01-1988. RF2082 RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997. RFC2453 RIP Version 2. G. Malkin. November 1998. RFC2080 RIPng for IPv6. G. Malkin, R. Minnear. January 1997. RFC2328 OSPF Version 2. J. Moy. April 1998. RFC2740 OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999. RFC1771 A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995. RFC1965 Autonomous System Confederations for BGP. P. Traina. June 1996. RFC1997 BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996. RFC2545 Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P. Marques, F. Dupont. March 1999. RFC2796 BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R. Chandrasekeran. June 1996. RFC2858 Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D. Katz. June 2000. RFC2842 Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000. When SNMP support is enabled, below RFC is also supported. RFC1227 SNMP MUX protocol and MIB. M.T. Rose. May-01-1991. RFC1657 Definitions of Managed Objects for the Fourth Version of the Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss, J. Chu, Editor. July 1994. RFC1724 RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994. RFC1850 OSPF Version 2 Management Information Base. F. Baker, R. Coltun. November 1995. 1.5 Где взять Quagga -------------------- Quagga - все еще бета-версия программного обеспечения и нет официально выпущенной версии. Но однажды Quagga будет выпущена и Вы сможете получить ее с GNU FTP и официальных зеркал. Мы планируем Quagga-1.0 как перваую выпущенную версию. Официальная web-страница Zebra расположена здесь: http://www.gnu.org/software/zebra/zebra.html. Первоначальный сайт Zebra расположен здесь: http://www.zebra.org/. С этой записи, развитие Zebra на zebra.org замедлилось. Некоторая работа делается третьими лицами, что привело к образованию проекта Quagga, см.: http://www.quagga.net/ для более подробной информации, так же как ссылок на дополнительные ресурсы Zebra. 1.6 Списки рассылки ------------------- У Quagga есть собственный список рассылки. Если у Вас есть комментарии и предложения, то подпишитесь пожалуйста на http://lists.quagga.net/mailman/listinfo/quagga-users Также имеется дополнительный список рассылки, [11]ZNOG, для общих дискуссий касательно zebra и работы сетей. Для того, чтобы подписаться, просто отправьте письмо по адресу [email protected] c текстом "subscribe znog". Соответственно, для прекращения подписки, отправьте письмо на адрес [email protected] c текстом "unsubscribe znog". Дополнительно Вы можете использовать Web-интерфейс по адресу http://www.dishone.st/mailman/listinfo/znog 1.7 Bug Reports --------------- Если в процессе эксплуатации Вы обнаружили ошибку, сообщите о ней в [email protected] Когда Вы посылаете сообщение об ошибках, пожалуйста будьте внимательны к нижеприведенным пунктам. * Какую операционную систему Вы используете. Если Вы используете IPv6, не забудьте указать и это. * Пожалуйста, покажите нам результаты выполнения netstat -rn и ifconfig -a. Информация с VTY show ip route также может оказаться полезной. * Пожалуйста, пошлите ваш файл конфигурации. Сообщения об ошибках очень важны для улучшения качества Quagga. Quagga находится все еще в стадии разработки, но пожалуйста пошлите сообщение об ошибках на [email protected]. 2. Установка ------------ Есть три этапа для того, чтобы установить программу: конфигурирование, компилирование и установка. В самом простом случае, получить запускаемую Quagga можно выполнив следующие команды: % configure % make % make install 2.1 Конфигурирование -------------------- Quagga имеет превосходный сценарий выбора конфигурации, который автоматически обнаруживает большинство конфигураций хоста. Есть несколько дополнительных вариантов выбора конфигурации, которые Вы можете использовать, чтобы выключить поддержку IPv6, отключить компиляцию определенных демонов, и включить поддержку SNMP. `--enable-guile' Включить интерпретатор zebra-guile. Для этого Вам может понадобиться библиотека guile. zebra-guile еще не закончена, поэтому включение этой опции имеет смысл только для разработчика. `--disable-ipv6' Отключить поддержку IPv6 в демонах. Quagga при конфигурировании автоматически обнаружит IPv6, но иногда бывают случаи, когда Вы захотите отключить поддержку IPv6 в Quagga. `--disable-zebra' Не собирать демон zebra. `--disable-ripd' Не собирать демон ripd. `--disable-ripngd' Не собирать демон ripngd. `--disable-ospfd' Не собирать демон ospfd. `--disable-ospf6d' Не собирать демон ospf6d. `--disable-bgpd' Не собирать демон bgpd. `--disable-bgp-announce' Собрать bgpd, который вообще не делает bgp объявления. Это хорошо в том случае, когда bgpd используется только для прослушивания чужих анонсов BGP. `--enable-netlink' Включить интерфейс GNU/Linux netlink. Quagga в ходе конфигурации автоматически определит интерфейс netlink при проверке файлов заголовков. Когда файл заголовка не соответствует выполняемому в настоящий момент ядру, конфигурирующий скрипт не включит поддержку netlink. `--enable-snmp' Включить поддержку SNMP. по умолчанию поддержка SNMP выключена. `--enable-nssa' Включить поддержку Not So Stubby Area (см. RC3101) в ospfd. `--enable-opaque-lsa' Включить поддержку Opaque LSAs (RFC2370) в ospfd. `--disable-ospfapi' Выключить поддержку OSPF-API, API для доступа непосредственно к ospfd. OSPF-API включается, если включена --enable-opaque-lsa. `--disable-ospfclient' Выключить сборку примера клиента OSPF-API. `--enable-ospf-te' Включить поддержку OSPF Traffic Engineering Extension (internet-draft), что требует поддержки Opaque LSAs. `--enable-multipath=ARG' Включить поддержку Equal Cost Multipath. Где ARG максимальное число ECMP принимаемых путей, установите в 0 для снятия ограничений. `--enable-rtadv' Включить поддержку обьявлений IPV6 в zebra. Вы можете использовать любую комбинацию конфигурационных параметров. По умолчанию, выполняемые программы помещаютя в '/usr/local/sbin', а файлы конфигурации в '/usr/local/etc'. Инсталляционный префикс `/usr/local / ' и другие пути могут быть изменены, используя следующие варианты в сценарии конфигурации. `--prefix=prefix' Установить архитектурно-независимые файлы в [/usr/local]. `--sysconfdir=dir' Каталог, в котором будут искаться файлы конфигурации [prefix/etc]. Обратите внимание, что файлы примеров также будут находиться здесь. `--localstatedir=dir' Конфигурировать zebra для использования каталога под такие нужды, как размещение файлов pid и unix sockets. Дополнительно, Вы можете использовать нижеприведенные параметры для понижения привелегий процесса после запуска и преключения на выполнение от имени другого пользователя. Есть три варианта, служащих для управлением поведением zebra. `--enable-user=user' Переключиться на указанную учетную запись вскоре после запуска и использовать ее для выполнения операций. `--enable-group=group' Переключить группу в group после запуска. `--enable-vty-group=group' Открыть Unix Vty sockets (при использовании vtysh) с определенными правами. Это позволяет создать выделенную группу, которой предоставлен доступ только к Vty sockets, следовательно, становиться возможным делегировать эту группу индивидуальным пользователям, или выполнить vtysh setgid к этой группе. По умолчанию пользователь и группа определяются ка 'quagga', в том случае, если не указано иное. Обратите внимание, что данный пользователь и группа должны иметь права на запись в каталог локального состояния (см. --localstatedir). Если Вы хотите позволить демонам записывать свою конфигурацию, то на каталог с конфигурационными файлами (см. --sysconfdir). должны быть установлены права на чтение и запись. На операционных системах, имеющих библиотеку 'libcap' (в настоящее время только linux), quagga сохранит только минимальные требуемые возможности, и затем на краткие периоды будет их повышать. На системах без libcap, quagga будет работать как указанный пользователь и только на короткиое время будет работать под uid 0. % ./configure --disable-ipv6 Эта команда произведет конфигурирование zebra и демонов маршрутизации. 2.2 Сборка ---------- После конфигурирования программного обеспечения, Вы будете должны cкомпилировать его. Просто выполните команду make с правами пользователя root в каталоге исходных текстов программы. Если у Вас появились сообщения о ЛЮБЫХ ошибках на этой стадии, отправьте пожалуйста отчет об ошибке (см. раздел 1.7 Bug Reports). % ./configure . . . ./configure output . . . % make 2.3 Установка ------------- Установка программного обеспечения состоит из копирования откомпилированных файлов и файлов конфигурации в указанные каталоги. После того, как инсталляционный процесс будет завершен, эти файлы будут скопированы из рабочего каталога в '/usr/local/bin', и '/usr/local/etc' (Пр.п. - если не указаны другие см. раздел 2.1). Для установки программнного обеспечения выполните команду make install. % make install Демоны Quagga имеют собственный оконечный интерфейс или VTY. После установки для каждой службы выделяется собственный номер порта. Пожалуйста добавьте следующие строки к `/etc/services'. zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # RIPd vty ripngd 2603/tcp # RIPngd vty ospfd 2604/tcp # OSPFd vty bgpd 2605/tcp # BGPd vty ospf6d 2606/tcp # OSPF6d vty 3. Основные команды ------------------- Есть пять демонов маршрутизации и есть один управляющий демон, причем демоны маршрутизации могут располагаться на удаленных машинах. Каждый из этих демонов будет ожидать запроса на соединение с VTY на определенном порту. * ripd, ripngd, ospfd, ospf6d, bgpd * zebra Следующие разделы обсуждают команды, типичные для всех демонов маршрутизации. 3.1 Команды конфигурирования 3.2 Параметры вызова 3.3 Virtual Terminal Interfaces 3.1 Команды конфигурирования ---------------------------- 3.1.1 Начальные команды конфигурирования 3.1.2 Пример файла конфигурации В файле конфигурации Вы можете записать варианты отладки, пароль vty, конфигурация демонов маршрутизации, имя файла журнала, и т.д. Эта информация формирует начальную конфигурацию, необходимую для запуска маршрутизации. Файлы конфигурации, в общем случае, находятся в * `/usr/local/etc/*.conf' Каждый из демонов имеет собственный файл конфигурации. Например, заданное по умолчанию имя файла конфигурации zebra: * `/usr/local/etc/zebra.conf' Добавление к имени демона `.conf' определяет название файла конфигурации по умолчанию. Вы можете задать другое имя, используя опцию -f или --config-file при запуске. 3.1.1 Начальные команды конфигурирования ---------------------------------------- Command: hostname hostname {} Установить имя хоста. Command: password password {} Установить пароль на vty. Если пароль не установлен, vty не будет принимать подключения. Command: enable password password {} Установить пароль на режим enable. Command: log stdout {} Command: no log stdout {} Установить режим ведения логов в stdout. Command: log file filename {} Если Вы хотите записывать логи в файл, определите его имя. log file /usr/local/etc/bgpd.log Command: log syslog {} Command: no log syslog {} Установить режим ведения логов в syslog. Command: write terminal {} Отображает текущую конфигурацию на vty. Command: write file {} Записывает текущую конфигурацию в файл. Command: configure terminal {} Переход в режим конфигурации. Эта команда является первым шагом конфигурации. Command: terminal length <0-512> {} Установить длину строки терминала <0-512>. Если длина 0, ограничения нет. Command: who {} Command: list {} Список доступных команд. Command: service password-encryption {} Шифрование пароля. Command: service advanced-vty {} Установить расширенный режим VTY. Command: service terminal-length <0-512> {} Установить длину строки терминала <0-512>. Эта команда конфигурации применяется ко всем интерфейсам VTY. Command: show version {} Показывает текущую версию Quagga и информацию по хосту. Command: line vty {} Enter vty configuration mode. Command: banner motd default {} Установить строку приветствия motd. Command: no banner motd {} Не отображать приветствие motd. Line Command: exec-timeout minute {} Line Command: exec-timeout minute second {} Установить значение таймаута для VTY. Когда используется один аргумент, то его размерностью является минуты. Заданное по умолчанию значение времени ожидания - 10 минут. Когда значение времени ожидания является нулевым, то таймаута не происходит. Line Command: no exec-timeout {} Отключить таймаут. Эта команда аналогична exec-timeout 0 0. Line Command: access-class access-list {} Ограничить подключения к vty списком доступа. 3.1.2 Пример файла конфигурации ------------------------------- Ниже приведен типовой файл конфигурации демона zebra: ! Zebra configuration file ! hostname Router password zebra enable password zebra ! log stdout ! ! ! и # считаются символами комментаря и строка, начинающаяся с этого символа, считается комментарием password zebra!password Если симфол коменнтария не первый в строке, то он считается обычным символом. Так, в вышеупомянутом примере '!' не будет считаться за комментарий и пароль будет установлен в 'zebra!password'. 3.2 Параметры вызова -------------------- Эти опции принимаются всеми демонами Quagga: `-d' `--daemon' Запуск в режиме демона. `-f file' `--config_file=file' Установить имя конфигурационного файла. `-h' `--help' Отобразить этот список и выйти. `-i file' `--pid_file=file' После запуска идентификатор процесса демона записывается в файл, обычно в каталог `/var/run'. Этот файл может использоваться системой init для выполнения таких команд, как .../init.d/zebra status, .../init.d/zebra restart или .../init.d/zebra stop. `-A address' `--vty_addr=address' Установить локальный адрес для VTY. Если установлен, то сокет для VTY будет открыт только по этому адресу. `-P port' `--vty_port=port' Установить TCP-порт VTY. Если установлен в 0, то TCP сокет для VTY не будет открыт. `-u user' `--vty_addr=user' Установить пользователя и группу, от которой будет осуществлен запуск. `-v' `--version' Вывести версию программы. 3.3 Virtual Terminal Interfaces ------------------------------- VTY -- Virtual Terminal [aka TeletYpe] Interface - это командный интерфейс (CLI) для взаимодействия пользователя с демонами маршрутизации. 3.3.1 Введение в VTY 3.3.2 Режимы VTY 3.3.3 Команды CLI VTY 3.3.1 Введение в VTY -------------------- VTY расшифровывается как Virtual TeletYpe. Это означает, что Вы можете соединиться с демоном через протокол telnet. для активации VTY Вы должны установить пароль на VTY. Если пароль VTY не установлен, то способа соединиться с VTY нет. % telnet localhost 2601 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello, this is zebra (version 0.96) Copyright 1997-2000 Kunihiro Ishiguro User Access Verification Password: XXXXX Router> ? enable Turn on privileged commands exit Exit current mode and down to previous mode help Description of the interactive help system list Print command list show Show running system information who Display who is on a vty Router> enable Password: XXXXX Router# configure terminal Router(config)# interface eth0 Router(config-if)# ip address 10.0.0.1/8 Router(config-if)# ^Z Router# '?' является очень полезным при поиске нужной команды. 3.3.2 Режимы VTY ---------------- Есть три режима VTY: 3.3.2.1 [VTY View Mode ]--- Режим только для чтения 3.3.2.2 [VTY Enable Mode]--- Режим чтения-записи 3.3.2.3 [VTY Other Modes]--- Специальный режим (tftp, etc) Есть команды, которые могут быть ограничены определенным режимам VTY. 3.3.2.1 VTY View Mode - Доступ только на чтение CLI. Вы можете перейти в другой режим, использовав команду 'enable'. 3.3.2.2 VTY Enable Mode - Полный доступ. Вы можете покинуть этот режим выйдя из CLI или перейдя в VTY View Mode 3.3.2.3 VTY Other Modes - Вот сейчас то мы их и рассмотрим. 3.3.3 Команды CLI VTY --------------------- Команды, которые Вы можете использовать в режиме командной строки, описаны в следующих трех подразделах. 3.3.3.1 [CLI Movement Commands]--- Команды перемещения курсора 3.3.3.2 [CLI Editing Commands ]--- Команды работы с текстом 3.3.3.3 [CLI Advanced Commands]--- Прочие команды, управление сессией и др. 3.3.3.1 CLI Movement Commands Эти команды используются для перемещения курсора в CLI. C соответствует клавише Ctrl. C-f RIGHT Вперед на один символ. C-b LEFT Назад на один символ. M-f Вперед на одно слово. M-b Назад на одно слово. C-a В начало строки. C-e В конец строки. 3.3.3.2 CLI Editing Commands Эти команды используются для редактирования текста в строке. C соответствует клавише Ctrl. C-h DEL Удалить символ слева от курсора. C-d Удалить символ справа от курсора. M-d Удалить слово справа от курсора. C-w Удалить слово слева от курсора. C-k Удалить до конца строки. C-u Удалить строку от начала, включая позицию курсора. C-t Переместить символ. 3.3.3.3 CLI Advanced Commands Это дополнителные команды управления CLI - управление сеансом, автодополнение строки и вызов помощи. C-c Прервать текущий ввод и перейти на следующую строку. C-z Завершить текущее конфигурирование и поднятся на один уровень вверх. C-n DOWN Пролистать буфер команд. C-p UP Пролистать буфер команд. TAB Использовать автодополнение команды. Вы можете использовать справку командной строки, печатая help в начале строки. Ввод ? в любом месте строки покажет возможные варианты. 4. Zebra -------- zebra - это программа управления процессом маршрутизации. Она обеспечивает обновления таблицы маршрутизации ядра, поиск интерфейса и распределение маршрутов между различными демонами маршрутизации. 4.1 Запуск 4.2 Команды интерфейса 4.3 Команды добавления статичных маршрутов 4.4 Команды VTY 4.1 Запуск ---------- Помимо рассмотренных выше вариантов запуска, существуют следующие параметры: `-b' `--batch' Запуск в отладочном режиме. zebra читает файл конфигурации и заканчивает работу. `-k' `--keep_kernel' При старте zebra не удаляются старые маршруты. `-l' `--log_mode' Установка режима отладочного логирования. `-r' `--retain' При завершении программы, маршруты добавленные zebra сохраняются. 4.2 Команды интерфейса ---------------------- Command: interface ifname {} Interface Command: shutdown {} Interface Command: no shutdown {} Поднять или погасить текущий интерфейс. Interface Command: ip address address/prefix {} Interface Command: ip6 address address/prefix {} Interface Command: no ip address address/prefix {} Interface Command: no ip6 address address/prefix {} Установить IPv4 или IPv6 address/prefix для этого интерфейса. Interface Command: ip address address/prefix secondary {} Interface Command: no ip address address/prefix secondary {} Установить вторичный флаг для этого интерфейса. Это заставит ospfd не обрабатывать адрес как отдельную подсеть. Interface Command: description description ... {} Установить пояснение для этого интерфейса. Interface Command: multicast {} Interface Command: no multicast {} Установить или снять флаг многоадресной рассылки с этого интерфейса. Interface Command: bandwidth <1-10000000> {} Interface Command: no bandwidth <1-10000000> {} Значение полосы пропускания интерфейса в килобит/секунду. Служит для вычисления стоимости OSPF. Эта команда не затрагивает фактическую конфигурацию устройства. Interface Command: link-detect {} Interface Command: no link-detect {} Включить/выключить обнаружение несущей для платформ, поддерживающих данную функцию. В настоящее время это Linux с драйверами, поддерживающими функцию IFF_RUNNING. 4.3 Команды добавления статичных маршрутов ------------------------------------------ Статические маршруты - основа основ маршрутизации. Определяем префикс и шлюз. Command: ip route network gateway {} network - это префикс назначения в формате A.B.C.D/M. gateway - шлюз для этого префикса. Шлюз записывается в формате A.B.C.D. для обозначения адреса шлюза используется адресация IPv4. В противном случае этот параметр будет обработан как имя интерфейса. Если интерфейс обозначен как null0 то zebra направит этот маршрут в blackhole (Пр.п. маршрутизация направленных туда пакетов производиться не будет, это неплохой механизм провайдеров для защиты клиентов от DoS/DDoS атак, т.е. по сети провайдера к клиенту эти пакеты передаваться не будут). ip route 10.0.0.0/8 10.0.0.2 ip route 10.0.0.0/8 ppp0 ip route 10.0.0.0/8 null0 Первый пример определяет для сети 10.0.0.0/8 статический маршрут с шлюзом 10.0.0.2. Второй определяет ту же самую сеть, но с шлюзом в виде интерфейса ppp0. Третий пример направляет пакеты для этой сети в blackhole. Command: ip route network netmask gateway {} Это - дополнительная версия вышеупомянутой команды. Когда network имеет формат A.B.C.D, пользователь должен определить маску подсети. gateway имеет тоже самое значение, как и в команде выше. ip route 10.0.0.0 255.255.255.0 10.0.0.2 ip route 10.0.0.0 255.255.255.0 ppp0 ip route 10.0.0.0 255.255.255.0 null0 Эти примеры эквивалентны примерам выше. Command: ip route network gateway distance {} Устанавливает дистанцию маршрута. Несколько nexthop для статического маршрута: ip route 10.0.0.1/32 10.0.0.2 ip route 10.0.0.1/32 10.0.0.3 ip route 10.0.0.1/32 eth0 Если нет никакого маршрута к 10.0.0.2 и 10.0.0.3, и интерфейс eth0 доступен, то последний маршрут будет установлен в ядро. Если zebra была скомпилирована с поддержкой множественных путей и 10.0.0.2 и 10.0.0.3 доступны, то zebra установит многопутевой маршрут через оба nexthops, если платформа поддерживает такую возможность. zebra> show ip route S> 10.0.0.1/32 [1/0] via 10.0.0.2 inactive via 10.0.0.3 inactive * is directly connected, eth0 ip route 10.0.0.0/8 10.0.0.2 ip route 10.0.0.0/8 10.0.0.3 ip route 10.0.0.0/8 null0 255 Это установит многопутевую статичекую маршрутизацию с назначением дистанции. В этом случае при недостижимости шлюзов 10.0.0.2 и 10.0.0.3 пакеты для этой сети будут маршрутизироваться в blackhole, что предотвратит излишний трафик. zebra> show ip route 10.0.0.0/8 Routing entry for 10.0.0.0/8 Known via "static", distance 1, metric 0 10.0.0.2 inactive 10.0.0.3 inactive Routing entry for 10.0.0.0/8 Known via "static", distance 255, metric 0 directly connected, Null0 Command: ipv6 route network gateway {} Command: ipv6 route network gateway distance {} Аналогично командам ipv4. Command: table tableno {} Выбрать первичную таблицу маршрутизации ядра, которая будет использоваться. Это работает только для ядер, поддерживающих множественные таблицы маршрутизации (подобно GNU/Linux 2.2.x и позже). После установки tableno этой командой, статические маршруты, определенные позже статические маршруты будут добавлены к данной таблице. 4.4 Команды VTY --------------- Command: show ip route {} Отображает текущие маршруты, находящиеся в данный момент в базе данных zebra. Router# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, B - BGP * - FIB route. K* 0.0.0.0/0 203.181.89.241 S 0.0.0.0/0 203.181.89.1 C* 127.0.0.0/8 lo C* 203.181.89.240/28 eth0 Command: show ipv6 route {} Command: show interface {} Command: show ipforward {} Проверка форвардинга. Если форвардинг пакетов не включен - данный сервер не может работать как маршрутизатор. Command: show ipv6forward {} Отображает, разрешен ли форвардинг пакетов IP v6. 5. RIP ------ RIP -- Routing Information Protocol. RIP был разработан в 1970-ых годах в лабораториях Xerox как часть протокола маршрутизации XNS. RIP принадлежит к семейству дистанционно-векторных протоколов и базируется на алгоритме Беллмана-Форда. Как дистанционно-векторный протокол, RIP периодически посылает обновления между соседями, строя таким образом топологию сети. В каждом обновлении предается информация о дистанции до всех сетей на соседний маршрутизатор. ripd поддерживает версию 2 RIP, описанную в RFC2453 и версию 1 RIP описанную в RFC1058 5.1 Запуск и останов ripd 5.2 Конфигурация RIP 5.3 Как анонсировать маршрут RIP 5.4 Фильтрация маршрутов RIP 5.5 Манипулирование метрикой RIP 5.6 Дистанция RIP 5.7 Карта маршрутов RIP 5.8 Аутентификация RIP 5.9 Таймеры RIP 5.10 Отображение информации RIP 5.11 Команды отладки RIP 5.1 Запуск и останов ripd ------------------------- По умолчанию, файл конфигурации демона ripd называется `ripd.conf'. При запуске демон просматривает каталог /usr/local/etc, если файл конфигурации там не находится, то просматривается текущий каталог (Пр.п. Опять таки же в зависимости от указанного PREFIX). RIP использует UDP порт 521 для отправки и приема пакетов RIP. Протокол RIP требует наличия информации об интерфейсах, поставляемую демоном zebra, поэтому запуск zebra является необходимым условием для функционирования ripd. В простейшем случае процесс запуска RIP выглядит как: # zebra -d # ripd -d Пожалуйста обратите внимание, что зебра должна быть вызвана перед ripd. Для останова ripd используйте команду kill `cat /var/run/ripd.pid`. Так же имеются специальные сигналы к ripd. SIGHUP' Перезагрузить файл конфигурации `ripd.conf'. Все конфигурационные настройки будут сброшены. Все полученные ранее маршруты будут удалены из таблицы маршрутизации. `SIGUSR1' Провести ротацию лог-файла ripd. `SIGINT' `SIGTERM' ripd будет остановлен и все маршруты будут удалены. Об других, более общих опциях Вы можете узнать посмотрев в раздел 3.2 Параметры вызова. `-r' `--retain' Демон будет остановлен, маршруты будут сохранены. 5.1.1 RIP и сетевая маска ------------------------- Версия 1 RIP первоначально не поддерживала сетевую маску и для определения размера сети использовались классы. Сети класса А используют 8 битов маски, класс B использует 16 битов масок, сети класса C используют 24 бита маски. В настоящее время широко используются маски переменной длины, что позволяет более продуктивно использовать имееющееся адресное пространство. Версия 2 RIP поддерживает маску подсети переменной длины (VLSM), но Quagga ripd не поддерживает переменные сетевые маски, которые включены в RIP Версия 2. В случае получения информации с тем же самым префиксом и и метрикой, старая информация будет затерта. Ripd в настоящее время не поддерживает равную стоимость многопутевой маршрутизации. 5.2 Конфигурация RIP -------------------- Command: router rip {} Команда router rip требуется для запуска RIP. Для отключения RIP используйте команду no router rip. RIP должен быть запущен перед выполнением любой команды RIP. Command: no router rip {} Отключает RIP RIP должен быть сконфигурирован на испльзование протокола Version 1 ил Version 2, по умолчанию будет ипользована Version 2. Если RIP будет использовать Version 1, то это будет отображаться при выводе информации о протоколе, при использовании Version 2 такая информация отображаться не будет. Использование определенной версии может быть установлено как глобально, так и на отдельных интерфейсах. RIP Command: version version {} Установить версию RIP. version может быть `1" or `2". RIP Command: network network {} RIP Command: no network network {} Запуск RIP на интерфейсе, с соответствующей network. Интерфейс должен быть активен и network должна наличествовать. Эта группа команд включает или отключает маршрутизацию RIP для указанной сети. Например, если бы мы разрешили RIP для сети 10.0.0.0/24, то это привело бы разрешению мардрутизации для адресов 10.0.0.0 до 10.0.0.255. no network network отключит RIP для указанной сети. RIP Command: network ifname {} RIP Command: no network ifname {} Включить/Выключить RIP для интерфейса ifname. На данном интерфейсе будут приниматься и отправляться пакеты RIP. RIP Command: neighbor a.b.c.d {} RIP Command: no neighbor a.b.c.d {} Определить соседа RIP. Эта команда применяется, если сосед не понимает мультикастовой рассылки. Команда no neighbor удаляет соседа из списка. Ниже - очень простая конфигурация RIP. На интерфейсе eth0 и на интерфейсе с сетью 10.0.0.0/8 включается RIP: ! router rip network 10.0.0.0/8 network eth0 ! Пассивный интерфейс RIP command: passive-interface (IFNAME|default) {} RIP command: no passive-interface IFNAME {} Эта команда устанавливает указанный интерфейс в пассивный режим. В пассивном режиме все получаемые пакеты RIP будут обработаны, но не будут посылаться мультикастовые и юникастовые обновления, кроме тех соседей, которые были явно указаны командой neighbor. Интерфейс может быть обозначен как default, для запуска RIP в пассивном режиме на всех интерфейсах. По умолчанию на всех интерфейсах используется пассивный режим. Обработка версии RIP Interface command: ip rip send version version {} version может быть `1', `2', `1 2'. Эта команда изменяет номер версии протокола rip. TЭта команда включает отправку на указанном интерфейсе пакетов RIP Version 1, RIP Version 2, или обе версии сразу. В случае '1 2' посылаются и бродкастовые пакеты и мультикастовые. По умолчанию посылается только version 2. Interface command: ip rip receive version version {} Установка версии принимаемых пакетовRIP. Эта команда даст возможность выбранному интерфейсу получить пакеты RIP Version 1, RIP Version 2, или обе версии. По умолчанию принимаются обе версии. Разделение горизонтов RIP Interface command: ip split-horizon {} Interface command: no ip split-horizon {} Контролирует split-horizon на интерфесах. По умолчанию используется ip split-horizon. Если Вы не хотите использовать split-horizon на интерфейсе, используйте команду no ip split-horizon. (Пр.П. Отключать использование разделенного горизнота ИМХО нет смысла, так как это помогает бороться с образованием петель маршрутизации) 5.3 Как анонсировать маршрут RIP -------------------------------- RIP command: redistribute kernel {} RIP command: redistribute kernel metric <0-16> {} RIP command: redistribute kernel route-map route-map {} RIP command: no redistribute kernel {} redistribute kernel получает информацию о маршрутах из ядра в таблицу RIP. no redistribute kernel отключает маршруты.. RIP command: redistribute static {} RIP command: redistribute static metric <0-16> {} RIP command: redistribute static route-map route-map {} RIP command: no redistribute static {} redistribute static заносит информацию о статических маршрутах из ядра в таблицу RIP. no redistribute отключает статические маршруты. RIP command: redistribute connected {} RIP command: redistribute connected metric <0-16> {} RIP command: redistribute connected route-map route-map {} RIP command: no redistribute connected {} Транслирует маршруты в таблицу RIP. no redistribute connected отключает трансляцию маршрутов в таблицу RIP. По умолчанию происходит автоматичесий анонс транслированных маршрутов на интерфейсах, где включен RIP. RIP command: redistribute ospf {} RIP command: redistribute ospf metric <0-16> {} RIP command: redistribute ospf route-map route-map {} RIP command: no redistribute ospf {} Тоже самое, но для маршрутов полученных через ospf. Маршруты заносятся в таблицу RIP. RIP command: redistribute bgp {} RIP command: redistribute bgp metric <0-16> {} RIP command: redistribute bgp route-map route-map {} RIP command: no redistribute bgp {} Тоже самое, но для маршрутов полученных через bgp. Маршруты заносятся в таблицу RIP. Если Вы хотите обявить RIP только статические маршруты: RIP command: default-information originate {} RIP command: route a.b.c.d/m {} RIP command: no route a.b.c.d/m {} -Эта команда уникальна для Quagga. Команда route создаст статический маршрут только внутри RIP. Эта команда должна использоваться только хорошо подкованными пользователями, которые понимают работу протокола RIP. В большинстве случаев, мы рекомендуем создание статических маршрутов в Quagga используя команду redistribute static. 5.4 Фильтрация маршрутов RIP ---------------------------- Существует возможность фильтрации маршрутов списком доступа. Command: distribute-list access_list direct ifname {} Вы можете применить списки доступа к интерфейсу с помощью команды distribute-list, где access_list - имя списка доступа, а direct - `in' или `out'. При direct `in' список доступа проверяет входящие пакеты. Команда distribute-list может применяться для фильтрации путей RIP. distribute-list может применяться к выборочному интерфейсу. Сначала нужно определить список доступа. Затем имя списка доступа используется в команде distribute-list. Для примера, в следующей конфигурации `eth0' будет принимать только маршруты, соответствующие сети 10.0.0.0/8. ! router rip distribute-list private in eth0 ! access-list private permit 10 10.0.0.0/8 access-list private deny any ! distribute-list может применяться к входящим и исходящим данным. Command: distribute-list prefix prefix_list (in|out) ifname {} Вы можете определять списки сетей на интерфейсе, используя команду distribute-list. prefix_list - имя списка. При направлении `in' список доступа проверяет входящие пакеты. 5.5 Манипулирование метрикой RIP -------------------------------- Смысл метрики RIP - в указании дистанции до удаленной сети. Обычно, при получении информации о маршрутах, ripd увеличивает все дистанции на 1. Значения присоединенных маршрутов принимается равным 1. RIP command: default-metric <1-16> {} RIP command: no default-metric <1-16> {} Эта команда изменяет заданное по умолчанию значение метрики для перераспределенных маршрутов. Значение по умолчанию - 1. Эта команда не затрагивает подсоединенные маршруты, даже если они получены через redistribute connected. Чтобы изменять значение метрики подсоединенного маршрута,используйте redistribute connected metric или route-map. offset-list также затрагивает подсоединенные маршруты. RIP command: offset-list access-list (in|out) {} RIP command: offset-list access-list (in|out) ifname {} 5.6 Дистанция RIP ----------------- Значение дистанции используется демоном zebra. По умолчанию, значение дистанции для протокола RIP равно 120. RIP command: distance <1-255> {} RIP command: no distance <1-255> {} Установить значение дистанции RIP. RIP command: distance <1-255> A.B.C.D/M {} RIP command: no distance <1-255> A.B.C.D/M {} Установить значение дистанции RIP, в случае соответствия исходному IP адресу маршрута. RIP command: distance <1-255> A.B.C.D/M access-list {} RIP command: no distance <1-255> A.B.C.D/M access-list {} Установить значение дистанции RIP, в случае соответствия исходному IP адресу маршрута и определенному списку доступа. 5.7 Карта маршрутов RIP ----------------------- Использование поддержки ripd карты маршрутов. Дополнительный аргумент для использования карты маршрутов MAP_NAME может быть использован в каждой команде redistribute: redistribute static [route-map MAP_NAME] redistribute connected [route-map MAP_NAME] ..... Cisco применяет карту маршрута перед маршрутами, экспортированными в таблицу маршрутизации rip. В тестовой версии Quagga ripd применяет карту маршрута после того, как маршруты перечислены в таблице маршрутизации и прежде, чем маршруты будут объявлены интерфейсу. Такое поведение является черновым и может быть изменено в будущем. Инструкции Route-map (см. раздел 12. Карта маршрутов) необходима, чтобы использовать функциональные возможности карты маршрутов. Route Map: match interface word {} Это команда соответствия входящему интерфейсу. Есть некоторое отличие, от принятого в Cisco. Cisco использует список интерфейсов NAME1 NAME2 ... NAMEN. Ripd принимает только одно имя (возможно будет изменено в будущем). Следущее - Cisco обозначает интерфейс, который включает следующий прыжок маршрутов(подобно инструкции "ip next-hop"). Ripd обозначает интерфейс, куда этот маршрут будет послан. Route Map: match ip address word {} Route Map: match ip address prefix-list word {} Соответствие, если маршрут назначения разрешен в access-list. Route Map: match ip next-hop A.B.C.D {} Cisco использует здесь , а ripd адрес IPv4. Соответствие, если маршрут имеет этот следующий прыжок (это значение можно посмотреть в таблице маршрутизации rip - "show ip rip") Route Map: match metric <0-4294967295> {} Эта команда соответствия значения метрики обновления RIP. Для совместимости с другими протоколами может принимать значение <0-4294967295>. Для протокола RIP имеет смысл диапазон <0-16>. Route Map: set ip next-hop A.B.C.D {} Это команда установки значения следующего прыжка для протокола RIPv2. Команда не работает в RIPv1, потому что в пакете обновления нет такого поля. Route Map: set metric <0-4294967295> {} Установить метрику при посылке анонса для соответствующего маршрута. Значение метрики для совместимости с другими протоколами является очень большим. Для RIP это значение может лежать в диапазоне от 1 до 16. 5.8 Аутентификация RIP ---------------------- Interface command: ip rip authentication mode md5 {} Interface command: no ip rip authentication mode md5 {} Установить интерфейс, на котором будет проводиться аутентификация RIPv2 MD5. Interface command: ip rip authentication mode text {} Interface command: no ip rip authentication mode text {} Установить интерфейс, на котором будет проводиться простая парольная проверка RIPv2. Interface command: ip rip authentication string string {} Interface command: no ip rip authentication string string {} Пароль открытым текстом для RIP version 2. Не длиннее 16 символов. Interface command: ip rip authentication key-chain key-chain {} Interface command: no ip rip authentication key-chain key-chain {} Кодовое слово для использования MD5. ! key chain test key 1 key-string test ! interface eth1 ip rip authentication mode md5 ip rip authentication key-chain test ! 5.9 Таймеры RIP --------------- RIP command: timers basic update timeout garbage {} Протокол RIP имеет несколько таймеров. Пользователь может конфигурировать значения этих таймеров командой timers basic. По умолчанию приняты следующие значения: * Таймер обновлений - 30 секунд. Рассылка обновлений * Таймаут - 180 секунд. Недостижимый маршрут соответствующим образом помечается, но сохраняется в таблице маршрутизации. * Время удаления - 120 секунд. Маршрут удаляется из таблицы. RIP command: no timers basic {} Принимаются значения по умолчанию. 5.10 Отображение информации RIP ------------------------------- Отображение маршрутов RIP. Command: show ip rip {} Отображение маршрутов RIP. Эта команда отображает все маршруты RIP. Эта команда также отобразит эту информацию для маршрутов, транслированных в RIP. Command: show ip protocols {} Эта команда отобразит текущий статус RIP. Включает в себя значения таймеров RIP, фильтры, версию, интерфейсы с функционирующим RIP и соседей. ripd> show ip protocols Routing Protocol is "rip" Sending updates every 30 seconds with +/-50%, next due in 35 seconds Timeout after 180 seconds, garbage collect after 120 seconds Outgoing update filter list for all interface is not set Incoming update filter list for all interface is not set Default redistribution metric is 1 Redistributing: kernel connected Default version control: send version 2, receive version 2 Interface Send Recv Routing for Networks: eth0 eth1 1.1.1.1 203.181.89.241 Routing Information Sources: Gateway BadPackets BadRoutes Distance Last Update 5.11 Команды отладки RIP ------------------------ Команды отладки для протокола RIP. Command: debug rip events {} Отображение событий rip. Прием и отправка пакетов, таймеры, изменения в интерфейсах. Command: debug rip packet {} Отладка пакетов rip. Отображается детальная информация о пакетах RIP. Command: debug rip zebra {} Отладка взаимодействия между rip и zebra. Command: show debugging rip {} Отображение опций отладки ripd. 7. OSPFv2 --------- OSPF версия 2 - протокол маршрутизации, описаный в RFC2328. OSPF принадлежит к семейству IGP (Interior Gateway Protocols)(Протокол внутренних шлюзов). По сравнению с RIP, OSPF может обеспечить масштабируемую поддержку сети и более быстрое время конвергенции. OSPF широко используется в больших сетях типа Интернет-провайдеров или сетях крупных предприятий. 7.1 Конфигурирование ospfd 7.2 Роутер OSPF 7.3 Зоны OSPF 7.4 Интерфейсы OSPF 7.5 Транслирование маршрутов в OSPF 7.6 Отображение информации OSPF 7.7 Отладка OSPF 7.1 Конфигурирование ospfd -------------------------- ospfd не имеет спецфических опций. ospfd получает информацию об интерфейсах от zebra, поэтому она должна быть также запущена. Аналогично другим демонам, файл конфигурации называется `ospfd.conf'. 7.2 Роутер OSPF --------------- Для старта процесса OSPF необходимо определить роутер OSPF. С этой записи, ospfd не поддерживает множественные OSPF процессы. Command: router ospf {} Command: no router ospf {} Включить или выключить OSPF процесс. ospfd еще не поддерживает множественные OSPF процессы, так что Вы не можете определить номер процесса OSPF. OSPF Command: ospf router-id a.b.c.d {} OSPF Command: no ospf router-id {} OSPF Command: ospf abr-type type {} OSPF Command: no ospf abr-type type {} type может быть cisco|ibm|shortcut|standard. Подробная информация относительно поведения, управляемого этой командой, может быть найдена в draft-ietf-ospf-abr-alt-05.txt и draft-ietf-ospf-shortcut-abr-02.txt OSPF Command: ospf rfc1583compatibility {} OSPF Command: no ospf rfc1583compatibility {} Это rfc2328, дополнение к rfc1583, предлагает согласно разделу G.2 (changes) в разделе 16.4 изменения алгоритма предпочтения пути, которые предотвращают циклы маршрутизации, которые были возможны в старой версии OSPFv2. OSPF Command: passive interface interface {} OSPF Command: no passive interface interface {} OSPF Command: timers spf <0-4294967295> <0-4294967295> {} OSPF Command: no timers spf {} OSPF Command: refresh group-limit <0-10000> {} OSPF Command: refresh per-slice <0-10000> {} OSPF Command: refresh age-diff <0-10000> {} OSPF Command: auto-cost refrence-bandwidth <1-4294967> {} OSPF Command: no auto-cost refrence-bandwidth {} OSPF Command: network a.b.c.d/m area a.b.c.d {} OSPF Command: network a.b.c.d/m area <0-4294967295> {} OSPF Command: no network a.b.c.d/m area a.b.c.d {} OSPF Command: no network a.b.c.d/m area <0-4294967295> {} Эта команда определяет допустимый интерфейс OSPF. Если интерфейс имеет адрес 10.0.0.1/8, тогда команда ниже обеспечивает сетевую информацию на ospf маршрутизаторы: router ospf network 10.0.0.0/8 area 0 длина маски должна быть та же самая как и маска адреса интерфейса. 7.3 Зоны OSPF OSPF Command: area a.b.c.d range a.b.c.d/m {} OSPF Command: area <0-4294967295> range a.b.c.d/m {} OSPF Command: no area a.b.c.d range a.b.c.d/m {} OSPF Command: no area <0-4294967295> range a.b.c.d/m {} OSPF Command: area a.b.c.d range IPV4_PREFIX suppress {} OSPF Command: no area a.b.c.d range IPV4_PREFIX suppress {} OSPF Command: area a.b.c.d range IPV4_PREFIX substitute IPV4_PREFIX {} OSPF Command: no area a.b.c.d range IPV4_PREFIX substitute IPV4_PREFIX {} OSPF Command: area a.b.c.d virtual-link a.b.c.d {} OSPF Command: area <0-4294967295> virtual-link a.b.c.d {} OSPF Command: no area a.b.c.d virtual-link a.b.c.d {} OSPF Command: no area <0-4294967295> virtual-link a.b.c.d {} OSPF Command: area a.b.c.d shortcut {} OSPF Command: area <0-4294967295> shortcut {} OSPF Command: no area a.b.c.d shortcut {} OSPF Command: no area <0-4294967295> shortcut {} OSPF Command: area a.b.c.d stub {} OSPF Command: area <0-4294967295> stub {} OSPF Command: no area a.b.c.d stub {} OSPF Command: no area <0-4294967295> stub {} OSPF Command: area a.b.c.d stub no-summary {} OSPF Command: area <0-4294967295> stub no-summary {} OSPF Command: no area a.b.c.d stub no-summary {} OSPF Command: no area <0-4294967295> stub no-summary {} OSPF Command: area a.b.c.d default-cost <0-16777215> {} OSPF Command: no area a.b.c.d default-cost <0-16777215> {} OSPF Command: area a.b.c.d export-list NAME {} OSPF Command: area <0-4294967295> export-list NAME {} OSPF Command: no area a.b.c.d export-list NAME {} OSPF Command: no area <0-4294967295> export-list NAME {} OSPF Command: area a.b.c.d import-list NAME {} OSPF Command: area <0-4294967295> import-list NAME {} OSPF Command: no area a.b.c.d import-list NAME {} OSPF Command: no area <0-4294967295> import-list NAME {} OSPF Command: area a.b.c.d authentication {} OSPF Command: area <0-4294967295> authentication {} OSPF Command: no area a.b.c.d authentication {} OSPF Command: no area <0-4294967295> authentication {} OSPF Command: area a.b.c.d authentication message-digest {} OSPF Command: area <0-4294967295> authentication message-digest {} 7.4 Интерфейсы OSPF ------------------- Interface Command: ip ospf authentication-key AUTH_KEY {} Interface Command: no ip ospf authentication-key {} Установить аутентификационный ключ OSPF(простой пароль). После установки AUTH_KEY все OSPF пакеты должны аутентифицироваться. AUTH_KEY может быть длиной 8 символов. Interface Command: ip ospf message-digest-key KEYID md5 KEY {} Interface Command: no ip ospf message-digest-key {} Установить аутентификационный ключ OSPF(криптованный пароль). Используемый алгоритм - MD5. KEY может достигать длинны 16 символов. Interface Command: ip ospf cost <1-65535> {} Interface Command: no ip ospf cost {} Устанавливает стоимость определенного интерфейса. Значение стоимости установливается в поле router-LSA's metric и используется для SPF вычисления. Interface Command: ip ospf dead-interval <1-65535> {} Interface Command: no ip ospf dead-interval {} Устанавливает значение в секундах для RouterDeadInterval timer и используется дляr Wait Timer и Inactivity Timer. Должно быть одинаковым для всех роутеров одной сети. Значение по умолчанию - 40 секунд. Interface Command: ip ospf hello-interval <1-65535> {} Interface Command: no ip ospf hello-interval {} Устанавливает значение в секундах для HelloInterval timer. Установив это значение, устанавливается интервал, через который будут посылаться пакеты Hello с этого интерфейса. Должно быть одинаковым для всех роутеров одной сети. Значение по умолчанию - 10 секунд. Interface Command: ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point) {} Interface Command: no ip ospf network {} Явно задает тип сети на интерфейсе. Interface Command: ip ospf priority <0-255> {} Interface Command: no ip ospf priority {} Устанавливает значение RouterPriority. Чем выше значение, тем больше вероятность стать Designated Router. При значении установленном в 0,r не имеет возможности стать Designated Router. По умолчанию равно 1. Interface Command: ip ospf retransmit-interval <1-65535> {} Interface Command: no ip ospf retransmit interval {} Устанавливает значение в секундах для RxmtInterval timer. Этот таймер используется при повторных передачах базы данных описаний и запросов состояния соединения. Значение по умолчанию - 5 секунд. Interface Command: ip ospf transmit-delay {} Interface Command: no ip ospf transmit-delay {} Устанавливает значение в секундах для InfTransDelay. Возраст LSA должен быть увеличен на это значение при передаче. Значение по умолчанию - 1 секунда. 7.5 Транслирование маршрутов в OSPF ----------------------------------- OSPF Command: redistribute (kernel|connected|static|rip|bgp) {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) route-map {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) route-map word {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> route-map word {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> {} OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> route-map word {} OSPF Command: no redistribute (kernel|connected|static|rip|bgp) {} OSPF Command: default-information originate {} OSPF Command: default-information originate metric <0-16777214> {} OSPF Command: default-information originate metric <0-16777214> metric-type (1|2) {} OSPF Command: default-information originate metric <0-16777214> metric-type (1|2) route-map word {} OSPF Command: default-information originate always {} OSPF Command: default-information originate always metric <0-16777214> {} OSPF Command: default-information originate always metric <0-16777214> metric-type (1|2) {} OSPF Command: default-information originate always metric <0-16777214> metric-type (1|2) route-map word {} OSPF Command: no default-information originate {} OSPF Command: distribute-list NAME out (kernel|connected|static|rip|ospf {} OSPF Command: no distribute-list NAME out (kernel|connected|static|rip|ospf {} OSPF Command: default-metric <0-16777214> {} OSPF Command: no default-metric {} OSPF Command: distance <1-255> {} OSPF Command: no distance <1-255> {} OSPF Command: distance ospf (intra-area|inter-area|external) <1-255> {} OSPF Command: no distance ospf {} Command: router zebra {} Command: no router zebra {} 7.6 Отображение информации OSPF ------------------------------- Command: show ip ospf {} Command: show ip ospf interface [INTERFACE] {} Command: show ip ospf neighbor {} Command: show ip ospf neighbor INTERFACE {} Command: show ip ospf neighbor detail {} Command: show ip ospf neighbor INTERFACE detail {} Command: show ip ospf database {} Command: show ip ospf database (asbr-summary|external|network|router|summary) {} Command: show ip ospf database (asbr-summary|external|network|router|summary) link-state-id {} Command: show ip ospf database (asbr-summary|external|network|router|summary) link-state-id adv-router adv-router {} Command: show ip ospf database (asbr-summary|external|network|router|summary) adv-router adv-router {} Command: show ip ospf database (asbr-summary|external|network|router|summary) link-state-id self-originate {} Command: show ip ospf database (asbr-summary|external|network|router|summary) self-originate {} Command: show ip ospf database max-age {} Command: show ip ospf database self-originate {} Command: show ip ospf refresher {} Command: show ip ospf route {} 7.7 Отладка OSPF ---------------- Command: debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail] {} Command: no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail] {} Command: debug ospf ism {} Command: debug ospf ism (status|events|timers) {} Command: no debug ospf ism {} Command: no debug ospf ism (status|events|timers) {} Command: debug ospf nsm {} Command: debug ospf nsm (status|events|timers) {} Command: no debug ospf nsm {} Command: no debug ospf nsm (status|events|timers) {} Command: debug ospf lsa {} Command: debug ospf lsa (generate|flooding|refresh) {} Command: no debug ospf lsa {} Command: no debug ospf lsa (generate|flooding|refresh) {} Command: debug ospf zebra {} Command: debug ospf zebra (interface|redistribute) {} Command: no debug ospf zebra {} Command: no debug ospf zebra (interface|redistribute) {} Command: show debugging ospf {} 8. OSPFv3 --------- ospf6d - это демон, поддерживающий OSPF version 3 для сетей IPv6. OSPF дляr IPv6 описан в RFC2740.
Источник http://asmodeus.com.ua/library/nets/bgp/quagga_traslation.html