You are currently viewing MikroTik v7.18+ BGP – Част2: Анализ на BGP команди

MikroTik v7.18+ BGP – Част2: Анализ на BGP команди

В тази част ще анализираме подробно няколко BGP команди, като обясним значението на всеки параметър.

Plaintext
/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

Анализ на командите:

  1. /routing bgp template
    • Тази команда отваря BGP шаблона (template), който служи за конфигуриране на основните параметри на BGP инстанцията.
  2. set default disabled=no output.network=bgp-networks
    • set default – Променя стойностите на стандартния BGP шаблон.
    • disabled=no – Активира BGP процеса.
    • output.network=bgp-networks – Определя списъка с мрежи, които ще се рекламират чрез BGP.
  3. 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 конфигурации и филтриране на маршрути.

Plaintext
/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

Анализ на командите:

  1. /routing bgp connection
    • Тази команда се използва за конфигуриране на BGP връзки между различни AS (Autonomous Systems).
  2. add as=47453
    • Определя автономната система, в която се намира рутерът (AS 47453).
  3. connect=yes
    • Разрешава връзката с BGP peer-а.
  4. input.affinity=alone
    • Определя начин на обработка на входящия трафик (конкретната му функционалност зависи от общата настройка на MikroTik).
  5. .filter=gcn-in
    • Приложен входящ BGP филтър gcn-in за контрол на входящите маршрути.
  6. listen=yes
    • Разрешава BGP процеса да слуша входящи връзки от peer-а.
  7. local.role=ebgp
    • Определя типа на връзката – eBGP (външен BGP peer).
  8. name=gcn
    • Дава име на тази BGP връзка (peer) за по-лесно идентифициране.
  9. output.affinity=alone
    • Определя начина на обработка на изходящия трафик.
  10. .filter-chain=gcn-out
  • Изходящ BGP филтър за контрол на маршрутите, които ще се рекламират.
  1. .network=bgp-networks
  • Определя мрежите, които ще бъдат рекламирани чрез BGP.
  1. .redistribute=connected,static
  • Разрешава разпространението на свързаните и статичните маршрути в BGP.
  1. remote.address=212.70.158.89/32
  • Определя IP адреса на BGP peer-а (AS 12615).
  1. .as=12615
  • Определя автономната система на peer-а (AS 12615).
  1. router-id=87.246.47.65
  • Определя Router ID на този рутер за BGP сесиите.
  1. routing-table=main
  • Определя коя маршрутна таблица ще се използва за тази BGP връзка.
  1. templates=bgp1
  • Свързва тази BGP връзка с предварително конфигуриран BGP шаблон bgp1.

Този анализ дава подробна разбивка на BGP връзката и как тя се конфигурира в MikroTik RouterOS v7. В следващите секции ще разгледаме допълнителни настройки като peer конфигурации, route filters и оптимизации за BGP.

Plaintext
/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; }"

Анализ на командите:

  1. /routing filter rule
    • Тази команда дефинира BGP филтърни правила за входящ и изходящ трафик.
  2. add chain=gcn-in rule="accept;"
    • Всички входящи BGP маршрути се приемат без допълнителна проверка.
  3. add chain=gcn-out rule="if (dst == 85.118.94.0/24) { accept; }"
    • Рекламира само маршрута към 85.118.94.0/24 към BGP peer-а.
  4. add chain=gcn-out rule="if (dst == 85.118.95.0/24) { accept; }"
    • Рекламира само маршрута към 85.118.95.0/24 към BGP peer-а.
Plaintext
/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 виждаме тази част:

Plaintext
/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.

Предимства на този метод:

  1. Гъвкавост – Лесно можеш да добавяш или премахваш мрежи от bgp-networks, без да променяш самата BGP конфигурация.
  2. Автоматизация – Скриптове или външни системи могат динамично да управляват списъка чрез /ip firewall address-list.
  3. Управление на анонси – Мрежите, които искаш да рекламираш, са централизирани и можеш да ги използваш в различни BGP връзки.

Как работи в MikroTik?

  • Всеки адрес, добавен в bgp-networks, автоматично се анонсира към BGP peer-ите.
  • Ако премахнеш мрежа от /ip firewall address-list, тя ще спре да се рекламира.

Основни елементи: BGP филтри

Филтрите в MikroTik BGP използват специфичен синтаксис, базиран на логически условия и оператори.

  1. if (...) { ... }
    • Условен оператор, който изпълнява блок код само ако условието в скобите е вярно.
    • Пример:
Plaintext
if (dst == 85.118.94.0/24) { accept; }
    • Проверява дали дестинацията е 85.118.94.0/24, ако да – приема маршрута.

Оператори за сравнение:

  • == → Проверява дали стойностите са равни.
Plaintext
if (bgp-as-path == 12615) { accept; }

!= → Проверява дали стойностите са различни.

in → Проверява дали дадена стойност принадлежи на даден диапазон.

Plaintext
if (dst in 85.217.200.0/22) { accept; }
  • dst-len in 24..32 → Проверява дали дължината на префикса е между /24 и /32.

Логически оператори:

  • &&Логическо “И” (и двете условия трябва да са верни).
Plaintext
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 блокове.
Plaintext
/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

Plaintext
/routing filter rule
add chain=gcn-out rule="if (dst == 85.118.94.0/24) { set bgp-path-prepend 3; accept; }"

Разбор на всяка част:

  1. /routing filter rule
    • Това е основната команда за добавяне на ново правило в routing filter в MikroTik.
  2. add chain=gcn-out
    • Добавя ново правило в филтърната верига gcn-out.
    • gcn-out се използва за изходящите маршрути, които ще бъдат рекламирани към BGP peer-ите.
  3. comment=ITS
    • Добавя коментар “ITS” към правилото за по-добра организация.
  4. disabled=no
    • Указва, че правилото е активно. Ако беше disabled=yes, то нямаше да се изпълнява.
  5. 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.
Plaintext
/routing filter rule
add chain=gcn-in rule="if (dst == 91.132.100.0/24) { set bgp-local-pref 120; accept; }"
  1. /routing filter rule
    • Основната команда за добавяне на правило в routing filter на MikroTik.
  2. add chain=gcn-in
    • Добавя правило в входящата BGP филтърна верига gcn-in.
    • gcn-in се използва за обработка на маршрути, които се получават от BGP peer-ите.
  3. 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 пред друг за определен маршрут.
  • Когато имаш няколко входящи маршрута за една и съща мрежа, но искаш винаги да ползваш един от тях.
Plaintext
/routing filter rule
add chain=dabnik1-out rule="if (dst == 0.0.0.0/0) { set gw 85.118.94.101; accept; }"
  1. /routing filter rule
    • Това е основната команда за добавяне на ново правило в routing filter на MikroTik.
  2. add chain=dabnik1-out
    • Добавя правило във филтърната верига dabnik1-out.
    • Тази верига се прилага за изходящите маршрути, които се рекламират към BGP peer-а dabnik1.
  3. 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.

⚡ Кога се използва такова правило?

  1. Default Route Advertisement – Ако искаш BGP peer-ът да използва твоята мрежа за интернет достъп.
  2. Traffic Engineering – За да принудиш някои peer-ове да използват определен gateway за default route.
  3. Multi-Homing – Ако имаш няколко изхода към интернет и искаш да контролираш кой peer ще използва кой маршрут.

📌 Важно:

  • Това правило ще работи само ако маршрута 0.0.0.0/0 съществува в твоята routing таблица.
  • Ако 85.118.94.101 не е валиден gateway за този маршрут, може да се получи проблем с reachability.
Plaintext
/routing filter rule
add chain=thezone-in rule="if (dst in 85.217.200.0/22 && dst-len in 24..32) { accept; }"
  1. /routing filter rule
    • Това е основната команда за добавяне на правило в routing filter в MikroTik.
  2. add chain=thezone-in
    • Добавя правило във филтърната верига thezone-in.
    • thezone-in обработва входящите маршрути от BGP peer-овете.
  3. 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), които попадат в този диапазон.
  • Това правило се използва, за да се избегне приемането на прекалено обобщени или неправилни маршрути.

⚡ Кога се използва такова правило?

  1. Контролиране на префикси – Ако искаш да приемаш само по-малки части от даден адресен диапазон, но не и самия /22.
  2. Предотвратяване на route hijacking – Ако някой рекламира прекалено голям обобщен маршрут (например /22), това правило ще го откаже.
  3. Филтриране на 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, за да се даде приоритет на определени маршрути.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.