VPN c динамической маршрутизацией (GRE Racoon OSPF): различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Категория:Admin Категория:HOWTO == Исходные данные == Схема такой сети масштабируема от дву...»)
 
Нет описания правки
 
(не показано 10 промежуточных версий 4 участников)
Строка 1: Строка 1:
[[Категория:Admin]]
[[Категория:HOWTO]]
== Исходные данные ==
== Исходные данные ==
Схема такой сети масштабируема от двух офисов до довольно большой сети крупного предприятия.
Схема такой сети масштабируема от двух офисов до довольно большой сети крупного предприятия.
Применение OSPF позволяет не прописывать вручную на каждом из маршрутизаторов роуты удаённых филиалов, а так же позволяет организовать несколько резервных каналов с автоматическим переключением.
Применение OSPF позволяет не прописывать маршруты вручную на каждом из маршрутизаторов сети удалённых филиалов, а также позволяет организовать несколько резервных каналов с автоматическим переключением.
Начнём с простого - два филиала, на каждом в качестве маршрутизатора стоит Linux.
Начнём с простого — два филиала, на каждом в качестве маршрутизатора стоит Linux.
<pre>
<pre>
                     |------|                            |------|
                     |------|                            |------|
Строка 12: Строка 8:
                     |------|                            |------|
                     |------|                            |------|
</pre>
</pre>
== Решение ==
== Решение ==
=== GRE туннели ===
 
Непосредственно туннели строить удобнее всего (а в случае с OSPF это единственная возможность) при помощи IP туннеля GRE.
=== Туннели ===
OSPF роутеры используют IP multicast для обмена сообщениями, поэтому необходимо использовать туннели GRE over IP.
В ALT linux Ark 5 поддержка таких туннелей идёт из коробки.
В ALT linux Ark 5 поддержка таких туннелей идёт из коробки.
Конфиги:
Конфиги:
папка '''/etc/net/ifaces/gre1''' (её нужно создать вручную, как и нижеприведеные файлы):
папка '''/etc/net/ifaces/gre1''' (её нужно создать вручную, как и нижеприведенные файлы):
'''/etc/net/ifaces/gre1/ipv4address''':
'''/etc/net/ifaces/gre1/ipv4address''':
<pre>172.17.0.2 peer 172.17.0.1/30</pre>
<pre>172.17.0.0 peer 172.17.0.1</pre>
'''/etc/net/ifaces/gre1/options:'''
'''/etc/net/ifaces/gre1/options:'''
<pre>TUNLOCAL=x.x.x.x
<pre>TUNLOCAL=x.x.x.x
Строка 30: Строка 28:
DISABLE=no</pre>
DISABLE=no</pre>


Встречная сторона - все-то же, только IP адреса между собой поменять соответственно.
Настройки противоположной стороны идентичны, необходимо лишь поменять местами IP адреса в TUNLOCAL и TUNREMOTE.


Для того, чтобы туннель заработал, нужно разрешить INPUT и OUTPUT на 47 ip протокол на внешних интерфейсах:
Разрешить 47 IP протокол (GRE) в ваших правилах фильтрации трафика:
<pre>iptables -I INPUT -i eth1 -p 47 -j ACCEPT
<pre>iptables -I INPUT -i eth1 -p 47 -j ACCEPT
iptables -I OUTPUT -o eth1 -p 47 -j ACCEPT</pre>  
iptables -I OUTPUT -o eth1 -p 47 -j ACCEPT</pre>
на "внешних" интерфейсах обоих филиалов.
на «внешних» интерфейсах обоих филиалов.
Делаем  
Делаем
<pre>ifup gre1</pre>
<pre>ifup gre1</pre>
на обоих сторонах
на обеих сторонах.
Если все хорошо, то дожен появиться сетевой интерфейс
Если солнечная активность в день настройки минимальна, в системе появится сетевой интерфейс gre1, смотрим:
здесь:
<pre># ifconfig gre1
<pre># ifconfig gre1
gre1      Link encap:UNSPEC  HWaddr 3E-7A-38-81-8A-BF-00-05-00-00-00-00-00-00-00-00
gre1      Link encap:UNSPEC  HWaddr 3E-7A-38-81-8A-BF-00-05-00-00-00-00-00-00-00-00
           inet addr:172.17.0.2 P-t-P:172.17.0.1  Mask:255.255.255.252
           inet addr:172.17.0.0 P-t-P:172.17.0.1  Mask:255.255.255.255
           UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
           UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
Строка 54: Строка 51:
gre1: gre/ip  remote y.y.y.y  local x.x.x.x  ttl 64
gre1: gre/ip  remote y.y.y.y  local x.x.x.x  ttl 64
</pre>
</pre>
''Примечание: для нормальной работы OSPF необходимо задать значение TTL для туннеля (например TUNOPTIONS='ttl 64' как у нас), иначе оно будет "inherit" (наследует значение OSPF, которое равно единице, и его multicast рассылки не будут нормально распространяться).''
''Примечание: для нормальной работы OSPF необходимо явно задать значение TTL для строящегося туннеля (например, TUNOPTIONS='ttl 64'). По умолчанию TTL=inherit, что значит «наследовать значение TTL из вкладываемого в туннель пакета». В случае с OSPF, TTL=1, стало быть первый встречный маршрутизатор отбросит такой пакет, что нам совсем не нужно.''


Проверка работы- пингом удалённого ip gre- туннеля (в нашем случае P-t-P:172.17.0.1)
Проверка работы — пинг удалённой стороны туннельного интерфейса (в нашем случае это 172.17.0.1).
Но по-хорошему нужно ещё этот канал и шифровать, если через него будет передаваться бизнес-информация, т.к. gre сам по себе не шифрует, а только инкапсулирует.
 
Если через этот туннель будет передаваться любая бизнес-информация, то её следует шифровать, чем мы сейчас и займёмся.


=== Шифрование передаваемых данных ===
=== Шифрование передаваемых данных ===
Строка 139: Строка 137:
</pre>
</pre>


в '''/etc/racoon/psk.txt''' указывается ключ шифрования - должен быть одинаков с обоих сторон.
В '''/etc/racoon/psk.txt''' указывается ключ шифрования — должен быть идентичен на обеих сторонах.
IP адрес указывается удалённой стороны
Обратите внимание, y.y.y.y — внешний IP адрес противоположной стороны туннеля:
<pre>у.y.y.y blablabla_secret_code_Kote_2011</pre>
<pre>у.y.y.y blablabla_secret_code_Kote_2011</pre>
Права на файлы:
Права на файлы:
Строка 149: Строка 147:
-rw-r--r--  1 root root  setkey.conf</pre>
-rw-r--r--  1 root root  setkey.conf</pre>


Делаем
Дабы загрузить правила, говорим:
<pre># setkey -f /etc/racoon/setkey.conf</pre>
<pre># setkey -f /etc/racoon/setkey.conf</pre>
дабы загрузить правила.


на удалённой стороне конфиг соответствующий, с естесственной ротацией IP адресов.
На противоположной стороне конфиг соответствующий, за исключением ротации IP адресов (x.x.x.x и y.y.y.y).


Разрешаем на фаерволах 500 tcp и udp порт на обоих машинах опять же на внешних интрефейсах.
Опционально, разрешить порт 500 tcp и udp на внешних интерфейсах в ваших правилах фильтрации трафика.
Врубаем racoon и там и тут (желательно синхронно):
 
Запускаем сервис racoon на обеих сторонах:
<pre># service racoon start</pre>
<pre># service racoon start</pre>


Смотрим в логи /var/log/messages (можно повысить debug-level в racoon.conf)
Смотрим в /var/log/messages (при необходимости и для общего развития можно повысить debug-level в racoon.conf).
Если все поднялось и завязалось - делаем проверку пингом удалённого ip gre- туннеля (может пойти не с первого тыка).
 
Делаем проверку — пинг противоположной стороны GRE туннеля.
 
Вуаля!


=== Динамическая маршрутизация ===
=== Динамическая маршрутизация ===
Динамическая маршрутизация реализована с использование протокола [[ruwp:OSPF]]:
Динамическая маршрутизация реализована с использованием протокола [[ruwp:OSPF|OSPF]]
(англ. Open Shortest Path First) — протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути Алгоритм Дейкстры (Dijkstra’s algorithm). Протокол OSPF был разработан IETF в 1988 году. Последняя версия протокола представлена в RFC 2328. Протокол OSPF представляет собой протокол внутреннего шлюза (Interior Gateway Protocol — IGP). Протокол OSPF распространяет информацию о доступных маршрутах между маршрутизаторами одной автономной системы.
(англ. Open Shortest Path First) — протокола динамической маршрутизации, основанного на технологии отслеживания состояния канала (link-state technology) и использующего алгоритм Дейкстры (Dijkstra’s algorithm) для нахождения кратчайшего пути. Протокол OSPF был разработан IETF в 1988 году. Последняя версия протокола описана в RFC 2328. Протокол OSPF представляет собой протокол внутреннего шлюза (Interior Gateway Protocol — IGP). Протокол OSPF распространяет информацию о доступных маршрутах между маршрутизаторами одной автономной системы.
OSPF предлагает решение следующих задач:
OSPF предлагает решение следующих задач:
*Увеличение скорости сходимости (в сравнении с протоколом RIP2, так как нет необходимости выжидания многократных тайм-аутов по 30с);
* Увеличение скорости сходимости (в сравнении с протоколом RIP2, так как нет необходимости выжидания многократных тайм-аутов по 30 сек.);
*Поддержка сетевых масок переменной длины (VLSM);
* Поддержка сетевых масок переменной длины (VLSM);
*Достижимость сети (быстро обнаруживаются отказавшие маршрутизаторы, и топология сети изменяется соответствующим образом);
* Достижимость сети (быстро обнаруживаются отказавшие маршрутизаторы и топология сети изменяется соответствующим образом);
*Оптимальное использование пропускной способности (т.к строится минимальный остовный граф по алгоритму Дейкстры);
* Оптимальное использование пропускной способности (так как строится минимальный остовный граф по алгоритму Дейкстры);
*Метод выбора пути.
* Метод выбора пути.
 
Функциональность OSPF содержится в пакете Quagga, пережившем не только животное (подвид южноафриканской зебры), давшее ему название, но и проект GNU Zebra, благодаря усовершенствованию которого проект Quagga в своё время появился на свет.
Quagga поддерживает следующие протоколы маршрутизации:
* собственно OSPF v2 — демон ospfd;
* RIP v1, v2 — демон ripd;
* OSPF v3 IPv6 — демон ospf6d;
* RIP ng IPv6 — демон ripngd;
* BGP v4+, включая поддержку multicast и IPv6 — демон bgpd;
Базовым ядром Quagga является демон маршрутной информации zebra, выполняющий роль промежуточного уровня абстракции (abstraction layer) ядра ОС, и предоставляющий Zserv API клиентам (демонам маршрутизации) по протоколу TCP.
 
Суть такова:
Демоны маршрутизации просчитывают маршруты по своему протоколу и выдают результаты zebra, который выбирает лучший маршрут на основе административного расстояния и добавляет его в таблицу маршрутизации.


Устанавливается с пакетом quagga, в который входят так же протоколы
От теории к практике, установка:
*ospfd (протокол OSPFv2);
*ripd (протокол RIP v1, V2);
*ospf6d (протокол OSPFv3 IPv6);
*ripngd (протокол RIP ng IPv6);
*bgpd (протокол BGPv4+, включая поддержку multicast и IPv6)).
а так же демон zebra.
Работает схема так:
Демоны динамической маршрутизации (какие включены) каждый просчитывает свои маршруты по своему протоколу и выдает результаты зебре, которая на основе административного расстояния выбирает лучший маршрут и добавляет в главную таблицу маршрутизации.
Установка:
<pre>
<pre>
# apt-get install quagga</pre>
# apt-get install quagga</pre>
Обратите внимание, что необходимо сменить права на папку /etc/quagga и все ёе содержимое на quagga:quagga:
Обратите внимание на то, что необходимо рекурсивно сменить права на папку /etc/quagga:
<pre>chown -R quagga:quagga /etc/quagga </pre>
<pre>chown -R quagga:quagga /etc/quagga </pre>
Не нужные протоколы прячем в папку samples(например), оставляем только ospfd.conf и zebra.conf:
Конфиги неиспользуемых протоколов переносим в папку samples (например), оставляем только ospfd.conf и zebra.conf:
<pre># ls -la /etc/quagga/
<pre># ls -la /etc/quagga/
-rw-------  1 quagga quagga  783 Дек 30 22:07 ospfd.conf
-rw-------  1 quagga quagga  783 Дек 30 22:07 ospfd.conf
Строка 255: Строка 259:
!
!
</pre>
</pre>
Опять же конфиги второй стороны зеркальны.
Опять же, конфиги противоположной стороны в плане соответствующих IP адресов зеркальны.
Запуск и настройка автозапуска:
Запуск и настройка запуска при старте системы:
<pre>
<pre>
service zebra start
service ospfd start
service ospfd start
service zebra start
chkconfig ospfd on
chkconfig ospfd on
chkconfig zebra on
chkconfig zebra on
Строка 267: Строка 271:
tcp        0      0 127.0.0.1:2604              0.0.0.0:*                  LISTEN      13294/ospfd
tcp        0      0 127.0.0.1:2604              0.0.0.0:*                  LISTEN      13294/ospfd
</pre>
</pre>
Интерфейс конфигурирования практически идентичен цисковскому. Для подключения к нему необходимо выполнить:
Интерфейс конфигурирования практически идентичен цисковскому. Для подключения к консоли zebra или ospfd, соответственно, необходимо выполнить:
<pre>
<pre>
telnet 127.0.0.1 2601     {консоль зебры}
telnet 127.0.0.1 2601
telnet 127.0.0.1 2604     {консоль OSPFD}
telnet 127.0.0.1 2604
</pre>
</pre>
Пароли все по умолчанию и на доступ и на enable — ''cisco''.
Все пароли по умолчанию ''cisco''.
Если обе стороны сконфигурированы правильно, то в консоле ospfd можно увидеть:
Если обе стороны сконфигурированы правильно, то в консоли ospfd можно увидеть:
<pre>
<pre>
# telnet 127.1 2604
# telnet 127.0.0.1 2604
Trying 127.0.0.1...
Trying 127.0.0.1...
Connected to 127.1.
Connected to 127.0.0.1.
Escape character is '^]'.
Escape character is '^]'.
User Access Verification
User Access Verification
Строка 283: Строка 287:
HOST-X> enable
HOST-X> enable
Password:
Password:
KIEV1-RTR# sh ip ospf neighbor
HOST-X# sh ip ospf neighbor
     Neighbor ID Pri State          Dead Time Address        Interface            RXmtL RqstL DBsmL
     Neighbor ID Pri State          Dead Time Address        Interface            RXmtL RqstL DBsmL
192.168.2.1    1 Full/DROther      54.982s 172.17.0.1      gre1:172.17.0.2          0    0    0
192.168.2.1    1 Full/DROther      54.982s 172.17.0.1      gre1:172.17.0.2          0    0    0
</pre>
</pre>
А в таблице маршрутизации появится новый маршрут (или несколько):
В таблице маршрутизации появится новый маршрут (или несколько):
<pre>
<pre>
# ip ro sh
# ip ro sh
Строка 295: Строка 299:
</pre>
</pre>
--[[Участник:Sudmal|Сунцов Дмитрий]] 21:29, 20 января 2011 (UTC)
--[[Участник:Sudmal|Сунцов Дмитрий]] 21:29, 20 января 2011 (UTC)
{{Category navigation|title=VPN|category=VPN|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 12:24, 19 июля 2015

Исходные данные

Схема такой сети масштабируема от двух офисов до довольно большой сети крупного предприятия. Применение OSPF позволяет не прописывать маршруты вручную на каждом из маршрутизаторов сети удалённых филиалов, а также позволяет организовать несколько резервных каналов с автоматическим переключением. Начнём с простого — два филиала, на каждом в качестве маршрутизатора стоит Linux.

                     |------|                            |------|
192.168.1.0/24 ------|Linux |-x.x.x.x~~~~~~~~~~~y.y.y.y- |Linux |--------192.168.2.0/24
                     |------|                            |------|

Решение

Туннели

OSPF роутеры используют IP multicast для обмена сообщениями, поэтому необходимо использовать туннели GRE over IP. В ALT linux Ark 5 поддержка таких туннелей идёт из коробки. Конфиги: папка /etc/net/ifaces/gre1 (её нужно создать вручную, как и нижеприведенные файлы): /etc/net/ifaces/gre1/ipv4address:

172.17.0.0 peer 172.17.0.1

/etc/net/ifaces/gre1/options:

TUNLOCAL=x.x.x.x
TUNREMOTE=y.y.y.y
TUNTYPE=gre
TYPE=iptun
TUNTTL=64
TUNMTU=1476
TUNOPTIONS='ttl 64'
DISABLE=no

Настройки противоположной стороны идентичны, необходимо лишь поменять местами IP адреса в TUNLOCAL и TUNREMOTE.

Разрешить 47 IP протокол (GRE) в ваших правилах фильтрации трафика:

iptables -I INPUT -i eth1 -p 47 -j ACCEPT
iptables -I OUTPUT -o eth1 -p 47 -j ACCEPT

на «внешних» интерфейсах обоих филиалов. Делаем

ifup gre1

на обеих сторонах. Если солнечная активность в день настройки минимальна, в системе появится сетевой интерфейс gre1, смотрим:

# ifconfig gre1
gre1      Link encap:UNSPEC  HWaddr 3E-7A-38-81-8A-BF-00-05-00-00-00-00-00-00-00-00
          inet addr:172.17.0.0  P-t-P:172.17.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 MiB)

и здесь:

# ip tu sh
gre0: gre/ip  remote any  local any  ttl inherit  nopmtudisc
gre1: gre/ip  remote y.y.y.y  local x.x.x.x  ttl 64

Примечание: для нормальной работы OSPF необходимо явно задать значение TTL для строящегося туннеля (например, TUNOPTIONS='ttl 64'). По умолчанию TTL=inherit, что значит «наследовать значение TTL из вкладываемого в туннель пакета». В случае с OSPF, TTL=1, стало быть первый встречный маршрутизатор отбросит такой пакет, что нам совсем не нужно.

Проверка работы — пинг удалённой стороны туннельного интерфейса (в нашем случае это 172.17.0.1).

Если через этот туннель будет передаваться любая бизнес-информация, то её следует шифровать, чем мы сейчас и займёмся.

Шифрование передаваемых данных

Устанавливаем ipsec_tools

apt-get install ipsec-tools

Конфиги: /etc/racoon/racoon.conf:

path include "/etc/racoon/";
path pre_shared_key "/etc/racoon/psk.txt";

log notify; # notify,debug,debug2
# "padding" defines some parameter of padding.  You should not touch these.
        padding
        {
          maximum_length 20;
          randomize off;
          strict_check off;
          exclusive_tail off;
        }

        # if no listen directive is specified, racoon will listen to all
        # available interface addresses.
        listen
        {
          isakmp x.x.x.x [500];
        }

        # Specification of default various timer.

        timer
        {
        # These value can be changed per remote node.
          counter 5;# maximum trying count to send.
          interval 20 sec;# maximum interval to resend.
          persend 1;# the number of packets per a send.

        # timer for waiting to complete each phase.
          phase1 30 sec;
          phase2 15 sec;
        }


# 
remote y.y.y.y
        {
            exchange_mode main;
            #exchange_mode aggressive;
            doi ipsec_doi;
            situation identity_only;
            nonce_size 16;
            lifetime time 60 min;
            initial_contact on;
            support_proxy on;
            proposal_check obey;# obey, strict or claim
            proposal {
                    encryption_algorithm 3des;
                    hash_algorithm sha1;
                    authentication_method pre_shared_key;
                    dh_group 2;
                 }
        }
        
        # Шифруем только GRE
        sainfo  address x.x.x.x/32 47 address y.y.y.y/32 47 
        {
            pfs_group 2;
            lifetime time 24 hour;
            encryption_algorithm 3des;
            authentication_algorithm hmac_sha1;
            compression_algorithm deflate;
        }

/etc/racoon/setkey.conf:

#!/sbin/setkey -f

flush;
spdflush;

spdadd x.x.x.x/32 y.y.y.y/32 47 -P out ipsec esp/tunnel/x.x.x.x-y.y.y.y/unique;
spdadd y.y.y.y/32 x.x.x.x/32 47 -P in  ipsec esp/tunnel/y.y.y.y-x.x.x.x/unique;

В /etc/racoon/psk.txt указывается ключ шифрования — должен быть идентичен на обеих сторонах. Обратите внимание, y.y.y.y — внешний IP адрес противоположной стороны туннеля:

у.y.y.y blablabla_secret_code_Kote_2011

Права на файлы:

# l
...
-rw-------   1 root root  psk.txt
-rw-r--r--   1 root root  racoon.conf
-rw-r--r--   1 root root  setkey.conf

Дабы загрузить правила, говорим:

# setkey -f /etc/racoon/setkey.conf

На противоположной стороне конфиг соответствующий, за исключением ротации IP адресов (x.x.x.x и y.y.y.y).

Опционально, разрешить порт 500 tcp и udp на внешних интерфейсах в ваших правилах фильтрации трафика.

Запускаем сервис racoon на обеих сторонах:

# service racoon start

Смотрим в /var/log/messages (при необходимости и для общего развития можно повысить debug-level в racoon.conf).

Делаем проверку — пинг противоположной стороны GRE туннеля.

Вуаля!

Динамическая маршрутизация

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

  • Увеличение скорости сходимости (в сравнении с протоколом RIP2, так как нет необходимости выжидания многократных тайм-аутов по 30 сек.);
  • Поддержка сетевых масок переменной длины (VLSM);
  • Достижимость сети (быстро обнаруживаются отказавшие маршрутизаторы и топология сети изменяется соответствующим образом);
  • Оптимальное использование пропускной способности (так как строится минимальный остовный граф по алгоритму Дейкстры);
  • Метод выбора пути.

Функциональность OSPF содержится в пакете Quagga, пережившем не только животное (подвид южноафриканской зебры), давшее ему название, но и проект GNU Zebra, благодаря усовершенствованию которого проект Quagga в своё время появился на свет. Quagga поддерживает следующие протоколы маршрутизации:

  • собственно OSPF v2 — демон ospfd;
  • RIP v1, v2 — демон ripd;
  • OSPF v3 IPv6 — демон ospf6d;
  • RIP ng IPv6 — демон ripngd;
  • BGP v4+, включая поддержку multicast и IPv6 — демон bgpd;

Базовым ядром Quagga является демон маршрутной информации zebra, выполняющий роль промежуточного уровня абстракции (abstraction layer) ядра ОС, и предоставляющий Zserv API клиентам (демонам маршрутизации) по протоколу TCP.

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

От теории к практике, установка:

# apt-get install quagga

Обратите внимание на то, что необходимо рекурсивно сменить права на папку /etc/quagga:

chown -R quagga:quagga /etc/quagga 

Конфиги неиспользуемых протоколов переносим в папку samples (например), оставляем только ospfd.conf и zebra.conf:

# ls -la /etc/quagga/
-rw-------   1 quagga quagga   783 Дек 30 22:07 ospfd.conf
drwxr-xr-x   2 quagga quagga  4096 Мар 26  2010 samples
-rw-------   1 quagga quagga   529 Дек 30 22:08 zebra.conf

/etc/quagga/ospfd.conf:

!
hostname host-x
password 8 LrjDz/a2KALVQ
enable password 8 LrjDz/a2KALVQ
log file /var/log/quagga/ospfd.log informational
service password-encryption
no banner motd
!
interface gre0
!
interface gre1
 description link-gre1
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 SecrEtKeY
 ip ospf cost 100
 ip ospf dead-interval 60
!
interface lo
!
router ospf
 ospf router-id 192.168.1.1
 redistribute connected route-map RedistNets
 network 172.17.0.0/30 area 0.0.0.0
!
access-list 111 permit ip 192.168.1.0 0.0.0.255 any
access-list localhost permit 127.0.0.1/32
access-list localhost deny any
!
route-map RedistNets permit 10
 match ip address 111
!
line vty
 access-class localhost

/etc/quagga/zebra.conf

hostname router
password 8 LrjDz/a2KALVQ
enable password 8 LrjDz/a2KALVQ
log file /var/log/quagga/zebra.log informational
service password-encryption
no banner motd
!
interface gre0
!
interface gre1
 ip address 172.17.0.2/30
 link-detect
!
interface lo
 description loopback
!
access-list localhost permit 127.0.0.1/32
access-list localhost deny any
!
ip forwarding
no ipv6 forwarding
!
line vty
 access-class localhost
!

Опять же, конфиги противоположной стороны в плане соответствующих IP адресов зеркальны. Запуск и настройка запуска при старте системы:

service zebra start
service ospfd start
chkconfig ospfd on
chkconfig zebra on
# netstat -nlp |grep :260
tcp        0      0 127.0.0.1:2600              0.0.0.0:*                   LISTEN      13362/zebra
tcp        0      0 127.0.0.1:2601              0.0.0.0:*                   LISTEN      13362/zebra
tcp        0      0 127.0.0.1:2604              0.0.0.0:*                   LISTEN      13294/ospfd

Интерфейс конфигурирования практически идентичен цисковскому. Для подключения к консоли zebra или ospfd, соответственно, необходимо выполнить:

telnet 127.0.0.1 2601
telnet 127.0.0.1 2604

Все пароли по умолчанию cisco. Если обе стороны сконфигурированы правильно, то в консоли ospfd можно увидеть:

# telnet 127.0.0.1 2604
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
User Access Verification
Password:
HOST-X> enable
Password:
HOST-X# sh ip ospf neighbor
    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.2.1     1 Full/DROther      54.982s 172.17.0.1       gre1:172.17.0.2           0     0     0

В таблице маршрутизации появится новый маршрут (или несколько):

# ip ro sh
192.168.2.0/24 via 172.17.0.1 dev gre1  proto zebra  metric 20
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1
default via x.x.x.x dev eth1

--Сунцов Дмитрий 21:29, 20 января 2011 (UTC)