Динамическая ospf маршрутизация в Linux средствами Quagga

В предыдущих статьях я рассказывал как соединить несколько офисов между собой VPN каналами. Допустим у нас есть несколько VPN туннелей от одного офиса к другому, при этом они имеют разную стоимость.
Задача: Организовать маршрутизацию таким образом, чтобы весь трафик ходил через 1-й туннель (например он у нас будет самый дешевый), а при его разрыве перенаправлять весь трафик на 2-й, он у нас будет несколько дороже. При восстановлении 1-го канала трафик опять же посылать через 1-й.

Тут нам на помощь придет динамическая маршрутизация по протоколу OSPF (были бы CISCO можно было бы и другой протокол использовать, но у нас Linux :( ). В Linux, по моему мнению самым удачным пакетом является quagga.
Немного теории:
OSPF (англ. Open Shortest Path First) — протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути Алгоритм Дейкстры (Dijkstra’s algorithm).
Протокол OSPF был разработан IETF в 1988 году. Последняя версия протокола представлена в RFC 2328. Протокол OSPF представляет собой протокол внутреннего шлюза (Interior Gateway Protocol — IGP). Протокол OSPF распространяет информацию о доступных маршрутах между маршрутизаторами одной автономной системы.
OSPF имеет следующие преимущества:
Высокая скорость сходимости по сравнению с дистанционно-векторными протоколами маршрутизации;
Поддержка сетевых масок переменной длины (VLSM);
Оптимальное использование пропускной способности (т. к. строится минимальный остовный граф по алгоритму Дейкстры).

Описание работы протокола
Маршрутизаторы обмениваются hello-пакетами через все интерфейсы, на которых активирован OSPF. Маршрутизаторы, разделяющие общий канал передачи данных, становятся соседями, когда они приходят к договоренности об определённых параметрах, указанных в их hello-пакетах.
На следующем этапе работы протокола маршрутизаторы будут пытаться перейти в состояние смежности со своими соседями. Переход в состояние смежности определяется типом маршрутизаторов, обменивающихся hello-пакетами, и типом сети, по которой передаются hello-пакеты. OSPF определяет несколько типов сетей и несколько типов маршрутизаторов. Пара маршрутизаторов, находящихся в состоянии смежности, синхронизирует между собой базу данных состояния каналов.
Каждый маршрутизатор посылает объявления о состоянии канала маршрутизаторам, с которыми он находится в состоянии смежности.
Каждый маршрутизатор, получивший объявление от смежного маршрутизатора, записывает передаваемую в нём информацию в базу данных состояния каналов маршрутизатора и рассылает копию объявления всем другим смежным с ним маршрутизаторам.
Рассылая объявления внутри одной OSPF-зоны, все маршрутизаторы строят идентичную базу данных состояния каналов маршрутизатора.
Когда база данных построена, каждый маршрутизатор использует алгоритм «кратчайший путь первым» для вычисления графа без петель, который будет описывать кратчайший путь к каждому известному пункту назначения с собой в качестве корня. Этот граф — дерево кратчайших путей.
Каждый маршрутизатор строит таблицу маршрутизации из своего дерева кратчайших путей.

QUAGGA
Quagga — пакет свободного программного обеспечения, поддерживающий протоколы динамической маршрутизации IP. Компьютер с установленным и сконфигурированным пакетом Quagga становится способен использовать любые из нижеследующих протоколов динамической маршрутизации:
Routing Information Protocol (RIP): v1, v2, v3;
Open Shortest Path First (OSPF): v2, v3;
Border Gateway Protocol (BGP): v4;
Intermediate System to Intermediate System (IS-IS).

Установка:
У меня в наличии Centos 6 с ней и буду работать.
1. Ставим пакет
# yum install quagga

2. Переходим в /etc/quagga/ и правим файл zebra.conf У меня получилось следующее:

! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
!
hostname HOSTNAME          !Имя машины
password zebra             ! пароль для подключения к vtysh
enable password zebra       ! пароль для конфигурирования через vtysh


interface lo
description loopback
ip address 127.0.0.1/8
ip forwarding

! Описываем интерфейсы, которые нужны для маршрутизации, не забываем, что здесь нужно прописывать лишь интерфейсы локальных сетей.
interface eth0                        
description LAN
ip address 192.168.10.1/24
ip forwarding

interface gre1   ! туннель до второго офиса, дешевый
description to_office2_gre1
ip address 10.101.0.1/24
ip forwarding

interface gre2  ! туннель до второго офиса, дорогой
description to_office2_gre2
ip address 10.101.1.1/24
ip forwarding


log file /var/log/quagga/zebra.log


3. Правим файл ospfd.conf он собственно и отвечает за работу протокола ospf:

! -*- ospf -*-
!
! OSPFd sample configuration file
!
!
hostname HOSTNAME
password zebra
!enable password please-set-at-here
!

interface gre1  ! здесь прописываем каждому туннелю свою стоимость, чем она ниже тем приоритетнее канал
ip ospf cost 35 ! собственно стоимость туннеля
!ip ospf hello-interval 1  ! это интервал, через который маршрутизаторы общаются между собой, по умолчанию 10 сек

interface gre2
ip ospf cost 45
!ip ospf hello-interval 1

router ospf
router-id 10.101.0.1   ! должно быть уникальным на каждом маршрутизаторе
network 192.168.10.0/24 area 1   ! Описываем область и адреса в ней. Показываем сеть, которую маршрутизирует этот сервер.
network 10.101.0.0/24 area 1
network 10.101.1.0/24 area 1
neighbor 10.101.0.2    ! это наш "сосед" тот с кем будет производиться обмен маршрутами

log stdout
log file /var/log/quagga/ospfd.log


4. Запускаем сервисы:

# service zebra start
# service ospfd start
# chkconfig  zebra on   !ставим в автосатр при перезапуске сервера
# chkconfig  ospfd on   !ставим в автосатр при перезапуске сервера


Настраиваем на втором сервере то же самое, но со своими IP адресами.

Полезные команды:


# show ip ospf    !Информация о Router ID, таймерах и статистика

# show ip route ospf  ! Маршруты полученные по протоколу OSPF

# show ip ospf neighbor ! информация о ospf соседях
  • 0
  • 09 января 2013, 19:08
  • admin

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Яндекс.Метрика