Susanin Posted February 14, 2018 · Report post Доброго времени суток! Пытаюсь настроить взаимодействие с аплинком по bgp. Centos 7, BIRD 1.4.5 . Хочу принять FV и поместить в отдельную таблицу роутинга (сделано) и отдать только свой префикс. В принципе все довольно прозаично. На время тестов используем ASN 64555 Что делал: protocol bgp { router id x.x.x.210; description "My BGP uplink"; local as 64555; neighbor x.x.x.209 as 6xxx4; hold time 240; startup hold time 240; connect retry time 120; keepalive time 80; # defaults to hold time / 3 start delay time 5; # How long do we wait before initial connect error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive error forget time 300; # ... until this timeout expires) next hop self; # Disable next hop processing and always advertise our local address as nexthop path metric 1; # Prefer routes with shorter paths (like Cisco does) default bgp_med 0; # MED value we use for comparison when none is defined default bgp_local_pref 0; # The same for local preference source address x.x.x.210; # What local address we use for the TCP connection import filter up_in; export filter up_out; } function pref_from_myasset() prefix set pref_from_64555; { pref_from_64555 = [ z.z.z.0/24 ]; if net ~ pref_from_64555 then return true; return false; } filter up_out { if pref_from_myasset() then { bgp_community = -empty-; #не отправляем никаких коммьюнити bgp_path.prepend(64555); #добавляем prepend accept; } reject; } в попытке отфильтровать только свой префикс. Вот что вижу: birdcl show protocols all bgp1 BIRD 1.4.5 ready. name proto table state since info bgp1 BGP master up 19:26:29 Established Description: My BGP uplink Router ID: x.x.x.210 Preference: 100 Input filter: up_in Output filter: up_out Routes: 88196 imported, 2 exported, 88196 preferred Route change stats: received rejected filtered ignored accepted Import updates: 88528 0 332 0 88196 Import withdraws: 0 0 --- 332 0 Export updates: 88198 88196 0 --- 2 Export withdraws: 0 --- --- --- 0 BGP state: Established Neighbor address: x.x.x.209 Neighbor AS: 6xxx4 Neighbor ID: v.v.v.101 Neighbor caps: refresh restart-aware AS4 Session: external AS4 Source address: x.x.x.210 Hold timer: 82/90 Keepalive timer: 63/80 Т.е., как я понял, пытаемся анонсить все, что получаем... Хотя: bird> show route export bgp1 z.z.z.0/24 via x.x.x.210 on eth0 [static1 17:17:19] ! (200) Пытался изменить на : protocol bgp { ........ export where proto = "static_bgp"; } protocol static static_bgp { route z.z.z.0/24 via x.x.x.210; } Все равно - анонсим все подряд. Помогите найти затык... И еще protocol kernel { persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds # import all; # Default is import all export all; # Default is export none kernel table 107; # Kernel table to synchronize with (default: main) } Ставил что просто persist, что persist off; - при остановке демона все равно маршруты остаются в таблице... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted February 14, 2018 · Report post Вроде всё верно, либо проглядел, попробуй без определения функции filter up_out { if net ~ z.z.z.0/24 then { bgp_community = -empty-; #не отправляем никаких коммьюнити bgp_path.prepend(64555); #добавляем prepend accept; } reject; } По дефолту протокол бгп работает с таблицей main, если не определено иное в протоколе, если хочешь работать с другими таблицами, то либо пользуй пайпы либо укажи таблицу явно, чтото вроде table bar; protocol kernel cool_table{ table bar; scan time 60; kernel table 107; } protocol bgp foo { table bar; ... } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Susanin Posted February 14, 2018 (edited) · Report post @pppoetest Попробывал - то-же самое - анонсит все, что получает. BIRD 1.4.5 ready. name proto table state since info bgp1 BGP master up 21:42:28 Established Description: My BGP uplink Router ID: x.x.x.210 Preference: 100 Input filter: up_in Output filter: up_out Routes: 184987 imported, 2 exported, 184987 preferred Route change stats: received rejected filtered ignored accepted Import updates: 185814 0 826 0 184988 Import withdraws: 0 0 --- 826 0 Export updates: 184990 184988 0 --- 2 Export withdraws: 0 --- --- --- 0 BGP state: Established Neighbor address: x.x.x.209 Neighbor AS: 6xxx4 Neighbor ID: c.c.c.101 Neighbor caps: refresh restart-aware AS4 Session: external AS4 Source address: x.x.x.210 Hold timer: 86/90 Keepalive timer: 61/80 На всякий случай выложу весь конфиг. /* * This is an example configuration file. */ # Configure logging log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug }; log "/var/log/bird.log" { debug }; # Override router ID router id x.x.x.210; # Define another routing table #table bg107; # Turn on global debugging of all protocols #debug protocols all; # The direct protocol automatically generates device routes to # all network interfaces. Can exist in as many instances as you wish # if you want to populate multiple routing tables with device routes. #protocol direct { # interface "-eth*", "*"; # Restrict network interfaces it works with #} # This pseudo-protocol performs synchronization between BIRD's routing # tables and the kernel. If your kernel supports multiple routing tables # (as Linux 2.2.x does), you can run multiple instances of the kernel # protocol and synchronize different kernel tables with different BIRD tables. protocol kernel { # table bg107; # learn; # Learn all alien routes from the kernel persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds import all; # Default is import all export all; # Default is export none kernel table 107; # Kernel table to synchronize with (default: main) } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 10; # Scan interfaces every 10 seconds } # Static routes (again, there can be multiple instances, so that you # can disable/enable various groups of static routes on the fly). protocol static { # disabled; # Disable by default # table bg107; # Connect to a non-default table #route y.y.y.0/24 via x.x.x.210; } protocol static static_bgp { route y.y.y.0/24 via x.x.x.210; } function avoid_nonexist() #Описываем префикс-лист, по которому будет происходить проверка маршрутов prefix set nonexist; { nonexist = [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+, 224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-, 0.0.0.0/0{25,32}, 0.0.0.0/0{0,7} ]; if net ~ nonexist then return false; return true; } #Задаем функцию, с помощью которой будем фильтровать маршруты из нашей AS function pref_from_myasset() prefix set pref_from_64555; { pref_from_64555 = [ y.y.y.0/24 ]; if net ~ pref_from_64555 then return true; return false; } filter up_in { if avoid_nonexist() then { bgp_local_pref = 340; #устанавливаем local preference accept; } reject; } filter up_out_ { if pref_from_myasset() then { bgp_community = -empty-; #не отправляем никаких коммьюнити bgp_path.prepend(64555); #добавляем prepend accept; } reject; } filter up_out { if net ~ y.y.y.0/24 then { bgp_community = -empty-; #не отправляем никаких коммьюнити bgp_path.prepend(64555); #добавляем prepend accept; } reject; } protocol bgp { # table bg107; router id x.x.x.210; # disabled; description "My BGP uplink"; local as 64555; neighbor x.x.x.209 as 6xxx4; hold time 240; startup hold time 240; connect retry time 120; keepalive time 80; # defaults to hold time / 3 start delay time 5; # How long do we wait before initial connect error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive error forget time 300; # ... until this timeout expires) next hop self; # Disable next hop processing and always advertise our local address as nexthop path metric 1; # Prefer routes with shorter paths (like Cisco does) default bgp_med 0; # MED value we use for comparison when none is defined default bgp_local_pref 0; # The same for local preference source address x.x.x.210; # What local address we use for the TCP connection import filter up_in; export filter up_out; #export where proto = "static_bgp"; } Edited February 14, 2018 by Susanin Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted February 15, 2018 · Report post особо опыта с bird нет. но Export updates: 184990 184988 0 --- 2 в accepted 2. show route advertising-protocol bgp x.x.x.209 в студию. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Susanin Posted February 15, 2018 · Report post @zhenya` Да, аплинк принимает только наш анонс - остальное фильтрует. Вопрос - как сделать так, что бы мы и не слали ему лишнее... BIRD 1.4.5 ready. bird> show route advertising-protocol bgp x.x.x.209 IP address expected bird> п.с. естественно, команду давал с ИП, а не с иксами.... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted February 15, 2018 · Report post show route export bgp ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Susanin Posted February 15, 2018 (edited) · Report post bird> show route export bgp syntax error bird> show route export bgp1 z.z.z.0/24 via x.x.x.210 on eth0 [static_bgp 09:01:52] ! (200) bird> И я вижу что мой анонс разошелся по инету - пакеты прилетают... Edited February 15, 2018 by Susanin Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Avad0n Posted February 15, 2018 · Report post Немного оффтопа, птицу бы лучше с репов ихних обновить. 1.4.5 древнее, некоторые глюки и нестабильности на ней замечались у себя. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nixx Posted February 16, 2018 · Report post че-то я не понял... или чего-то не вижу, но... Routes: 88196 imported, 2 exported, 88196 preferred с чего вы взяли, что "анонсим все, что получаем", когда у вас явно всего 2 роута экспортед? bird> show route export bgp1 z.z.z.0/24 via x.x.x.210 on eth0 [static_bgp 09:01:52] ! (200) и это подтверждает. другое дело, почему 2, а не 1? но это, по-моему, из-за двух таблиц маршрутизации удвоение. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Susanin Posted February 16, 2018 · Report post @nixx Route change stats: received rejected filtered ignored accepted Import updates: 185814 0 826 0 184988 Export updates: 184990 184988 0 --- 2 Я данные строки расцениваю так: Было получено 185814 обновлений и отправлено обратно 184990. Но из них АП-ом было принято только 2, относящихся в нашему префиксу, остальное отброшено. Вопрос в том, как не отсылать АП-у те обновления, которые мы сами от него принимаем. По поводу 2 принятых анонсов - это тест в попытке отправить АП-у наш префикс в /24 и часть от него в /28. Сейчас это убрали, отправляем только /24. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
taf_321 Posted February 16, 2018 · Report post protocol bgp BLABLABLA { router id XXX.XXX.XXX.XXX; local as ZZZZZ; source address XXX.XXX.XXX.XXX; neighbor YYY.YYY.YYY.YYY as 12389; import filter provinRT; export filter { if net ~ [ WWW.WWW.WWW.0/24] then { accept; } reject; }; } собственно, у вас почти все правильно, только в определении up_out префикс в квадратные скобки возьмите. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nixx Posted February 16, 2018 (edited) · Report post 3 часа назад, Susanin сказал: @nixx Route change stats: received rejected filtered ignored accepted Import updates: 185814 0 826 0 184988 Export updates: 184990 184988 0 --- 2 Я данные строки расцениваю так: Было получено 185814 обновлений и отправлено обратно 184990. Но из них АП-ом было принято только 2, относящихся в нашему префиксу, остальное отброшено. Вопрос в том, как не отсылать АП-у те обновления, которые мы сами от него принимаем. заодно и сам узнал что-то новое )) всегда думал, что reject - это reject от фильтра, а нифига. это reject роута, который демон не форвардит взад тому, от кого он пришел. или по каким-то другим причинам. какой телепатией должен обладать bird, чтобы узнать, что аплинк зафильтровал какие-то роуты от вас? это все данные вашего демона, а не аплинка. ps: попробуйте аплинка спросить, что ли )) сколько он от вас роутов видит всего и сколько принимает. Edited February 16, 2018 by nixx Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Susanin Posted February 16, 2018 (edited) · Report post 35 минут назад, nixx сказал: какой телепатией должен обладать bird, чтобы узнать, что аплинк зафильтровал какие-то роуты от вас? это все данные вашего демона, а не аплинка. ps: попробуйте аплинка спросить, что ли )) сколько он от вас роутов видит всего и сколько принимает. Ну так а как тогда bird узнает что маршрут вышестоящим accepted ? Очевидно что аплинковский демон сообщает какой маршрут принял, а какой нет.... Аплинк и до этого говорил что принял только наш префикс. Что с остальным он не уточнял. Всем Спасибо! Edited February 16, 2018 by Susanin Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted February 16, 2018 · Report post никак не узнает. нету там функционала оповещения о принял или нет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nixx Posted February 16, 2018 · Report post 4 часа назад, Susanin сказал: Ну так а как тогда bird узнает что маршрут вышестоящим accepted ? Очевидно что аплинковский демон сообщает какой маршрут принял, а какой нет.... Аплинк и до этого говорил что принял только наш префикс. Что с остальным он не уточнял. столбик accepted - это у вашего bird'а accepted от аплинка (imported), либо же accepted на отправку к аплинку (exported). а сколько реально проакцептил аплинк - знает только он сам. при двойке у вас - у него может быть ноль. вам (вашему бёрду) он ничего не сообщает. поэтому я и написал, что "спросите аплинка", чтобы тот админ сам посмотрел, сколько ему реально роутов влилось, и сколько он посчитал "правильными". кроме как голосом, вы никак об этом не узнаете ) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 1, 2018 · Report post В 16.02.2018 в 17:45, nixx сказал: кроме как голосом, вы никак об этом не узнаете ) различных LG обычно вполне достаточно или даже telnet route-server.he.net. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
911 Posted July 22, 2018 · Report post bird 2 на сегодня стабильна или 1.6 лучше юзать? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
QWE Posted July 24, 2018 (edited) · Report post В 23.07.2018 в 02:14, 911 сказал: bird 2 на сегодня стабильна или 1.6 лучше юзать? я бы и 1.6 не стал рассматривать как стабильную словил глюк на 1.6.3 (менял конфигурационный файл - удалял/добавлял bgp соседей, фильтры, перечитывал конфиг и делал релоад bgp протокола), перечитал рассылку bird-users, интернет так ничего и не нашел внятного по своей проблеме. Обновился на 1.6.4 но очковасто, надеюсь что менять часто конфиг не придется. Днем работы под запретом. если функционал 1.6 не нужен особо, то лучше постарше версию ставить я долго сидел на 1.3 версии - ни в один глюк не влип. Edited July 24, 2018 by QWE Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...