Два обекта установяват BGP през IPsec тунел, научават префиксите си един на друг и диаграмата се преименува на управление на пътя. Именно този етикет е началото на объркването. Сесията наистина обменя достижимост и прилага политика, но няма думата кой доставчик, кабел или рутер пренася криптираните пакети. Виждал съм екип да престроява работещ тунел, защото очакваше промяна на BGP маршрут да премести трафика по друг оптичен път, върху който сесията никога не е могла да влияе.

Какво хората предполагат, че купува сесията

Повечето от очакването идва от това как изглежда промяната на маршрут в лаборатория. Обявете префикс през тунела, отдалечената страна го инсталира и трафикът се движи. Същата последователност се случва на рутер, който наистина има лостове за инженеринг на трафика, затова двете се смесват. В лабораторията двата обекта обикновено споделят един достъпен канал и точно затова разликата никога не се показва там.

BGP е протокол за достижимост. Той казва на партньора, че можете да доставите пакети за даден префикс, и позволява на всяка страна да подрежда получените оферти. Това е наистина полезно през тунел: префиксите се появяват и изчезват, когато обектите идват и си отиват, и можете да откажете диапазон, без да пишете статичен маршрут на всяко крайно устройство. Това, което не прави, е да постави рутерите на доставчика под ваш контрол.

Долният слой носи външния заглавен блок. Краят на вашия тунел изпраща криптирани пакети към адреса на партньора, а мрежата между тези два адреса ги препраща по маршрутите, които нейните оператори са инсталирали. Нищо в BGP сесията не променя това решение, освен ако същият доставчик не предлага поддържана услуга, която го прави.

Какво всъщност носи сесията

BGP говорителят отваря TCP връзка към порт 179 на партньора си, използвайки форматите на съобщенията и атрибутите на пътя, дефинирани в RFC 4271. Когато адресът на партньора е вътре в тунела, тунелът трябва да е вдигнат и този адрес трябва да е достижим, преди сесията дори да започне. Завършеният IKE обмен не е BGP съсед. Реализациите на IPsec, базирани на маршрути, пропускат трафик само след като съществува съответен тунелен маршрут, а базираната на политики се нуждае от адреса на партньора вътре в защитения селектор. Обръщането на това наопаки дава класическото състояние, в което тунелът е зелен, а сесията стои празна.

След като сесията е вдигната, политиката решава какво я пресича. Списъци с префикси, AS-path филтри, таван на максималния брой префикси и изрично решение за маршрутите по подразбиране са минимумът и те важат в двете посоки. Партньор, който приема всичко получено, може да ви даде маршрут по подразбиране, който тихо замества локалния достъп до интернет. Двете посоки се нуждаят от отделни списъци, защото това, което приемате от партньора, и това, което му обявявате, са различни решения.

router bgp 65010
 neighbor 10.255.0.2 remote-as 65020
 address-family ipv4 unicast
  neighbor 10.255.0.2 prefix-list SITE-B-IN in
  neighbor 10.255.0.2 prefix-list SITE-B-OUT out
  neighbor 10.255.0.2 maximum-prefix 50

Следва MTU. Инкапсулацията свива използваемия полезен товар, така че голямо обновяване може да блокира сесия, която изглежда напълно установена: партньорът остава вдигнат, префиксите никога не пристигат и нищо очевидно не попада в журнала. Ограничете TCP MSS на тунелния интерфейс или задайте MTU на тунела със запас за допълнителните разходи, преди да обвинявате филтрите.

Къде все още отиват външните пакети

Криптираните пакети от единия обект към другия излизат през това, което локалният рутер избере за публичния адрес на партньора. Ако двата обекта купуват транзит от един и същ доставчик, преминават през един и същ градски обект или едната страна е зад NAT от операторски клас, тунелът оцелява при отказ на доставчика само случайно. Броенето на икони на тунели в инструмент за мониторинг не ви казва нищо за това.

Изборът на маршрут и инсталирането на препращането също са отделни събития. Префикс може да стои в BGP таблицата като най-добър и все още да липсва в таблицата за препращане, защото следващият хоп е неразрешим или побеждава по-конкретен маршрут. Когато някой съобщи, че BGP е научил префикса, но трафикът не тече, полезният въпрос е дали е инсталиран и към кой следващ хоп сочи.

Честният отговор за преглед на дизайна е списък със споделени зависимости: достъпна верига, доставчик нагоре, обект и всяко устройство със състояние по обратния път. Сесия през тунела не може да премахне зависимост, над която не стои.

Три решения, които си струва да разделим

Когато дизайнът смесва тези неща, всеки разговор за прекъсване се върти в кръг. Първо ги разделете на хартия, после свържете всяко с устройството, което наистина го налага.

DecisionWho controls itTypical failure
Which prefixes may cross the relationship?Both sides, through prefix and AS-path policy you configure deliberatelyA default route accepted by mistake, or a vague aggregate
Which overlay next hop wins?Local BGP selection plus next-hop resolution on your own routersPrefix learned, never installed in the forwarding table
Where do the encrypted packets travel?The underlay operators, unless a supported service adds real controlPath diversity that was never there

Всеки ред има различен собственик. Първият е преговори, вторият е конфигурация на вашите устройства, третият е предимно чужда мрежа. Заявка за промяна, която назовава реда, който засяга, е много по-лесна за одобрение от такава, която казва „BGP проблем“.

Режими на отказ, за които си струва да планирате

Приемането на обобщен маршрут от партньор е най-честата самонанесена рана. Някой обявява кратък агрегат, за да опрости обмена, отдалечената страна го приема и трафикът за диапазони, които не са зад тунела, поема по тунела и умира. Филтрирайте по точни очаквани префикси или използвайте списък с префикси с правилните граници и никога не приемайте гол агрегат, защото той прави сесията да изглежда подредена.

Времето на оттегляне е второто. Откриването зависи от таймерите за задържане, BFD, ако сте го включили, откриването на мъртъв партньор на тунела и колко бързо отдалечената страна спира да обявява. Съществуващите сесии са отделен проблем: нов маршрут може да възстанови нови връзки, докато установените TCP сесии продължават да използват остарели адреси, а филтрите със състояние или NAT по пътя може да държат записи, които вече не съвпадат. Сложете възстановяването на приложението в критериите за приемане, вместо да предполагате, че промяната на маршрут решава всичко.

Третото е асиметрията на обратния път. Трафикът може да пристига през тунела и да се връща през доставчиков канал, който никога не е бил предназначен да го носи, което се проявява като еднопосочно аудио, неуспешни ръкостискания или филтър, който изхвърля отговорите. Проверявайте двете посоки поотделно.

Какво да запишем в договора и как да го проверим

Поискайте разрешените префикси писмено: кой има право да обявява всеки диапазон, дали е разрешен маршрут по подразбиране и кои семейства адреси поддържа тунелната услуга. RFC 8212 направи изричната политика за внос и износ очакване за eBGP в реализациите, които го следват, така че партньор, който все още разчита на имплицитно поведение „приемай всичко“, заслужава въпрос.

След това проверете от устройството, а не от диаграмата. Полезни команди на рутери от типа на FRR:

show bgp summary
show bgp ipv4 unicast 10.10.0.0/16
show bgp ipv4 unicast neighbors 10.255.0.2 advertised-routes
show ip route 10.10.0.0/16

Добавете две наблюдения, които таблицата за маршрутизация не може да ви даде. Уловете на външния интерфейс, за да потвърдите кой адрес всъщност е целта на инкапсулираните пакети, например tcpdump -ni eth0 udp port 51820 за WireGuard тунел или ESP филтър за IPsec. След това проследете към публичния адрес на партньора и сравнете хоповете с трасировка вътре в тунела; ако и двете следват една и съща верига на доставчика, вашата излишъчност живее в маршрутната политика, а не в мрежата.

Накрая, тествайте оттегляне нарочно. Свалете тунела по време на прозорец за поддръжка, запишете колко дълго префиксът остава инсталиран, какво се случва със съществуващите сесии и дали отдалечената страна се връща към маршрут, който наистина бихте приели. Това упражнение казва повече за дизайна от всяка диаграма.

Маршрутът не е разрешение. Префиксите, за които се съгласявате да обменяте, не казват нищо за това кои потребители могат да достигнат коя услуга зад тунела, така че запазете автентикацията, разрешените услуги и филтрите на хоста точно там, където бяха. Достижимият партньор също не е разрешение за неограничен транзит или за обявяване на произволни адреси, и такъв вид правомощия принадлежат на договора като търговски въпрос, а не на ред от BGP политиката.

  • Назовете префиксите, които всяка страна може да обявява, и тези, които никога не бива да приема.
  • Ограничете MSS на тунела и потвърдете, че големите обновявания наистина пристигат.
  • Избройте споделените зависимости на долния слой, а не броя на тунелите.
  • Измерете реално оттегляне и отбележете какво прави приложението.

Подобни статии