MikroTik для Больших Дядей (Задание 3)

И так третья часть.

На данный момент мы имеем схему сети, указанную на рисунке, если вы делали всё правильно, то у вас должен работать OSPF и на всех маршрутизаторах должны быть маршруты до всех адресов Loopback интерфейсов всех маршрутизаторов.

n3

Как вы, наверное, помните интерфейс между маршрутизаторами P-2 и P-5 имеет статус резервного и его пропускная способность 100Mbps все остальные интерфейсы, связывающие маршрутизаторы между собой, равны по качеству и скорости, и пропускная способность составляет 1Gbps.

OSPF Cost

Если вы посмотрите на таблицу маршрутизации, к примеру на маршрутизаторе P-5, то вы увидите маршрут ECMP, который построился из-за одинаковой цены маршрутов до маршрутизатора P-3. Специально не привожу адреса маршрутизаторов, у вас должно быть всё правильно сделано.

В таком случае если с маршрутизатора P-5 отправится трафик на маршрутизатор P-3, то он будет делиться между маршрутизаторами P-2 и P-6. Нас естественно такой момент не устраивает, так как интерфейс до маршрутизатора P-2 является менее продуктивным, так как его скорость меньше.

[admin@P-5] > /ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
 #      DST-ADDRESS        PREF-SRC        GATEWAY            DISTANCE
 0 ADC  172.31.252.12/30   172.31.252.13   ether1                    0
 1 ADC  172.31.252.16/30   172.31.252.18   ether2                    0
 2 ADC  172.31.252.24/30   172.31.252.26   ether3                    0
 3 ADo  172.31.253.1/32                    172.31.252.17           110
 4 ADo  172.31.253.2/32                    172.31.252.14           110
 5 ADo  172.31.254.1/32                    172.31.252.17           110
 6 ADo  172.31.254.2/32                    172.31.252.14           110
 7 ADo  172.31.255.1/32                    172.31.252.17           110
                                           172.31.252.25     
 8 ADo  172.31.255.2/32                    172.31.252.25           110
 9 ADo  172.31.255.3/32                    172.31.252.14           110
                                           172.31.252.25     
10 ADo  172.31.255.4/32                    172.31.252.17           110
11 ADC  172.31.255.5/32    172.31.255.5    Br-Lo                     0
12 ADo  172.31.255.6/32                    172.31.252.14           110
[admin@P-5] > 

Также есть маршрут ECMP и до P-1 и такую картину вы будете наблюдать на всех маршрутизаторах, противолежащий маршрутизатор доступен сразу через два соседних маршрутизатора.

Где вы можете видеть ECMP

Схема сети MPLS MikroTik by vasilevkirill

Так происходит, так как цена у маршрутов одинаковая. У каждого маршрутизатора есть "начальная цена" маршрута, начальная цена задаётся в instance

[admin@P-5] > /routing ospf instance pr     
Flags: X - disabled, * - default 
 0  * name="default" router-id=172.31.255.5 distribute-default=never 
      redistribute-connected=as-type-1 redistribute-static=no redistribute-rip=no 
      redistribute-bgp=no redistribute-other-ospf=no metric-default=1 metric-connected=20 
      metric-static=20 metric-rip=20 metric-bgp=auto metric-other-ospf=auto
      in-filter=ospf-in out-filter=ospf-out 

Есть предустановленные значения, и как в нашем случае при редистриьюции connected маршрутов начальная цена ровна 20 metric-connected=20, после того как маршрутизатор отправил информацию о своих сетях всем своим соседям, каждый маршрутизатор при получении маршрута через интерфейс прибавил к данному значению цену своего интерфейса, а по умолчанию цена ровна десяти 10.

n3_2

Изменить цену интерфейса можно с помощью команды

[admin@P-5] > /routing ospf interface print                          
Flags: X - disabled, I - inactive, D - dynamic, P - passive 
 #    INTERFACE                      COST PRIORITY NETWORK-TYPE   AUTHENTICATION AUTHENTICATION-KEY
 0  P all                              10        1 default        none                             
 1    ether1                           10        1 broadcast      none                             
 2    ether2                           10        1 broadcast      none                             
 3    ether3                           10        1 broadcast      none                             
[admin@P-5] > /routing ospf interface set cost=100 numbers=2

Обратите внимание, что цена устанавливается к номерам, поэтому сначала выполните команду print и после этого применяйте значение. Также cost можно установить при добавлении интерфейсов в OSPF.

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

Если посмотреть на схему и самый длинный маршрут от P-2 до P-5, то это 4 хопа, так как у нас цена по умолчанию интерфейсов 10, то при самом худшем сценарии маршрут будет иметь цену на маршрутизаторе 60, который сложится из цены интерфейсов 40 и начальной цены (метрики 20). Поэтому вы должны установить такое значение, чтобы данная цена перекрывала худший сценарий, ну а если пойти ещё дальше, то давайте посчитаем, какая цена будет от маршрутизатора CE-1 до P-1 если останется только кольцо.

Схема сети MPLS MikroTik by vasilevkirill

Посмотрите на схему выше, максимально возможный путь, который всё равно должен быть лучшим по качеству, цена маршрута будет равна 100.

Схема сети MPLS MikroTik by vasilevkirill

Соответственно мы должны установить такую цену на интерфейсе между P-2 и P-1, что бы итоговая цена была больше чем 100.

Посчитайте для начала самостоятельно.

Да, конечно если мы установим цену равную 41, то итоговая цена на маршрутизаторе P-1 будет 101, что выше самого длинного пути, соответственно такой путь будет выбираться только в "крайних случаях". Но я рекомендую устанавливать значение кратным 10, в первую очередь из-за того, что проще считать, а во вторую очередь то, что если у вас когда-нибудь появиться ещё один резервный интерфейс и он будет лучше, чем наш текущий резервный интерфейс, то вы сможете "впихнуть" цену таким образом, чтобы он стал "Лучшим среди худших" интерфейсов. =)

Стоит упомянуть, что такой подход будет работать ТОЛЬКО если при редистрибьюции выставлен тип Type-1, в случае с Type-2 внутренние косты не учитываются, а учитывается только внешняя метрика, которую указал маршрутизатор при редистрибьюции (начальная цена). Если на маршрутизатор приходит два маршрута с одинаковым cost и если у данных маршрутов разные типы, то маршрутизатор всегда отдаёт приоритет type-1, в таком случае ECMP строится не будет.

Вы всегда можете посмотреть с какой ценной маршрутизатор использует маршрут

[admin@CE-1] /routing ospf route> pr
 # DST-ADDRESS        STATE          COST                   GATEWAY         INTERFACE              
 0 172.31.252.0/30    intra-area     30                     172.31.252.45   ether1                 
 1 172.31.252.4/30    intra-area     40                     172.31.252.45   ether1                 
 2 172.31.252.8/30    intra-area     50                     172.31.252.45   ether1                 
 3 172.31.252.12/30   intra-area     40                     172.31.252.45   ether1                 
 4 172.31.252.16/30   intra-area     30                     172.31.252.45   ether1                 
 5 172.31.252.20/30   intra-area     30                     172.31.252.45   ether1                 
 6 172.31.252.24/30   intra-area     80                     172.31.252.45   ether1                 
 7 172.31.252.28/30   intra-area     50                     172.31.252.45   ether1                 
 8 172.31.252.32/30   intra-area     50                     172.31.252.45   ether1                 
 9 172.31.252.36/30   intra-area     20                     172.31.252.45   ether1                 
10 172.31.252.40/30   intra-area     20                     172.31.252.45   ether1                 
11 172.31.252.44/30   intra-area     10                     0.0.0.0         ether1                 
12 172.31.252.48/30   intra-area     60                     172.31.252.45   ether1                 
13 172.31.253.1/32    imported-ext-1 20                    
14 172.31.253.2/32    ext-1          80                     172.31.252.45   ether1                 
15 172.31.254.1/32    ext-1          30                     172.31.252.45   ether1                 
16 172.31.254.2/32    ext-1          70                     172.31.252.45   ether1                 
17 172.31.255.1/32    ext-1          40                     172.31.252.45   ether1                 
18 172.31.255.2/32    ext-1          50                     172.31.252.45   ether1                 
19 172.31.255.3/32    ext-1          60                     172.31.252.45   ether1                 
20 172.31.255.4/32    ext-1          40                     172.31.252.45   ether1                 
21 172.31.255.5/32    ext-1          50                     172.31.252.45   ether1    

А также в самой таблице маршрутизации

[admin@CE-1] /ip route> print detail 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
 0 ADC  dst-address=172.31.252.44/30 pref-src=172.31.252.46 gateway=ether1 
        gateway-status=ether1 reachable distance=0 scope=10 

 1 ADC  dst-address=172.31.253.1/32 pref-src=172.31.253.1 gateway=Br-Lo 
        gateway-status=Br-Lo reachable distance=0 scope=10 

 2 ADo  dst-address=172.31.253.2/32 pref-src=172.31.253.1 gateway=172.31.252.45 
        gateway-status=172.31.252.45 reachable via  ether1 distance=110 scope=20 target-scope=10 
        ospf-metric=80 ospf-type=external-type-1 

 3 ADo  dst-address=172.31.254.1/32 pref-src=172.31.253.1 gateway=172.31.252.45 
        gateway-status=172.31.252.45 reachable via  ether1 distance=110 scope=20 target-scope=10 
        ospf-metric=30 ospf-type=external-type-1 

 4 ADo  dst-address=172.31.254.2/32 pref-src=172.31.253.1 gateway=172.31.252.45 
        gateway-status=172.31.252.45 reachable via  ether1 distance=110 scope=20 target-scope=10 
        ospf-metric=70 ospf-type=external-type-1 

 5 ADo  dst-address=172.31.255.1/32 pref-src=172.31.253.1 gateway=172.31.252.45 
        gateway-status=172.31.252.45 reachable via  ether1 distance=110 scope=20 target-scope=10 

Traceroute

Попробуйте выполнить трассировку от CE-1 до CE-2

[admin@CE-1] > /tool traceroute 172.31.253.2
 # ADDRESS                          LOSS SENT    LAST     AVG    BEST   WORST STD-DEV STATUS       
 1 172.31.252.45                      0%    3     5ms      10     4.6    20.5     7.4              
 2                                  100%    3 timeout                                              
 3                                  100%    3 timeout                                              
 4                                  100%    2 timeout                                              
 5                                  100%    2 timeout                                              
 6                                  100%    2 timeout

Конечно трассировка работать не будет, так как на маршрутизаторах нет маршрутов до connected сети 172.31.252.44/30, мы их отфильтровали в прошлом задании. Когда заканчивается TTL маршрутизатор, на котором закончился TTL, должен ответить ICMP о том, что ttl expired. Но так как маршрута до сети отправления нет, ответ мы не получаем.

Всегда держите в голове

При наличии нескольких интерфейсов, когда вы отправляете пакет с маршрутизатора при неуказанном адресе источника адрес отправителя выбирается из значения pref-source того маршрута, через который отправлен пакет.

[admin@CE-1] > /ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
 #      DST-ADDRESS        PREF-SRC        GATEWAY            DISTANCE
 0 ADC  172.31.252.44/30   172.31.252.46   ether1                    0
 1 ADC  172.31.253.1/32    172.31.253.1    Br-Lo                     0
 2 ADo  172.31.253.2/32                    172.31.252.45           110
 3 ADo  172.31.254.1/32                    172.31.252.45           110
 4 ADo  172.31.254.2/32                    172.31.252.45           110
 5 ADo  172.31.255.1/32                    172.31.252.45           110
 6 ADo  172.31.255.2/32                    172.31.252.45           110
 7 ADo  172.31.255.3/32                    172.31.252.45           110
 8 ADo  172.31.255.4/32                    172.31.252.45           110
 9 ADo  172.31.255.5/32                    172.31.252.45           110
10 ADo  172.31.255.6/32                    172.31.252.45           110

Выше таблица маршрутизации с CE-1

Когда маршрутизатор отправляет пакет на адрес CE-02 он выберет маршрут под номером 2, дальше он посмотрит какой указан шлюз в данном маршруте, если НЕ интерфейс, то далее будет искать лучший маршрут уже для адреса шлюза 172.31.252.45, а это будет маршрут под номером 0, именно этот интерфейс будет использован для отправки пакета.

Соответственно если в маршруте 2 не указан pref-source (PREF-SRC), то будет выбран адрес источника уже непосредственно connected маршрута, а в таких маршрутах адрес соответствует установленному адресу на интерфейсе. (Без IP маршрутизатор не останется)

Если мы установим на маршрутах добавленных в таблицу маршрутизации адрес loopback как значение pref-source то при трассировке мы будет видеть IP адреса не интерфейсов а адреса Loopback, что будет удобнее.

НО ВНИМАНИЕ, данный подход можно применять ТОЛЬКО если между маршрутизаторами нет прямой двойной связи, в таком случае вы из трассировке не сможет понять по какому именно интерфейсу вам возвращает трафик маршрутизатор.

В нашем случае а нас по одному соединению между маршрутизаторами поэтому мы можем внедрить данную реализацию.

И так сделаем трассировку для проверки и укажем адрес источника адрес loopback.

[admin@CE-1] > /tool traceroute 172.31.253.2 src-address=172.31.253.1
 # ADDRESS                          LOSS SENT    LAST     AVG    BEST   WORST STD-DEV STATUS       
 1 172.31.252.45                      0%    7   4.2ms     4.8     3.3    10.6     2.4              
 2 172.31.252.41                      0%    7   3.5ms     6.4     3.2    17.5     4.6              
 3 172.31.252.2                       0%    7     6ms     6.9     4.3    15.4     3.6              
 4 172.31.252.6                       0%    7   7.5ms     8.6     5.1    18.6     4.2              
 5 172.31.252.34                      0%    7  10.9ms      16     7.7    50.6    14.2              
 6 172.31.253.2                       0%    7  10.9ms    13.3     6.9    28.8     7.3 

Сейчас мы видим, что нам все маршрутизаторы отвечают с IP адреса интерфейса которым смотрят в нашу сторону.

Теперь установим значение pref-source на всех маршрутизаторах на входящих маршрутах в фильтрах.

Чтобы не переделывать каждый маршрут мы может использовать find чтобы разом установить на все маршруты.

/routing filter set set-pref-src=172.31.253.1 [find chain=ospf-in action=accept] 

Естественно для каждого маршрутизатора свой адрес loopback.

Результатом будет будет установленное значение pref-source на всех маршрутах полученных по OSPF.

[admin@CE-1] /routing filter> /ip route pr interval=2
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
 #      DST-ADDRESS        PREF-SRC        GATEWAY            DISTANCE
 0 ADC  172.31.252.44/30   172.31.252.46   ether1                    0
 1 ADC  172.31.253.1/32    172.31.253.1    Br-Lo                     0
 2 ADo  172.31.253.2/32    172.31.253.1    172.31.252.45           110
 3 ADo  172.31.254.1/32    172.31.253.1    172.31.252.45           110
 4 ADo  172.31.254.2/32    172.31.253.1    172.31.252.45           110
 5 ADo  172.31.255.1/32    172.31.253.1    172.31.252.45           110
 6 ADo  172.31.255.2/32    172.31.253.1    172.31.252.45           110
 7 ADo  172.31.255.3/32    172.31.253.1    172.31.252.45           110
 8 ADo  172.31.255.4/32    172.31.253.1    172.31.252.45           110
 9 ADo  172.31.255.5/32    172.31.253.1    172.31.252.45           110
10 ADo  172.31.255.6/32    172.31.253.1    172.31.252.45           110

Теперь если мы сделаем трассировку с маршрутизатора в ответах мы будет видеть адреса loopback интерфейсов и не IP адресов интерфейсов между маршрутизаторами.

[admin@CE-1] > /tool traceroute 172.31.253.2
 # ADDRESS                          LOSS SENT    LAST     AVG    BEST   WORST STD-DEV STATUS       
 1 172.31.254.1                       0%   80   4.1ms     4.2     2.5    17.9     1.9              
 2 172.31.255.4                       0%   80     5ms       5     2.6    21.4     2.3              
 3 172.31.255.5                       0%   80   6.1ms     6.3     3.6    30.6     3.2              
 4 172.31.255.6                       0%   80   9.3ms     9.2     4.9    59.6     6.8              
 5 172.31.254.2                       0%   80  11.6ms    11.2     7.7      18     2.2              
 6 172.31.253.2                       0%   79    12ms      12     6.4      28     3.9  

Задачи

  • Настроить цену интерфейсам на резервном интерфейсе, так чтобы данный интерфейс участвовал в маршрутизации, только если других вариантов нет. Установите значение cost 50.
  • Укажите во входящих фильтрах OSPF устанавливать значение pref-source как адрес loopback.

Следующий пост с заданием MikroTik для Больших Дядей (Задание 4)

Рассказать друзьям

Чатик телеграм

@mikrotikme