Настройка OSPF на Juniper

В качестве примера работы и настройки OSPF на маршрутизаторах junos предлагаю собрать следующую схему на эмуляторе GNS3. Она будет включать в себя 2 физических содержащих 3 логических маршрутизатора. Логическими маршрутизаторами являются VR(virtual-router),  по функционалу ничем не отличающиеся от своих физических братьев. К слову, по умолчанию, все в среде Junos находится в дефолтном.

Логическая схема выглядит вот так:

Физическая, на GNS3 будет выглядеть так:

Коммутатор sw4 нужty для связи виртуальных роутеров внутри физического. Для наглядности все интерфейсы находятся во вланах.

Начнем с настройки первого роутера, вот его конфигурация интерфейсов:

admin@host1> show configuration interfaces
em0 {
    vlan-tagging;
    unit 1012 {
        description TO-HOST2;
        vlan-id 1012;
        family inet {
            address 172.16.2.2/24;
        }
    }
}
lo0 {
    unit 0 {
        family inet {
            address 11.11.11.11/32;
        }
    }
}

тут все просто, и конфигурация проколов:

admin@host1> show configuration protocols
ospf {
    area 0.0.0.0 {
        interface em0.1012;
        interface lo0.0;
    }
}

Тем самым мы «поднимаем» протокол ospf на роутере host1.  Как видно, тут мы указываем «имя зоны», в данном случае 0(0.0.0.0) и указываем, какие интерфейсы принадлежат этой зоне. тут все просто, каких либо пояснений приводить не буду.

Перейдем ко host2.

Настроим интерфейсы, согласно схеме:

admin@host2> show configuration interfaces
em0 {
    vlan-tagging;
    unit 1012 {
        description TO-HOST1;
        vlan-id 1012;
        family inet {
            address 172.16.2.1/24;
        }
    }
}
em1 {
    vlan-tagging;
    unit 11 {
        description TO-VR2;
        vlan-id 11;
        family inet {
            address 10.0.2.1/24;
        }
    }
}
em3 {
    vlan-tagging;
    unit 11 {
        description TO-VRdef;
        vlan-id 11;
        family inet {
            address 10.0.2.2/24;
        }
    }
}
lo0 {
    unit 0 {
        family inet {
            address 3.3.3.3/32;
        }
    }
    unit 1 {
        family inet {
            address 4.4.4.4/32;
        }
    }
}

Далее создадим виртуальный роутер. Как обычно — все просто:

admin@host2> configure
Entering configuration mode

[edit]
admin@host2# set routing-instances R2 instance-type virtual-router

[edit]
admin@host2# set routing-instances R2 interface em3.11

[edit]
admin@host2# set routing-instances R2 interface lo0.1

Первой строчкой мы указали тип устройства, остальными — «засунули» в устройство порты.

Далее, настроим в виртуальном роутере протокол ospf:

[edit]
admin@host2# edit routing-instances R2

[edit routing-instances R2]
admin@host2# set protocols ospf area 0.0.0.10 interface em3.11

[edit routing-instances R2]
admin@host2# set protocols ospf area 0.0.0.10 interface lo0.1

и посмотрим, что получилось:

[edit routing-instances R2]
admin@host2# show
instance-type virtual-router;
interface em3.11;
interface lo0.1;
protocols {
    ospf {
        area 0.0.0.10 {
            interface em3.11;
            interface lo0.1;
        }
    }
}

Сразу же настроим ospf в дефолтном виртуальном роутере. Тут надо настроить сразу две зоны:

admin@host2# edit protocols ospf

[edit protocols ospf]
admin@host2# set area 0.0.0.0 interface em0.1012

[edit protocols ospf]
admin@host2# set area 0.0.0.0 interface lo0.0

[edit protocols ospf]
admin@host2#

[edit protocols ospf]
admin@host2# set area 0.0.0.10 interface em1.11

Иногда роутер может содержать свои сети, для нужд, скажем PPPoE. Эти сети необходимо прописать в «нуль», укажем эти сети, будто наш host2 является их владельцем:

[edit]
admin@host2# set routing-options static route 22.22.22.0/24 reject

Мы прописали сеть на втором хосте, но никому ее не отдавали. Непорядок. Давайте поделимся ей с первым хостом. Убеждаемся, что ее нет на первом хосту:

admin@host1> show route 22.22.22.0/24

admin@host1>

Создаем политику на втором хосту:

admin@host2> configure
Entering configuration mode

[edit]
admin@host2# edit policy-options policy-statement STATIC-to-OSPF

[edit policy-options policy-statement STATIC-to-OSPF]
admin@host2# set term 1 from protocol static

[edit policy-options policy-statement STATIC-to-OSPF]
admin@host2# set term 1 then accept

И экспортируем ее:

[edit]
admin@host2# set protocols ospf export STATIC-to-OSPF

[edit]
admin@host2# commit and-quit
commit complete
Exiting configuration mode

Проверяем:

admin@host1> show route 22.22.22.0/24

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

22.22.22.0/24      *[OSPF/150] 00:00:10, metric 0, tag 0
                    > to 172.16.2.1 via em0.1012

Вот и наш маршрут).

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

Смотрим соседей с host2:

admin@host2> show ospf neighbor
Address          Interface              State     ID               Pri  Dead
172.16.2.2       em0.1012               Full      11.11.11.11      128    36
10.0.2.2         em1.11                 Full      4.4.4.4          128    38

У нас два соседа, первый, это host1, второй — виртуальная машина R2. Что тут вообще показано?

Первая колонка — это адреса соседей, вторая, через какой интерфейс его видно, State — статус. ID — идентификатор соседа, если он прямо не указан, то используется адрес лупбека, а если его нет, то наименьший адрес интерфейса. Pri — приоритет маршрутизатора, используется для выборов DR и BDR. И последний столбец — «время смерти», это таймер обратного отсчета, в промежуток которого сосед должен успеть отправить hello пакет, иначе он будет считаться «мертвым».

Глянем теперь маршруты:

admin@host2> show route

inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[Direct/0] 00:07:36
                    > via lo0.0
4.4.4.4/32         *[OSPF/10] 00:06:45, metric 10
                    > to 10.0.2.2 via em1.11
10.0.2.0/24        *[Direct/0] 00:07:40
                    > via em1.11
10.0.2.1/32        *[Local/0] 00:07:40
                      Local via em1.11
11.11.11.11/32     *[OSPF/10] 00:05:38, metric 10
                    > to 172.16.2.2 via em0.1012
22.22.22.0/24      *[Static/5] 00:07:40
                      Reject
172.16.2.0/24      *[Direct/0] 00:07:41
                    > via em0.1012
172.16.2.1/32      *[Local/0] 00:07:41
                      Local via em0.1012
224.0.0.5/32       *[OSPF/10] 00:07:45, metric 1
                      MultiRecv

R2.inet.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:06:49, metric 2501
                    > to 10.0.2.1 via em3.11
4.4.4.4/32         *[Direct/0] 00:07:35
                    > via lo0.1
10.0.2.0/24        *[Direct/0] 00:07:35
                    > via em3.11
10.0.2.2/32        *[Local/0] 00:07:35
                      Local via em3.11
11.11.11.11/32     *[OSPF/10] 00:05:36, metric 11
                    > to 10.0.2.1 via em3.11
22.22.22.0/24      *[OSPF/150] 00:06:49, metric 0, tag 0
                    > to 10.0.2.1 via em3.11
172.16.2.0/24      *[OSPF/10] 00:06:49, metric 11
                    > to 10.0.2.1 via em3.11
224.0.0.5/32       *[OSPF/10] 00:07:45, metric 1
                      MultiRecv

Тут выдаются маршруты сразу из обоих виртуальных роутеров(дефолтный — inet.0 и созданный нами — R2.inet.0). Как видно, есть маршруты полученные по OSPF([OSPF/10]), локальные для роутера(Local), полученные через прямой стык(Direct), ну и прописанные на роутере в «нуль»(Static).

Для просмотра отдельно, например виртуального роутера используем команду:

admin@host2> show route table R2

R2.inet.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:10:21, metric 2501
                    > to 10.0.2.1 via em3.11
4.4.4.4/32         *[Direct/0] 00:11:07
                    > via lo0.1
10.0.2.0/24        *[Direct/0] 00:11:07
                    > via em3.11
10.0.2.2/32        *[Local/0] 00:11:07
                      Local via em3.11
11.11.11.11/32     *[OSPF/10] 00:09:08, metric 11
                    > to 10.0.2.1 via em3.11
22.22.22.0/24      *[OSPF/150] 00:10:21, metric 0, tag 0
                    > to 10.0.2.1 via em3.11
172.16.2.0/24      *[OSPF/10] 00:10:21, metric 11
                    > to 10.0.2.1 via em3.11
224.0.0.5/32       *[OSPF/10] 00:11:17, metric 1
                      MultiRecv

Глянем, что у нас в базе:

admin@host2> show ospf database

    OSPF database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len
Router  *3.3.3.3          3.3.3.3          0x80000005   613  0x22 0xcfd1  48
Router   11.11.11.11      11.11.11.11      0x80000007   538  0x22 0x49ce  48
Network *172.16.2.1       3.3.3.3          0x80000002   613  0x22 0x2c09  32
Summary *4.4.4.4          3.3.3.3          0x80000001   675  0x22 0xda3c  28
Summary *10.0.2.0         3.3.3.3          0x80000004   675  0x22 0xf423  28

    OSPF database, Area 0.0.0.10
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len
Router  *3.3.3.3          3.3.3.3          0x80000003   684  0x22 0xb140  36
Router   4.4.4.4          4.4.4.4          0x80000004   681  0x22 0x7e55  48
Network  10.0.2.2         4.4.4.4          0x80000002   681  0x22 0x9767  32
Summary *3.3.3.3          3.3.3.3          0x80000002   724  0x22 0xa3b2  28
Summary *11.11.11.11      3.3.3.3          0x80000001   608  0x22 0x9763  28
Summary *172.16.2.0       3.3.3.3          0x80000005   613  0x22 0xef74  28
    OSPF AS SCOPE link state database
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len
Extern  *22.22.22.0       3.3.3.3          0x80000002   121  0x22 0x89d9  36

И интерфейсы:

admin@host2> show ospf interface detail
Interface           State   Area            DR ID           BDR ID          Nbrs
em0.1012            DR      0.0.0.0         3.3.3.3         11.11.11.11        1
  Type: LAN, Address: 172.16.2.1, Mask: 255.255.255.0, MTU: 1500, Cost: 1
  DR addr: 172.16.2.1, BDR addr: 172.16.2.2, Priority: 128
  Adj count: 1
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 10
lo0.0               DR      0.0.0.0         3.3.3.3         0.0.0.0            0
  Type: LAN, Address: 3.3.3.3, Mask: 255.255.255.255, MTU: 65535, Cost: 2500
  DR addr: 3.3.3.3, Priority: 128
  Adj count: 0
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 2500
em1.11              BDR     0.0.0.10        4.4.4.4         3.3.3.3            1
  Type: LAN, Address: 10.0.2.1, Mask: 255.255.255.0, MTU: 1500, Cost: 10
  DR addr: 10.0.2.2, BDR addr: 10.0.2.1, Priority: 128
  Adj count: 1
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 10

Как вы знаете, у каждого интерфейса, есть своя стоимость. Именно ей оперирует маршрутизатор, когда строит свое дерево для работы протокола OSPF. Для em0.1012 стоимость у нас 1. Мы можем указать его более «вкусным» для протокола OSPF:

[edit protocols ospf]
admin@host2# set reference-bandwidth 10G

Теперь глянем, каким он стал для OSPF:

admin@host2> show ospf interface detail
Interface           State   Area            DR ID           BDR ID          Nbrs
em0.1012            BDR     0.0.0.0         11.11.11.11     3.3.3.3            1
  Type: LAN, Address: 172.16.2.1, Mask: 255.255.255.0, MTU: 1500, Cost: 10
  DR addr: 172.16.2.2, BDR addr: 172.16.2.1, Priority: 128
  Adj count: 1
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 10
lo0.0               DR      0.0.0.0         3.3.3.3         0.0.0.0            0
  Type: LAN, Address: 3.3.3.3, Mask: 255.255.255.255, MTU: 65535, Cost: 0
  DR addr: 3.3.3.3, Priority: 128
  Adj count: 0
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 0
em1.11              BDR     0.0.0.10        4.4.4.4         3.3.3.3            1
  Type: LAN, Address: 10.0.2.1, Mask: 255.255.255.0, MTU: 1500, Cost: 10
  DR addr: 10.0.2.2, BDR addr: 10.0.2.1, Priority: 128
  Adj count: 1
  Hello: 10, Dead: 40, ReXmit: 5, Not Stub
  Auth type: None
  Protection type: None
  Topology default (ID 0) -> Cost: 10

Стоимость стала 10. Подробнее — ищите в теории)

Побалуемся не много с метрикой. Допустим, изменим метрику lo0.0.

Так он выглядит «дома»

admin@host2> show route 3.3.3.3/32

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[Direct/0] 01:13:11
                    > via lo0.0

R2.inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:30:22, metric 1
                    > to 10.0.2.1 via em3.11

А так на хост1:

admin@host1> show route 22.22.22.0/24

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

22.22.22.0/24      *[OSPF/150] 00:00:10, metric 0, tag 0
                    > to 172.16.2.1 via em0.1012

admin@host1> show route 3.3.3.3/32

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:29:32, metric 1
                    > to 172.16.2.1 via em0.1012

Теперь меняем:

[edit]
admin@host2# edit protocols ospf

[edit protocols ospf]
admin@host2# show
export STATIC-to-OSPF;
reference-bandwidth 10g;
area 0.0.0.0 {
    interface em0.1012;
    interface lo0.0;
}
area 0.0.0.10 {
    interface em1.11;
}

[edit protocols ospf]
admin@host2# set area 0.0.0.0 interface lo0.0 metric 2500

Итог:

admin@host1> show route 3.3.3.3/32

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:29:32, metric 1
                    > to 172.16.2.1 via em0.1012

admin@host1> show route 3.3.3.3/32

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:01:08, metric 2501
                    > to 172.16.2.1 via em0.1012

и

admin@host2> show route 3.3.3.3/32

inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[Direct/0] 01:19:17
                    > via lo0.0

R2.inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

3.3.3.3/32         *[OSPF/10] 00:00:46, metric 2501
                    > to 10.0.2.1 via em3.11

Вот и все. Данная статья служит примером для базовой настройки ospf на маршрутизаторах juniper.