Принцип роботи мережі інтернет будується на базовій системі адресації протоколу IP, фундаментальної та найбільш значущою частиною якого можна сміливо назвати BGP маршрутизацію (скорочення BGP складається з перших букв англійського словосполучення Border Gateway Protocol), що прийшла на зміну EGP.
Обивателів рідко цікавить, як саме програми для перегляду web-сторінок відкривають ті чи інші сайти і що служить базою для їх роботи. Але якщо трохи зануритися в тематику, то перед нами відкриється величезний світ IP мереж, де потоками інформації управляють BGP-маршрутизатори та DNS-сервера.
Інформація! Будучи єдиним у своєму роді, протокол глобальної маршрутизації дозволяє гнучко фільтрувати і модифікувати маршрути. Але за такі можливості і гнучкість необхідно платити – налаштувати BGP досить складно, в параметрах можна швидко заплутатися.
В цій статті ми покажемо, що з себе представляє налаштування BGP, які проблеми є найбільш критичними і як їх обійти.
Щоб контролювати вихідний трафік, існує безліч різноманітних способів, які працюють з BGP. Але для моніторингу вхідних пакетів в публічному інтернет-просторі немає прямих механізмів. Автономні системи діють незалежно і не можуть нав’язувати правила маршрутизації один одному.
Проте існує непрямий інструмент регулювання – все автономні системи в вихідних анонсах контролюють параметр AS path.
Будь-який шлях, де номер AS дублюється в декількох місцях (присутній третій примірник між двома блоками однакових номерів), є петлею. При цьому до закільцьованих не належать однакові номери, що йдуть один за одним. Наприклад, шлях 64506 64506 64566 64507 цілком відповідає протоколу BGP, і дублюються AS не роблять його еквівалентним шляху 64506 64566 64507, який коротше.
Штучна зміна довжини шляху – це AS path prepend. Його повсюдно застосовують для впливу на процес визначення шляху іншими мережами. Другий варіант з розглянутого нами прикладу є більш привабливим.
Під час налаштування BGP-маршрутизації подовжити шлях на три номери AS можна в такий спосіб:
В show ip bgp на виході замість звичайного для локальних анонсів відобразиться шлях, що включає три однакових елементи:
Важливо! На практиці гарантувати, що вхідний трафік піде через провайдера, анонсований більш короткий шлях, не можна.
Існує ймовірність, що прийшли від нього через ланцюжок інших провайдерів альтернативні шляхи будуть довшими, ніж навіть штучно збільшений розглянутий нами варіант. Більш того, нікому не забороняється встановити в якості пріоритетного «неправильний» маршрут, чим і користуються деякі адміністратори.
Тому раціональніше застосовувати community strings за умови, що він підтримується транзитним провайдером.
Одна з базових налаштувань BGP дає можливість впливати на політику маршрутизації сусіднього провайдера. Для цього, правда, необхідно заручитися його згодою. Такого механізму немає в інших протоколах.
Community strings використовується в якості назви для довільних значень формату AS: NUMBER (наприклад, 64506: 111). Вони можуть бути використані в політиці на вході як критерії. У звичайній ситуації суть певних значень обумовлена налаштованим параметрами, але також є стандартні значення. Наприклад, no-advertise дає команду маршрутизатора не передавати анонс всім іншим.
Транзитні провайдери часто дозволяють клієнтам скористатися такою можливістю.
Припустимо, у нас є необхідність дозволити сусідам встановлювати на своєму боці local preference для їх анонсів. Припустимо, наша автономна система – 64507, клієнтська – 64503.
Першим кроком визначимо, як направити провайдеру рядок з боку клієнта. Направимо гіпотетичному провайдеру анонс, вказавши community 64507: 50. Прописати це можна таким чином:
Потім подумаємо, яким чином її використовувати для відстеження політик на стороні провайдера. Зазначимо 50 в якості значення local preference для анонсів з такою рядком (це менше значення за замовчуванням):
Використовуючи вже знайому команду show ip bgp, переконався, що на стороні провайдера все функціонує:
Зробити помилку при налаштуванні протоколів BGP досить просто. Щоб уникнути повторюваних і найбільш поширених проблем, реалізаціями протоколів передбачені стандартні обмеження. При цьому часто грань між усвідомленим нетривіальним налаштуванням і помилкою майже непомітна.
Для прикладу візьмемо опцію ebgp-multihop. Відповідно до політики BGP, встановити коннект з сусідом, який знаходиться в іншому сегменті канального рівня, не можна. Для цього необхідно, щоб між сусідами не було проміжних маршрутизаторів.
Інформація! Будучи більш абстрактним, ніж інші протоколи, BGP дає можливість встановити свій шлюз для маршрутів. З цієї причини BGP часто розглядається як метод автоматичної передачі списків мереж.
Наприклад, сервер маршрутів розташований десь далеко в інтернет-просторі та направити потік даних через нього не можна, умова присутності сусідів в одному сегменті для нього не виконується. Опція ebgp-multihop, що встановлює гранично допустиму кількість проміжних маршрутизаторів, розв’язує описану проблему: