В тази част ще анализираме подробно няколко BGP команди, като обясним значението на всеки параметър.
/routing bgp template
/routing bgp template
set default disabled=no output.network=bgp-networks
add as=47453 name=bgp1 output.network=bgp-networks redistribute=connected,static router-id=87.246.47.65
Анализ на командите:
/routing bgp template
- Тази команда отваря BGP шаблона (template), който служи за конфигуриране на основните параметри на BGP инстанцията.
set default disabled=no output.network=bgp-networks
set default
– Променя стойностите на стандартния BGP шаблон.disabled=no
– Активира BGP процеса.output.network=bgp-networks
– Определя списъка с мрежи, които ще се рекламират чрез BGP.
add as=47453 name=bgp1 output.network=bgp-networks redistribute=connected,static router-id=87.246.47.65
add
– Добавя нова BGP инстанция към рутера.as=47453
– Указва автономната система (AS), в която рутерът ще работи.name=bgp1
– Задава име на BGP инстанцията за по-лесно управление.output.network=bgp-networks
– Указва кои мрежи ще се рекламират от този BGP процес.redistribute=connected,static
– Задава кои маршрути ще бъдат разпространявани чрез BGP (тук са включени свързаните и статичните маршрути).router-id=87.246.47.65
– Определя Router ID, който идентифицира рутера в BGP средата. Това е уникален IP адрес, обикновено зададен на loopback интерфейс.
Този анализ показва как MikroTik RouterOS v7 конфигурира BGP шаблони и задава параметри за основна BGP инстанция. В следващите секции ще разгледаме допълнителни настройки като peer
конфигурации и филтриране на маршрути.
/routing bgp connection
/routing bgp connection
add as=47453 connect=yes input.affinity=alone .filter=gcn-in listen=yes local.role=ebgp name=gcn output.affinity=alone .filter-chain=gcn-out .network=bgp-networks .redistribute=connected,static remote.address=212.70.158.89/32 .as=12615 router-id=87.246.47.65 routing-table=main templates=bgp1
Анализ на командите:
/routing bgp connection
- Тази команда се използва за конфигуриране на BGP връзки между различни AS (Autonomous Systems).
add as=47453
- Определя автономната система, в която се намира рутерът (AS 47453).
connect=yes
- Разрешава връзката с BGP peer-а.
input.affinity=alone
- Определя начин на обработка на входящия трафик (конкретната му функционалност зависи от общата настройка на MikroTik).
.filter=gcn-in
- Приложен входящ BGP филтър
gcn-in
за контрол на входящите маршрути.
- Приложен входящ BGP филтър
listen=yes
- Разрешава BGP процеса да слуша входящи връзки от peer-а.
local.role=ebgp
- Определя типа на връзката –
eBGP
(външен BGP peer).
- Определя типа на връзката –
name=gcn
- Дава име на тази BGP връзка (peer) за по-лесно идентифициране.
output.affinity=alone
- Определя начина на обработка на изходящия трафик.
.filter-chain=gcn-out
- Изходящ BGP филтър за контрол на маршрутите, които ще се рекламират.
.network=bgp-networks
- Определя мрежите, които ще бъдат рекламирани чрез BGP.
.redistribute=connected,static
- Разрешава разпространението на свързаните и статичните маршрути в BGP.
remote.address=212.70.158.89/32
- Определя IP адреса на BGP peer-а (AS 12615).
.as=12615
- Определя автономната система на peer-а (AS 12615).
router-id=87.246.47.65
- Определя Router ID на този рутер за BGP сесиите.
routing-table=main
- Определя коя маршрутна таблица ще се използва за тази BGP връзка.
templates=bgp1
- Свързва тази BGP връзка с предварително конфигуриран BGP шаблон
bgp1
.
Този анализ дава подробна разбивка на BGP връзката и как тя се конфигурира в MikroTik RouterOS v7. В следващите секции ще разгледаме допълнителни настройки като peer
конфигурации, route filters и оптимизации за BGP.
/routing filter rule
/routing filter rule
add chain=gcn-in rule="accept;"
add chain=gcn-out rule="if (dst == 85.118.94.0/24) { accept; }"
add chain=gcn-out rule="if (dst == 85.118.95.0/24) { accept; }"
Анализ на командите:
/routing filter rule
- Тази команда дефинира BGP филтърни правила за входящ и изходящ трафик.
add chain=gcn-in rule="accept;"
- Всички входящи BGP маршрути се приемат без допълнителна проверка.
add chain=gcn-out rule="if (dst == 85.118.94.0/24) { accept; }"
- Рекламира само маршрута към
85.118.94.0/24
към BGP peer-а.
- Рекламира само маршрута към
add chain=gcn-out rule="if (dst == 85.118.95.0/24) { accept; }"
- Рекламира само маршрута към
85.118.95.0/24
към BGP peer-а.
- Рекламира само маршрута към
/ip firewall address-list
/ip firewall address-list
add address=85.118.94.0/24 list=bgp-networks
add address=85.118.95.0/24 list=bgp-networks
служат за създаване на списък с мрежи, който след това се използва в BGP конфигурацията чрез templates=bgp1
.
Как работи това в контекста на BGP?
В конфигурацията на BGP connection виждаме тази част:
/routing bgp connection
add as=47453 connect=yes input.affinity=alone .filter=gcn-in listen=yes local.role=ebgp name=gcn output.affinity=alone .filter-chain=gcn-out .network=bgp-networks .redistribute=connected,static remote.address=212.70.158.89/32 .as=12615 router-id=87.246.47.65 routing-table=main templates=bgp1
.network=bgp-networks → Това указва, че BGP ще анонсира всички мрежи от списъка bgp-networks
.
Предимства на този метод:
- Гъвкавост – Лесно можеш да добавяш или премахваш мрежи от
bgp-networks
, без да променяш самата BGP конфигурация. - Автоматизация – Скриптове или външни системи могат динамично да управляват списъка чрез
/ip firewall address-list
. - Управление на анонси – Мрежите, които искаш да рекламираш, са централизирани и можеш да ги използваш в различни BGP връзки.
Как работи в MikroTik?
- Всеки адрес, добавен в
bgp-networks
, автоматично се анонсира към BGP peer-ите. - Ако премахнеш мрежа от
/ip firewall address-list
, тя ще спре да се рекламира.
Основни елементи: BGP филтри
Филтрите в MikroTik BGP използват специфичен синтаксис, базиран на логически условия и оператори.
if (...) { ... }
- Условен оператор, който изпълнява блок код само ако условието в скобите е вярно.
- Пример:
if (dst == 85.118.94.0/24) { accept; }
-
- Проверява дали дестинацията е
85.118.94.0/24
, ако да – приема маршрута.
- Проверява дали дестинацията е
Оператори за сравнение:
==
→ Проверява дали стойностите са равни.
if (bgp-as-path == 12615) { accept; }
!=
→ Проверява дали стойностите са различни.
in
→ Проверява дали дадена стойност принадлежи на даден диапазон.
if (dst in 85.217.200.0/22) { accept; }
dst-len in 24..32
→ Проверява дали дължината на префикса е между/24
и/32
.
Логически оператори:
&&
→ Логическо “И” (и двете условия трябва да са верни).
if (dst in 85.217.200.0/22 && dst-len in 24..32) { accept; }
||
→ Логическо “ИЛИ” (поне едно от условията трябва да е вярно).!
→ Отрицание (противоположна стойност).
Действия:
accept;
→ Приема маршрута.reject;
→ Отхвърля маршрута.set bgp-local-pref X;
→ Променя Local Preference на маршрута.set bgp-path-prepend N;
→ ДобавяN
пъти AS номера за AS Path Prepending.set gw X.X.X.X;
→ Определя шлюз (next-hop) за маршрута.
Скоби {}
- Използват се за групиране на команди в if блокове.
/routing filter rule
add chain=my-filter rule="if (dst in 85.217.200.0/22 && dst-len in 24..32) { set bgp-local-pref 200; accept; }"
Ако дестинацията е в 85.217.200.0/22
и има дължина между /24
и /32
, задава bgp-local-pref 200
и приема маршрута.
Filter prepend
/routing filter rule
add chain=gcn-out rule="if (dst == 85.118.94.0/24) { set bgp-path-prepend 3; accept; }"
Разбор на всяка част:
/routing filter rule
- Това е основната команда за добавяне на ново правило в routing filter в MikroTik.
add chain=gcn-out
- Добавя ново правило в филтърната верига
gcn-out
. gcn-out
се използва за изходящите маршрути, които ще бъдат рекламирани към BGP peer-ите.
- Добавя ново правило в филтърната верига
comment=ITS
- Добавя коментар “ITS” към правилото за по-добра организация.
disabled=no
- Указва, че правилото е активно. Ако беше
disabled=yes
, то нямаше да се изпълнява.
- Указва, че правилото е активно. Ако беше
rule="if (dst == 85.118.94.0/24) { set bgp-path-prepend 3; accept; }"
- Основната логика на правилото:
if (dst == 85.118.94.0/24)
→ Проверява дали дестинационният маршрут е85.118.94.0/24
.set bgp-path-prepend 3;
→ Добавя трикратно AS номера вAS-PATH
.- Това се използва за намаляване на приоритета на този маршрут от страна на отдалечения BGP peer.
accept;
→ Приема този маршрут и го изпраща към BGP peer-а.
- Основната логика на правилото:
Какво прави това правило?
- Маршрутът 85.118.94.0/24 ще бъде рекламиран към BGP peer-ите.
- AS Path Prepending е приложено три пъти, което означава, че за останалите AS-и този маршрут ще изглежда по-дълъг и по-малко предпочитан в сравнение с други алтернативи.
- Това е полезно, ако искаш да контролираш входящия трафик, насочвайки го към друг BGP peer с по-къс AS Path.
/routing filter rule
add chain=gcn-in rule="if (dst == 91.132.100.0/24) { set bgp-local-pref 120; accept; }"
/routing filter rule
- Основната команда за добавяне на правило в routing filter на MikroTik.
add chain=gcn-in
- Добавя правило в входящата BGP филтърна верига
gcn-in
. gcn-in
се използва за обработка на маршрути, които се получават от BGP peer-ите.
- Добавя правило в входящата BGP филтърна верига
rule="if (dst == 91.132.100.0/24) { set bgp-local-pref 120; accept; }"
- Основната логика на правилото:
if (dst == 91.132.100.0/24)
→ Проверява дали входящият маршрут е91.132.100.0/24
.set bgp-local-pref 120;
→ Задава Local Preference на120
.accept;
→ Приема този маршрут.
- Основната логика на правилото:
Какво прави това правило?
- Приоритетизира маршрута към
91.132.100.0/24
, като задава BGP Local Preference = 120. - В BGP, Local Preference (Local Pref) се използва за вътрешен трафик (iBGP) и указва предпочитан маршрут.
- По подразбиране, Local Pref в MikroTik е
100
, така че този маршрут ще бъде по-предпочитан от маршрути с по-нисък Local Pref. - Това правило е полезно, ако искаш да влияеш на входящите маршрути вътре в твоята автономна система (AS) и да зададеш предпочитания маршрут за 91.132.100.0/24.
⚡ Кога да използваш Local Preference?
- Когато искаш да предпочетеш един BGP peer пред друг за определен маршрут.
- Когато имаш няколко входящи маршрута за една и съща мрежа, но искаш винаги да ползваш един от тях.
/routing filter rule
add chain=dabnik1-out rule="if (dst == 0.0.0.0/0) { set gw 85.118.94.101; accept; }"
/routing filter rule
- Това е основната команда за добавяне на ново правило в routing filter на MikroTik.
add chain=dabnik1-out
- Добавя правило във филтърната верига
dabnik1-out
. - Тази верига се прилага за изходящите маршрути, които се рекламират към BGP peer-а
dabnik1
.
- Добавя правило във филтърната верига
rule="if (dst == 0.0.0.0/0) { set gw 85.118.94.101; accept; }"
- Основната логика на правилото:
if (dst == 0.0.0.0/0)
→ Проверява дали маршрутът е default route (целият интернет трафик).set gw 85.118.94.101;
→ Пренасочва този маршрут през шлюза (gateway)85.118.94.101
.accept;
→ Разрешава анонсирането на маршрута.
- Основната логика на правилото:
Какво прави това правило?
- Позволява анонсиране на
0.0.0.0/0
(default route) към BGP peer-а вdabnik1-out
. - Указва, че този маршрут трябва да използва
85.118.94.101
като next-hop (шлюз). - Това е полезно, ако искаш да рекламираш default route към конкретен BGP peer, насочвайки го през определен gateway.
⚡ Кога се използва такова правило?
- Default Route Advertisement – Ако искаш BGP peer-ът да използва твоята мрежа за интернет достъп.
- Traffic Engineering – За да принудиш някои peer-ове да използват определен gateway за default route.
- Multi-Homing – Ако имаш няколко изхода към интернет и искаш да контролираш кой peer ще използва кой маршрут.
📌 Важно:
- Това правило ще работи само ако маршрута
0.0.0.0/0
съществува в твоята routing таблица. - Ако
85.118.94.101
не е валиден gateway за този маршрут, може да се получи проблем с reachability.
/routing filter rule
add chain=thezone-in rule="if (dst in 85.217.200.0/22 && dst-len in 24..32) { accept; }"
/routing filter rule
- Това е основната команда за добавяне на правило в routing filter в MikroTik.
add chain=thezone-in
- Добавя правило във филтърната верига
thezone-in
. thezone-in
обработва входящите маршрути от BGP peer-овете.
- Добавя правило във филтърната верига
rule="if (dst in 85.217.200.0/22 && dst-len in 24..32) { accept; }"
- Основната логика на правилото:
if (dst in 85.217.200.0/22)
→ Проверява дали полученото BGP съобщение съдържа маршрут, който попада в 85.217.200.0/22.&& dst-len in 24..32
→ Допълнително ограничава дължината на префикса (subnet mask) да бъде между /24 и /32.accept;
→ Ако и двете условия са изпълнени, маршрутът се приема.
- Основната логика на правилото:
Какво прави това правило?
- Позволява само маршрути в рамките на 85.217.200.0/22, но не приема директно целия /22 префикс.
- Приема само по-малки мрежи (/24 до /32), които попадат в този диапазон.
- Това правило се използва, за да се избегне приемането на прекалено обобщени или неправилни маршрути.
⚡ Кога се използва такова правило?
- Контролиране на префикси – Ако искаш да приемаш само по-малки части от даден адресен диапазон, но не и самия /22.
- Предотвратяване на route hijacking – Ако някой рекламира прекалено голям обобщен маршрут (например
/22
), това правило ще го откаже. - Филтриране на route leaks – Гарантира, че само специфични, детайлни маршрути ще бъдат приети, без да позволяват цялото
85.217.200.0/22
да се приема като един префикс.
🔥 Важни бележки:
- Ако искаш да приемаш и самото
85.217.200.0/22
, трябва да добавишdst-len in 22..32
вместо24..32
. - Ако някой BGP peer рекламира цялото
85.217.200.0/22
като един маршрут, това правило няма да го приеме. - Това може да се комбинира с Local Preference или MED, за да се даде приоритет на определени маршрути.