Привет! Если я правильно понял, фильтры маршрутизации обрабатываются сверху вниз в рамках одной цепочки. У каждого правила в фильтрах есть номер правила. Например, вывод routing filter print:
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
2 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
В чем назначение этого номера правила? Ведь очевидно, что он никак не влияет на фактический порядок обработки правил. Например, я могу переместить правило #2 из IPV4-TRANSIT-OUT на первое место вот так:
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
2 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
И это сильно запутывает, если просто смотреть на список. Поэтому у меня такой вопрос: есть ли разница в обработке, если делать вышеописанные изменения и перемещать правила внутри цепочки, не группируя их вместе, но сохраняя порядок? Если разницы нет, может, Mikrotik стоит изменить или добавить так, чтобы номера правил присваивались с группировкой по цепочкам. Например:
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
2 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
Ещё один пример: если вывести правила для одной цепочки, например routing filter print where chain=IPV4-TRANSIT-IN, номера будут отсчитываться от 0 и дальше. Это подтверждает, что номера правил — это просто счётчик для вывода, который на самом деле не связан с конкретным правилом.
Ещё больше путаницы вносит такой вывод для цепочки IPV4-TRANSIT-OUT:
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
2 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
Если я хочу, например, переместить правило #1 на позицию #0, то я не могу использовать номера из этого вывода, а должен ориентироваться на номера, которые показаны при выводе всех правил вместе, то есть при routing filter print:
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
2 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
И тогда команда перемещения будет выглядеть так: routing filter move numbers=3 destination=2
Извиняюсь за сумбурный пост. Надеюсь, кто-то поймёт и скажет, делаю ли я что-то не так, или может быть, Mikrotik стоит сделать так, чтобы номера правил были привязаны к конкретной цепочке. Пример для сравнения — Cisco с их "route-map IPV4-TRANSIT-OUT permit 10", "permit 20" и так далее.
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
2 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
В чем назначение этого номера правила? Ведь очевидно, что он никак не влияет на фактический порядок обработки правил. Например, я могу переместить правило #2 из IPV4-TRANSIT-OUT на первое место вот так:
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
2 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
И это сильно запутывает, если просто смотреть на список. Поэтому у меня такой вопрос: есть ли разница в обработке, если делать вышеописанные изменения и перемещать правила внутри цепочки, не группируя их вместе, но сохраняя порядок? Если разницы нет, может, Mikrotik стоит изменить или добавить так, чтобы номера правил присваивались с группировкой по цепочкам. Например:
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
2 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
Ещё один пример: если вывести правила для одной цепочки, например routing filter print where chain=IPV4-TRANSIT-IN, номера будут отсчитываться от 0 и дальше. Это подтверждает, что номера правил — это просто счётчик для вывода, который на самом деле не связан с конкретным правилом.
Ещё больше путаницы вносит такой вывод для цепочки IPV4-TRANSIT-OUT:
0 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
1 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
2 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
Если я хочу, например, переместить правило #1 на позицию #0, то я не могу использовать номера из этого вывода, а должен ориентироваться на номера, которые показаны при выводе всех правил вместе, то есть при routing filter print:
0 chain=IPV4-TRANSIT-IN invert-match=no action=accept set-bgp-local-pref=100 set-bgp-prepend-path="" set-bgp-med=5000
1 chain=IPV4-TRANSIT-IN invert-match=no action=discard set-bgp-prepend-path=""
2 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-as-path=^$ invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
3 chain=IPV4-TRANSIT-OUT match-chain=IPV4-WORLD-OUT bgp-communities=41281:9000 invert-match=no action=accept set-bgp-prepend-path="" set-bgp-med=1000
4 chain=IPV4-TRANSIT-OUT invert-match=no action=discard set-bgp-prepend-path=""
И тогда команда перемещения будет выглядеть так: routing filter move numbers=3 destination=2
Извиняюсь за сумбурный пост. Надеюсь, кто-то поймёт и скажет, делаю ли я что-то не так, или может быть, Mikrotik стоит сделать так, чтобы номера правил были привязаны к конкретной цепочке. Пример для сравнения — Cisco с их "route-map IPV4-TRANSIT-OUT permit 10", "permit 20" и так далее.
