Quagga - превращение сервера в полнофункциональный маршрутизатор

Версия для печатиОтправить другуPDF version

Немного общей информации для начала... Quagga — пакет программного обеспечения, позволяющий превратить обычный компьютер в маршрутизатор TCP/IP с поддержкой разнообразных протоколов маршрутизации. Поддерживаются следующие протоколы маршрутизации:

На данный момент возникла необходимость в статической маршрутизации. Соответственно опишем установку и начальную настройку демона zebra.

Устанавливаем quagga  из портов:

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

Как видим из предложеных опций, в последних версиях появилась поддержка протокола IS-IS (Intermediate System to Intermediate System). Но поскольку поддержка данного протокола находится в експериментальном режиме, то пока откажемся от его установки. По ходу, все опции оставляю по умолчанию.

По завершению установки добавляем необходимость запуска quagga и демона zebra при запуске системы:

# cat /etc/rc.conf | grep quagga
quagga_enable="YES"
quagga_daemons="zebra"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d;' zebra"

Watchquagga - это дополнение к quagga. Мониторит доступность указаных демонов quagga, и в случае, если демон не отвечает - перезапускает его.

Создаем каталог, где будут лежать конфигурационные файлы наших демонов маршрутизации. Создаем файл конфигурации для демона статической маршрутизации zebra, выставляем необходимые права:

# touch /usr/local/etc/quagga/zebra.conf
# chmod 600 /usr/local/etc/quagga/zebra.conf
# chown -R quagga:quagga /usr/local/etc/quagga

 Наполняем файл следующим содержимым:

# cat /usr/local/etc/quagga/zebra.conf

password pass1
enable password pass2

Дело в том, что подключаться к демону маршрутизации для последующей настройки мы будем по виртуальному терминалу, а в случае, если пароль не задан, то терминал это подключение отбросит (требование безопасности).

Кстати, не помешает создать каталог, где будет хранить свои логи quagga:

# mkdir /var/log/quagga
# chown quagga:quagga /var/log/quagga

Запускаем quagga и пробуем подключиться к запущеному демону:

# sh /usr/local/etc/rc.d/quagga start
Starting zebra.
# telnet localhost zebra
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
 
Hello, this is Quagga (version 0.99.14).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
 
Password:
> enable
Password:
#

Консоль управления полностью идентична Cisco CLI. Поэтому многим будет знакома. Если же нет - смотрите комментарии к набираемым командам (выделено красным).

Итак, мы уже подлючены к виртуальной консоли. Начнем настройку:

Перейдем в режим глобальной конфигурации:

# configure terminal

Обратите внимание на то, что изменилось приглашение командной строки. Это как-бы подсказка, в каком режиме мы находимся...

(config)#

Первым делом дадим название даному роутеру, чтобы не путаться в последующем, в каком из демонов маршрутизации мы находимся, и на каком из роутеров. Обычно название я даю, исходя из демона маршрутизации и названия роутера.

(config)# hostname zebra-router
zebra-router(config)#

Кстати, имейте ввиду, что все изменения конфигурации вступают в силу немедленно после ввода команды!

Дальше рекомендую включить сервис шифрования паролей. Не очень хорошо то, что они хранятся в открытом виде.

zebra-router(config)# service password-encryption

Настроим логирование:

zebra-router(config)# log stdout

zebra-router(config)# log file /var/log/quagga/zebra.log

Вроде пока все гуд... Сохраним текущую конфигурацию (ведь на данный момент все изменения хранятся в оперативной памяти).

zebra-router(config)# exit

zebra-router# write memory
Configuration saved to /usr/local/etc/quagga/zebra.conf

Посмотрим что у нас получилось:

zebra-router# show startup-config
!
! Zebra configuration saved from vty
!   2009/09/22 15:24:43
!
hostname zebra-router
password 8 bJdy6GGF2QMTg
enable password 8 4D7IL52lMQH4Q
log file /var/log/quagga/zebra.log
log stdout
service password-encryption
!
interface em0
 ipv6 nd suppress-ra
!
interface lo0
!
interface re0
 ipv6 nd suppress-ra
!
interface re1
 ipv6 nd suppress-ra
!
ip forwarding
!
!
line vty
!
zebra-router#

 Для добавления статического маршрута необходимо в режиме глобальной конфигурации набить команду:

zebra-router(config)# ip route x.x.x.x/x y.y.y.y

Где x.x.x.x/x - адрес сети, для которой необходимо изменить маршрут, y.y.y.y - адрес следующего хопа (ip следующего маршрутизатора). Вместо ip-адресса следующего хопа можно указывать интерфейс, в который перенаправлять пакеты.

Просмотреть текущий маршрут к хосту можно командой show ip route (чтобы просмотреть все текущие маршруты, команду набиваем без ключей):

zebra-router# show ip route y.y.y.y
Routing entry for x.x.x.x/x
  Known via "static", distance 1, metric 0, best
  * z.z.z.z, via tun0

 OSPF

Собственно продолжим "терзать" quagga. Есть необходимость организовать обмен маршрутами между роутерами по протоколу ospf. Будем отталкиваться от того, что сам пакет уже установлен, zebra работает...

Создадим файл конфигурации демона ospfd, выставим ему необходимые права:

# touch /usr/local/etc/quagga/ospfd.conf
# chmod 600 /usr/local/etc/quagga/ospfd.conf
# chown -R quagga:quagga /usr/local/etc/quagga

Наполняем файл следующим содержимым:

# cat /usr/local/etc/quagga/ospfd.conf

password pass1
enable password pass2

Изменяем данные rc.conf (добавляем поддержку ospfd):

# cat /etc/rc.conf | grep quagga
quagga_enable="YES"
quagga_daemons="zebra ospfd"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d; /usr/local/sbin/ospfd -d;' zebra ospfd"
 

Перезапускаем quagga:

# sh /usr/local/etc/rc.d/quagga restart
ospfd not running? (check /var/run/quagga/ospfd.pid).
Stopping zebra.
Starting zebra.
2010/02/17 22:54:51 ZEBRA: can't get ip6forwarding value
Starting ospfd.

Подключаемся к терминалу и приступаем к конфигурированию ospfd (соединение между роутерами реализовано по виртуальному интерфейсу vlan17).

Конфигурация Router1

# telnet localhost ospfd
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
 
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
 
Password:
> enable
Password:
Переходим в режим глобальной конфигурации
# configure terminal
Даем название роутеру, отталкиваясь от демона маршрутизации:
(config)# hostname ospfd-router1
Включаем шифрование паролей
ospfd-router1(config)# service password-encryption
Настройка логирования
ospfd-router1(config)# log stdout
ospfd-router1(config)# log file /var/log/quagga/ospfd.log
Переход к конфигурированию демона ospf
ospfd-router1(config)# router ospf
Задаем идентификатор маршрутизатора
ospfd-router1(config-router)# ospf router-id 10.16.17.1
Какие сети будем анонсировать (непосредственно подключенные и статические маршруты)
ospfd-router1(config-router)# redistribute connected
ospfd-router1(config-router)# redistribute static
Задаем идентификатор области, в которую входит подключенная сеть
ospfd-router1(config-router)# network 10.16.17.0/29 area 0.0.0.0
ospfd-router1(config-router)# exit
Приступаем к настройке интерфейса
ospfd-router1(config)# interface vlan17
Описание. Нужная штука, особенно если OSPF поднят на нескольких интерфейсах
ospfd-router1(config-if)# description Internal_interface
Задаем "стоимость" канала. Используется при вычислении оптимального маршрута
ospfd-router1(config-if)# ip ospf cost 100
Промежуток времени в секундах, между передачей интерфейсом двух последовательных пакетов Hello
ospfd-router1(config-if)# ip ospf hello-interval 8
Время в секундах, по истечению которого соседний маршрутизатор считается неработающим. Время исчисляется от момента приема последнего пакета Hello от соседнего маршрутизатора. Значение этого параметра анонсируется в пакетах Hello.
ospfd-router1(config-if)# ip ospf dead-interval 24
Интервал времени в секундах по истечении которого маршрутизатор повторно отправит пакет на который не получил подтверждения о получении
ospfd-router1(config-if)# ip ospf retransmit-interval 4
ospfd-router1(config-if)# exit
ospfd-router1(config)# exit
ospfd-router1# write memory
Configuration saved to /usr/local/etc/quagga/ospfd.conf
 

 По аналогии конфигурируем Router2 (подразумевается, что quagga уже установлена, подготовительные манипуляции завершены, осталось только сконфигурить):

 

# telnet localhost ospfd
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
 
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
 
Password:
> enable
Password:
# configure terminal
(config)# hostname ospfd-router2
ospfd-router2(config)# service password-encryption
ospfd-router2(config)# log stdout
ospfd-router2(config)# log file /var/log/quagga/ospfd.log
ospfd-router2(config)# router ospf
ospfd-router2(config-router)# ospf router-id 10.16.17.2
ospfd-router2(config-router)# redistribute connected
ospfd-router2(config-router)# redistribute static
ospfd-router2(config-router)# network 10.16.17.0/29 area 0.0.0.0
ospfd-router2(config-router)# exit
ospfd-router2(config)# interface vlan17
ospfd-router2(config-if)# description Internal_interface
ospfd-router2(config-if)# ip ospf cost 100
ospfd-router2(config-if)# ip ospf hello-interval 8
ospfd-router2(config-if)# ip ospf dead-interval 24
ospfd-router2(config-if)# ip ospf retransmit-interval 4
ospfd-router2(config-if)# exit
ospfd-router2(config)# exit
ospfd-router2# write memory
Configuration saved to /usr/local/etc/quagga/ospfd.conf
 

Проверим теперь состояние ospf-сесии:

ospfd-router2# show ip ospf neighbor
 
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
10.16.17.1        1 Full/Backup       18.859s 10.16.17.1      vlan17:10.16.17.2        0     0     0
 

Проверим, какие маршруты получены по OSPF:

ospfd-router2# show ip ospf database
 
       OSPF Router with ID (10.16.17.2)
 
                Router Link States (Area 0.0.0.0)
 
Link ID         ADV Router      Age  Seq#       CkSum  Link count
10.16.17.1      10.16.17.1       497 0x80000005 0xf641 1
10.16.17.2      10.16.17.2       501 0x80000004 0xf63f 1
 
                Net Link States (Area 0.0.0.0)
 
Link ID         ADV Router      Age  Seq#       CkSum
10.16.17.2      10.16.17.2       501 0x80000001 0xa303
 
                AS External Link States
 
Link ID         ADV Router      Age  Seq#       CkSum  Route
10.16.16.0      10.16.17.1       502 0x80000002 0x5d0a E2 10.16.16.0/24 [0x0]
10.16.32.0      10.16.17.1       502 0x80000002 0xacaa E2 10.16.32.0/24 [0x0]
10.16.33.0      10.16.17.1       502 0x80000002 0xa1b4 E2 10.16.33.0/24 [0x0]
192.168.1.0     10.16.17.2       501 0x80000003 0x8c98 E2 192.168.1.0/24 [0x0]
 

Базовая настройка завершена. Более подробно с протоколом OSPF можете ознакомиться здесь.

Ваша оценка: Нет Средняя: 4.7 (13 голосов)

Зробів як все написано після

Зробів як все написано після всих цих маніпуляций він мені видав що

"-*-: not found

password: not found це бредні я назначив  /usr/local/etc/quagga/zebra.conf

enable: not found /usr/local/etc/quagga/zebra.conf

/usr/local/etc/rc.d/quagga: 11: Syntax error:Unterminated quoted string"

що робити Хелпми плиз

юноша.. подивицця на 11

юноша..

подивицця на 11 строчку в вашому конфiгу.

якщо ви знаете украiньску - це не звiльняе вас вiд обовьязку знати англiйську

Эту тему даже на форуме

Эту тему даже на форуме подняли.

Но видимо автор не заинтересован в решении проблемы, поскольку конфиг не предоставил, чтобы можно было указать на ошибку...

да-да..

да-да..

Re: Quagga - превращение сервера в полнофункциональный ...

Привіт, чи є у вас інформація по налаштування ospf через підключення point-to-point? В даному пості ви розгянули роботу ospf з фізичним підключенням до однієї й тієїж мережі, як же організувати роботу ospf через generic tunnel interface (gif) point-to-point?

Re: Quagga - превращение сервера в полнофункциональный ...

Прописуйте нейборів у конфігу. Тоді OSPF буде працювати по юнікасту, а не по мультикасту. Відповідно все повинно запрацювати.

Re: Quagga - превращение сервера в полнофункциональный ...

Дякую за відповідь, прописав, але реакції жодної. Глянув на пакети, що проходять через інтерфейс (що дивиться в інтернет) і помітив пакети OSPF (не можу стверджувати, що появились пакети чи їх не було) між хостами, що і є кінцями тунеля:

root@freebsd:/usr/local/etc/racoon # tcpdump -n -i ng0 host 9.209.29.209

17:23:22.460261 IP 109.201.232.120 > 9.209.29.209: IP 172.16.1.5 > 224.0.0.5: OSPFv2, Hello, length 44 (ipip-proto-4)

 

Для повноти картини:

інтерфейс - інтернета:

root@freebsd:/usr/local/etc/racoon # ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
        inet 109.201.232.120 --> 77.120.32.1 netmask 0xffffffff

 

інтерфейс тунеля:

root@freebsd:/usr/local/etc/racoon # ifconfig gif1
gif1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
        tunnel inet 109.201.232.120 --> 9.209.29.209
        inet 172.16.1.5 --> 172.16.1.6 netmask 0xffffffff
        options=1<ACCEPT_REV_ETHIP_VER>

 

В документації так і не зрозуміло, чи пакети OSPF повинні інкапсолюватися в тунель чи будуть працювати поверх? Якщо інкапсулюватись тоді до політик тунеля потрібно добавити правило на зразок: 

spdadd 172.16.1.5/32 224.0.0.5/32 any -P out ipsec esp/tunnel/109.201.232.120-9.209.29.209/require;
spdadd 224.0.0.5/32 172.16.1.6/32 any -P in ipsec esp/tunnel/9.209.29.209-109.201.232.120/require;

172.16.1.6/32 - тому що пакети будуть ініційовані сусідом.

 

Прошу допомогти ...

Re: Quagga - превращение сервера в полнофункциональный ...

Піднімайте тему на форумі, спробуємо розібратись у ситуації. 224.0.0.5 - це мультикаст-адреса. З нею і працює OSPF.

Re: Quagga - превращение сервера в полнофункциональный ...

Розмістив на форумі:

http://forum.muff.kiev.ua/index.php?topic=136.0

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература