MikroTik Для больших дядей часть 3
На данный момент мы имеем схему сети, указанную на рисунке. Если вы делали всё правильно, то должен работать OSPF и на всех маршрутизаторах должны быть маршруты до всех адресов Loopback интерфейсов всех маршрутизаторов.
Как вы, наверное, помните интерфейс между маршрутизаторами 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
Так происходит, так как цена у маршрутов одинаковая. У каждого маршрутизатора есть “начальная цена” маршрута, начальная цена задаётся в 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.
Изменить цену интерфейса можно с помощью команды
[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 если останется только кольцо.
Посмотрите на схему выше, максимально возможный путь, который всё равно должен быть лучшим по качеству, цена маршрута будет равна 100.
Соответственно мы должны установить такую цену на интерфейсе между 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.
Поделиться
Обсуждение
Лицензия
Текст данной статьи распространяется под общедоступной лицензией CC BY-NC-ND 4.0, ознакомиться с тектом лицензии вы можете на данной странице.