Jump to content
Калькуляторы

GoBGP - BGP демон с удобным API и cli

Всем привет!

 

Хочу поделиться отличной находкой - GoBGP: https://github.com/osrg/gobgp, чудесный BGP демон с API и CLI, которых как раз бесконечно не хватает в quagga/bird/exabgp и прочих. Все работает стабильно, уже почти 3й месяц гоняю в продакшене. Используется для целей быстрого блэкхола на бордере и передачи информации об этом апстриму.

 

Также среди плюшек умеет BGP Flow Spec.

Edited by pavel.odintsov

Share this post


Link to post
Share on other sites

Можно ли узнать, какое его преимущество перед тем-же bird. Интересует именно распределенный блекхол.

Сейчас все собрано через таблицы + мелкий http интерфейс...

Share this post


Link to post
Share on other sites

Преимущество на мой взгляд очень мощное - крутая cli тулза для управления:

gobgp global rib add 10.33.0.0/24 -a ipv4

 

И очень простой конфиг:

[Global]
 [Global.GlobalConfig]
   As = 65001
   RouterId = "213.133.111.200"

[Neighbors]
 [[Neighbors.NeighborList]]
   [Neighbors.NeighborList.NeighborConfig]
     NeighborAddress = "10.10.10.250"
     PeerAs = 65001
   [Neighbors.NeighborList.AfiSafis]
     [[Neighbors.NeighborList.AfiSafis.AfiSafiList]]
       AfiSafiName = "ipv4-unicast"

Share this post


Link to post
Share on other sites

Очередная экзотика.

На python или ruby bgpd демона не встречали? :)

 

Преимущество на мой взгляд очень мощное - крутая cli тулза для управления:

gobgp global rib add 10.33.0.0/24 -a ipv4

 

Подсказать, как через vtysh добавить сеть в список для блэкхола? :)

Share this post


Link to post
Share on other sites

Это будет дольше, потому что оно захочет soft reset, а прямой анонс быстрее в разы.

 

На Python точно есть - ExaBGP.

 

Экзотика - это Quagag и Bird, которые даже flow spec не умеют :)

Share this post


Link to post
Share on other sites

Это будет дольше, потому что оно захочет soft reset, а прямой анонс быстрее в разы.

Быстрее для чего? во многих местах стоят дефолтные таймеры для BGP. Напомнить порядок величин?

 

На Python точно есть - ExaBGP.

Еще одна экзотика.

 

Экзотика - это Quagag и Bird, которые даже flow spec не умеют :)

А вы соберите статистику. На софт-роутерах quagga лидирует с большим отрывом :)

flow spec - нужна специалистам узкого профиля.

Большинство админов настраивают BGP по how-to :)

Share this post


Link to post
Share on other sites

Ну, если кого-то устраивает Quagga... я могу лишь пожалеть :)

Share this post


Link to post
Share on other sites

Квагга устраивает цисководов ввиду cisco-like CLI и довольно простого конфига.

BIRD - хорош своей гибкостью и универсальностью.

GoBGP - ИМХО не такой гибкий как BIRD, и не такой разжеванный как квагга.

Share this post


Link to post
Share on other sites

Имхо, не особая разжеванность - это нормально для софта, которому полгода от роду. У проекта огромный потенциал. Quagga мертва уже долгие годы, оно не развивается вообще. Bird активнее, но все равно крайне сложен для обращений извне и очень гибкого управления. ExaBGP медленанная и местами очень специфичная.

 

А вот GoBGP написан программистами (хорошими!) для программистов :) Это лично меня очень радует. Как другим - поживем увидим.

Share this post


Link to post
Share on other sites

Имхо, не особая разжеванность - это нормально для софта, которому полгода от роду

 

Не в том дело. Quagga = cisco (почти, за исключением мелочей). Потому howto-шек и use cases - завались. С bird-ом, хоть ему уже сколько лет - такого изобилия нет.

 

Bird активнее, но все равно крайне сложен для обращений извне и очень гибкого управления.

 

Ну в общем да, cli ограничивается списком маршрутов, реконфигурацией, проверкой фильтров и включением-отключением протоколов. Хотя для 99% этого хватает.

 

А вот GoBGP написан программистами (хорошими!) для программистов :)

 

Ну не знаю, мне конфиг bird-а кажется более понятным, чем конфиг GoBGP.

Share this post


Link to post
Share on other sites

Конфиг даа, сложно называть понятным и удобным :( Но тут другой прикол - можно все настроить по API, запустившись с пустым конфигом или вообще без него.

Share this post


Link to post
Share on other sites

Впервые столкнувшись с динамической маршрутизацией, проштудировав хаутушки в интернетах остановился на bird, как на самом простом и понятном софте для bgp/ospf.

Share this post


Link to post
Share on other sites

pavel.odintsov, вот Вы вместо того, чтоб людям экзотику всякую предлагать, запилили-бы нужные плюшки в любой из популярных демонов. :-)

 

// Offtopic on

С вашей AS опять SPAM массово попер.

// Offtopic off

Share this post


Link to post
Share on other sites

А жалобу можно забить по https://bill2fast.com/abuse.php ? Мы таких товарищей быстро уму разуму учим :)

 

snvoronkov, добавление кода в Quagga - проще себя застрелить, как по качеству самого кода, так и по части адекватности разработчиков. Форков квагги уже десяток развелось, именно по причине "особенностей" разработчиков :) С Bird все лучше, но они итак многие фичи планируют сделать сами либо уже сделали в мастер бранче. Мне GoBGP больше всего интересен, с ним удобно работать из моего софта :)

Edited by pavel.odintsov

Share this post


Link to post
Share on other sites

А жалобу можно забить по https://bill2fast.com/abuse.php ? Мы таких товарищей быстро уму разуму учим :)

 

snvoronkov, добавление кода в Quagga - проще себя застрелить, как по качеству самого кода, так и по части адекватности разработчиков. Форков квагги уже десяток развелось, именно по причине "особенностей" разработчиков :) С Bird все лучше, но они итак многие фичи планируют сделать сами либо уже сделали в мастер бранче. Мне GoBGP больше всего интересен, с ним удобно работать из моего софта :)

Запилить бы на него ещё klish

https://code.google.com/p/klish/

Share this post


Link to post
Share on other sites

Работает как и выглядит - довольно интересно.

Но вот только с конфигурацией в toml немного промахнулись....

 

Все хотел спросить по Flow Spec.

Возможно ли правила динамически заливать в тот-же junos? (по bgp к примеру)

Share this post


Link to post
Share on other sites

Все хотел спросить по Flow Spec.

Возможно ли правила динамически заливать в тот-же junos? (по bgp к примеру)

 

 Можно, нужно, проверял в продакшене - тщательно :)

Share this post


Link to post
Share on other sites

Ну, если кого-то устраивает Quagga... я могу лишь пожалеть :)

А вот жалеть не надо. Имеем несколько лет стабильной работы. К кваге претензий не возникло.

Share this post


Link to post
Share on other sites

Все хотел спросить по Flow Spec.

Возможно ли правила динамически заливать в тот-же junos? (по bgp к примеру)

 

 Можно, нужно, проверял в продакшене - тщательно :)

 

Могу даже пример дать:

gobgp global rib -a ipv4-flowspec add match destination 10.0.0.0/24 source 20.0.0.0/24 then redirect 10:10

Share this post


Link to post
Share on other sites

В общем на стенде выглядит интересно и само главное динамически.

 

Вот только небольшой бросок камня в его работу.

Не нашел как можно перечитать конфиг-файл на лету.

Пока пытался настроить то что у меня есть в bird-e, вспоминал квагу и все ее форки не чистым словом....

 

Вот небольшой кусок того, что хотел повторить. Архитектура связаности - full mesh.

template bgp rr_cdn {
   table master;
   local as 65301;
   gateway direct;
   import filter {
if (65300,666) ~ bgp_community then {
    dest = RTD_BLACKHOLE;
    bgp_local_pref = 255;
    accept;
}
if net ~ [ 10.17.0.0/16{24,32} ] then accept;
reject;
   };
   export filter {
if net ~ [ 10.17.0.0/16{24,32} ] then accept;
if (65300,666) ~ bgp_community then accept;
reject;
   };
}

protocol bgp cs2 from rr_cdn {
   neighbor 10.17.19.5 as 65302;
   source address 10.17.19.6;
}

 

О кваге.

Она зарекомендовала себя как стабильное решения.

Использовать можно когда серверов несколько и пиров столько-же.

Когда парк оборудования вырастает до несколько сотен единиц, а вместе с ними и архитектура - в кваге можно потеряться, пока поймешь что она делает и что нужно доконфигурить...

Share this post


Link to post
Share on other sites

1. Сервер написан на Go. Этот язык изначально заточен на поддержку многопоточности.

 

Теоретически, если его запустить на железе типа Mikrotik CCR c 36 ядрами, то он будет в десятки раз быстрее.

И на любом многопроцессороном сервере он будет быстрее любых других продуктов ( GO сейчас примерно в 2 раза медленнее C)

 

2. Поддерживается несколько форматов конфигов.

 

3. Есть API через которые можно теоретически запилить парсер любых конфигов.

 

Изначально продукт преднозначен для Роут серверов с сотнями и тысячами пиров.

 

По отзывам, разработка на языке GO примерно в 10 раз быстрее чем на языке C/C++, так что прогресс действительно еще впереди.

Share this post


Link to post
Share on other sites

ну судя по тому что жаба8 уже быстрее чем чистый ASM, а node.js работает с такой же скоростью как с\с++ (ибо написано на с++)

то всё ещё впереди

Share this post


Link to post
Share on other sites

На Микротике - Tilera, крайне специфичная платформа. Под нее Google крайне маловероятно, что сделает порт. Да и оно само по себе довольно быстро. Но это все же control plane, тут можно обойтись без реактивности.

 

А вот это "По отзывам, разработка на языке GO примерно в 10 раз быстрее чем на языке C/C++, так что прогресс действительно еще впереди." - неправда :) У Go быстрый, но неоптимизирующий компилятор и до компиляторов С/С++ и их скорости ему далеко.

Share this post


Link to post
Share on other sites

И очень простой конфиг:

"простой" - ахахаха, он заставил меня рыдать как сучку :,-(

Подсказать, как через vtysh добавить сеть в список для блэкхола? :)

ответ прост: квагга забагованный кусок булшита и его не надо использовать. гобгп и ехабгп - это другой класс программ - рут инжекторы же Ж) у них другие задачи и цели, и они просты и изящны. а квагга - это оверкилл, берд тоже пинцет. тем более у них нет нормального апи, а у гобгп есть. бебебе :-Р

Ну, если кого-то устраивает Quagga... я могу лишь пожалеть :)

если кого-то устраивает квагга, то надо санитаров скорее вызывать, а не жалеть Ж) пусть поциента лечат электрическим током очень-очень долго Ж)

pavel.odintsov, вот Вы вместо того, чтоб людям экзотику всякую предлагать, запилили-бы нужные плюшки в любой из популярных демонов. :-)

это не нужно. просто рут инжекторы решают другие проблемы чем роутсервера на иксах или софтроутеры. не нужны эти тонны ненужных фич. ваш любимый юнегз-вей же, не ?

Все хотел спросить по Flow Spec.

Возможно ли правила динамически заливать в тот-же junos? (по bgp к примеру)

да, флоуспек умеют все маршрутизаторы J. еще alcatel lucent и вроде чтото в циске аср9к появиться собиралось...

Share this post


Link to post
Share on other sites

1. Сервер написан на Go. Этот язык изначально заточен на поддержку многопоточности.

Херня от гугла для написания мелких утилит на скорую руку.

 

Теоретически, если его запустить на железе типа Mikrotik CCR c 36 ядрами, то он будет в десятки раз быстрее. И на любом многопроцессороном сервере он будет быстрее любых других продуктов ( GO сейчас примерно в 2 раза медленнее C)

Дадада, только не забывай что там есть сборщик мусора, который иногда фризит процесс и занимается своим грязным делом.

А кроме того 2 раза медленнее это на х86 с мегажирнющим кешем и охерительной длинны конвеером, на огрызке с 36 ядрами тебя ждёт масса сюрпризов.

 

Разработка на Visual Basic была в 1000 раз быстрее 17 лет тому назад, чем на сях, так что прогресса нет.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.