В тази част ще анализираме подробно няколко 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-networksset 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.65add– Добавя нова 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, за да се даде приоритет на определени маршрути.