MikroTik Для больших дядей часть 3

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

Васильев Кирилл MikroTik Vasilev Kirill MPLS Для больших дядей

Как вы, наверное, помните интерфейс между маршрутизаторами 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

Васильев Кирилл MikroTik Vasilev Kirill MPLS Для больших дядей

Так происходит, так как цена у маршрутов одинаковая. У каждого маршрутизатора есть “начальная цена” маршрута, начальная цена задаётся в 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.

Васильев Кирилл MikroTik Vasilev Kirill MPLS Для больших дядей

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

[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 если останется только кольцо.

Васильев Кирилл MikroTik Vasilev Kirill MPLS Для больших дядей

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

Васильев Кирилл MikroTik Vasilev Kirill MPLS Для больших дядей

Соответственно мы должны установить такую цену на интерфейсе между 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

Задачи

Поделиться

Обсуждение