Перейти к содержимому
Калькуляторы

bgp quagga странности debian soft router

Сегодня несколько раз упала квагга (BGPd 0.99.21). В логах:

2017/01/09 17:47:53 BGP: BGPd 0.99.21 starting: vty@2605, bgp@<all>:179
2017/01/09 17:48:04 BGP: realloc : can't allocate memory for `' size 0: Resource temporarily unavailable

2017/01/09 17:48:04 BGP: Memory utilization in module LIB:
2017/01/09 17:48:04 BGP:   Temporary memory              :          1
2017/01/09 17:48:04 BGP:   String vector                 :      14674
2017/01/09 17:48:04 BGP:   Vector                        :       7267
2017/01/09 17:48:04 BGP:   Vector index                  :       7267
2017/01/09 17:48:04 BGP:   Link List                     :         20
2017/01/09 17:48:04 BGP:   Link Node                     :       1950
2017/01/09 17:48:04 BGP:   Thread                        :         33
2017/01/09 17:48:04 BGP:   Thread master                 :          1
2017/01/09 17:48:04 BGP:   Thread stats                  :         13
2017/01/09 17:48:04 BGP:   Thread function name          :         45
2017/01/09 17:48:04 BGP:   VTY                           :          2
2017/01/09 17:48:04 BGP:   Interface                     :         12
2017/01/09 17:48:04 BGP:   Connected                     :         23
2017/01/09 17:48:04 BGP:   Buffer                        :          3
2017/01/09 17:48:04 BGP:   Buffer data                   :        357
2017/01/09 17:48:04 BGP:   Stream                        :         20
2017/01/09 17:48:04 BGP:   Stream data                   :         20
2017/01/09 17:48:04 BGP:   Stream FIFO                   :          7
2017/01/09 17:48:04 BGP:   Prefix                        :         33
2017/01/09 17:48:04 BGP:   Hash                          :         63
2017/01/09 17:48:04 BGP:   Hash Bucket                   :      33976
2017/01/09 17:48:04 BGP:   Hash Index                    :         63
2017/01/09 17:48:04 BGP:   Access List                   :          1
2017/01/09 17:48:04 BGP:   Access List Str               :          1
2017/01/09 17:48:04 BGP:   Access Filter                 :          1
2017/01/09 17:48:04 BGP:   Prefix List                   :          4
2017/01/09 17:48:04 BGP:   Prefix List Entry             :          5
2017/01/09 17:48:04 BGP:   Prefix List Str               :          4
2017/01/09 17:48:04 BGP:   Route map                     :          3
2017/01/09 17:48:04 BGP:   Route map name                :          3
2017/01/09 17:48:04 BGP:   Route map index               :          4
2017/01/09 17:48:04 BGP:   Route map rule                :          4
2017/01/09 17:48:04 BGP:   Route map rule str            :          4
2017/01/09 17:48:04 BGP:   Route map compiled            :          3
2017/01/09 17:48:04 BGP:   Command desc                  :       7349
2017/01/09 17:48:04 BGP:   Socket union                  :         10
2017/01/09 17:48:04 BGP:   Privilege information         :          2
2017/01/09 17:48:04 BGP:   Logging                       :          1
2017/01/09 17:48:04 BGP:   Zclient                       :          2
2017/01/09 17:48:04 BGP:   Work queue                    :          2
2017/01/09 17:48:04 BGP:   Work queue item               :       1904
2017/01/09 17:48:04 BGP:   Work queue name string        :          2
2017/01/09 17:48:04 BGP:   Host config                   :          4
2017/01/09 17:48:04 BGP: Memory utilization in module ZEBRA:
2017/01/09 17:48:04 BGP:   Nexthop                       :          7
2017/01/09 17:48:04 BGP: Memory utilization in module RIP:
2017/01/09 17:48:04 BGP: Memory utilization in module RIPNG:
2017/01/09 17:48:04 BGP: Memory utilization in module OSPF:
2017/01/09 17:48:04 BGP: Memory utilization in module OSPF6:
2017/01/09 17:48:04 BGP: Memory utilization in module ISIS:
2017/01/09 17:48:04 BGP: Memory utilization in module BGP:
2017/01/09 17:48:04 BGP:   BGP instance                  :          1
2017/01/09 17:48:04 BGP:   BGP listen socket details     :          2
2017/01/09 17:48:04 BGP:   BGP peer                      :          7
2017/01/09 17:48:04 BGP:   BGP peer hostname             :          7
2017/01/09 17:48:04 BGP:   Peer description              :          6
2017/01/09 17:48:04 BGP:   BGP attribute                 :      17839
2017/01/09 17:48:04 BGP:   BGP extra attributes          :      17840
2017/01/09 17:48:04 BGP:   BGP aspath                    :      16122
2017/01/09 17:48:04 BGP:   BGP aspath seg                :      16152
2017/01/09 17:48:04 BGP:   BGP aspath segment data       :      16152
2017/01/09 17:48:04 BGP:   BGP aspath str                :      16122
2017/01/09 17:48:04 BGP:   BGP table                     :         31
2017/01/09 17:48:04 BGP:   BGP node                      :     173247
2017/01/09 17:48:04 BGP:   BGP route                     :     104398
2017/01/09 17:48:04 BGP:   BGP ancillary route info      :     104249
2017/01/09 17:48:04 BGP:   BGP connected                 :         10
2017/01/09 17:48:04 BGP:   BGP static                    :          3
2017/01/09 17:48:04 BGP:   BGP synchronise               :         56
2017/01/09 17:48:04 BGP:   BGP adj out                   :         11
2017/01/09 17:48:04 BGP:   BGP AS list                   :          3
2017/01/09 17:48:04 BGP:   BGP AS filter                 :          3
2017/01/09 17:48:04 BGP:   BGP AS filter str             :          3
2017/01/09 17:48:04 BGP:   community                     :          2
2017/01/09 17:48:04 BGP:   community val                 :          2
2017/01/09 17:48:04 BGP:   community str                 :          1
2017/01/09 17:48:04 BGP:   community-list handler        :          1
2017/01/09 17:48:04 BGP:   Cluster list                  :          1
2017/01/09 17:48:04 BGP:   Cluster list val              :          1
2017/01/09 17:48:04 BGP:   BGP Process queue             :       1904
2017/01/09 17:48:04 BGP:   BGP transit attr              :          2
2017/01/09 17:48:04 BGP:   BGP transit val               :          2
2017/01/09 17:48:04 BGP:   BGP nexthop                   :          7
2017/01/09 17:48:04 BGP:   BGP regexp                    :          3
2017/01/09 17:48:04 BGP: Backtrace for 10 stack frames:
2017/01/09 17:48:04 BGP: [bt 0] /usr/lib/libzebra.so.0(zlog_backtrace+0x26) [0x7f18afc83223]
2017/01/09 17:48:04 BGP: [bt 1] /usr/lib/libzebra.so.0(+0x24b0a) [0x7f18afc79b0a]
2017/01/09 17:48:04 BGP: [bt 2] /usr/lib/libzebra.so.0(zrealloc+0x36) [0x7f18afc79bcb]
2017/01/09 17:48:04 BGP: [bt 3] /usr/lib/quagga/bgpd(bgp_attr_parse+0xb4b) [0x7f18b0110621]
2017/01/09 17:48:04 BGP: [bt 4] /usr/lib/quagga/bgpd(+0x58630) [0x7f18b012b630]
2017/01/09 17:48:04 BGP: [bt 5] /usr/lib/quagga/bgpd(bgp_read+0xa92) [0x7f18b012d582]
2017/01/09 17:48:04 BGP: [bt 6] /usr/lib/libzebra.so.0(thread_call+0x67) [0x7f18afc7884a]
2017/01/09 17:48:04 BGP: [bt 7] /usr/lib/quagga/bgpd(main+0x3fc) [0x7f18b010398f]
2017/01/09 17:48:04 BGP: [bt 8] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd) [0x7f18af024ead]
2017/01/09 17:48:04 BGP: [bt 9] /usr/lib/quagga/bgpd(+0x309e5) [0x7f18b01039e5]

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как бы избежать повторения подобных ситуаций?

юзать bird.

 

ну и не забывать подпирать критичные демоны monit'ом. тогда будет не так больно при падении их.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Юзать watchquagga.

Проверить наличие свободной памяти.

Поставить фильтры на входящие анонсы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется вы словили этот баг:

 

https://lists.quagga.net/pipermail/quagga-users/2013-October/013501.html

 

Исправлен в 0.99.22 этим патчем: http://git.savannah.gnu.org/gitweb/?p=quagga.git;a=commitdiff;h=8794e8d229dc9fe29ea31424883433d4880ef408

 

Точно можно будет сказать если ситуация повториться, а вы параллельно с попыткой запустить bgpd будете tcpdump-ом писать трафик на TCP-порту 179.

Изменено пользователем Умник

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется вы словили этот баг:

 

https://lists.quagga.net/pipermail/quagga-users/2013-October/013501.html

 

Исправлен в 0.99.22 этим патчем: http://git.savannah.gnu.org/gitweb/?p=quagga.git;a=commitdiff;h=8794e8d229dc9fe29ea31424883433d4880ef408

 

Точно можно будет сказать если ситуация повториться, а вы параллельно с попыткой запустить bgpd будете tcpdump-ом писать трафик на TCP-порту 179.

 

Спасибо! Обновил, посмотрим.

 

Про watchquagga тоже спасибо, так то он включен, но только сейчас обратил внимание, что по-умолчанию оно только для информации...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите как разрулить задачу с маршрутами

аплинк А- анонсится подсеть А1

аплинк B- анонсится подсеть B1,B2,B3

задача исход B2,B3 выпустить через аплинк А

через установку localpref не получается то сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

zhenya`

С какой такой стати нельзя? Аплинку все равно что вы анонсируете и отправляете, трафик улетит через А и прилетит обратно через B.

Условная маршрутизация скорее задача не для квагги, а для ip rule.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут под словам анонсится понимаются входящие анонсы... иначе непонятно причём тут локалпреф

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Настраиваю BGP для второй ноги на quagga под Debian.

Для начала - просто пробую поднять bgp-сессию, но при этом ничего не анонсирую и не принимаю - в route-map сплошные deny:

 

ip prefix-list ANY seq 5 permit any
ip prefix-list DENY-ANY-PREFIXES seq 10 deny 0.0.0.0/0 le 32
ip prefix-list bogons seq 15 permit 0.0.0.0/8 le 32
ip prefix-list bogons seq 20 permit 127.0.0.0/8 le 32
ip prefix-list bogons seq 30 permit 10.0.0.0/8 le 32
ip prefix-list bogons seq 35 permit 172.16.0.0/12 le 32
ip prefix-list bogons seq 40 permit 192.168.0.0/16 le 32
ip prefix-list bogons seq 45 permit 169.254.0.0/16 le 32
ip prefix-list bogons seq 50 permit 224.0.0.0/4 le 32
ip prefix-list bogons seq 55 permit 240.0.0.0/4 le 32
ip prefix-list default seq 10 permit 0.0.0.0/0
ip prefix-list our-CIDR-blocks seq 5 permit 188.130.171.0/24 le 32
ip prefix-list reduced seq 10 permit 0.0.0.0/0 ge 18
ip prefix-list reduced seq 20 deny any
ip prefix-list upstream-out seq 10 permit 188.130.171.0/24
!
ip as-path access-list 1 deny .*
ip as-path access-list PRIV permit _6451[2-9]_
ip as-path access-list PRIV permit _645[2-9][0-9]_
ip as-path access-list PRIV permit _64[6-9][0-9][0-9]_
ip as-path access-list PRIV permit _65[0-9][0-9][0-9]_

route-map Bee-in deny 100
 match as-path PRIV
!
route-map Bee-in deny 110
 match ip address prefix-list bogons
!
route-map Bee-in deny 115
 match ip address prefix-list reduced
!
route-map Bee-in deny 116
 match ip address prefix-list default
!
route-map Bee-in deny 120
!
route-map Bee-out deny 200

Нейбор:

 neighbor 62.141.99.89 remote-as 3216
 neighbor 62.141.99.89 description Bee
 neighbor 62.141.99.89 update-source 62.141.99.90
 neighbor 62.141.99.89 weight 2000
 neighbor 62.141.99.89 soft-reconfiguration inbound
 neighbor 62.141.99.89 route-map Bee-in in
 neighbor 62.141.99.89 route-map Bee-out out

Сессия поднимается, состояние Established, но

show ip bgp neighbors 62.141.99.89 advertised-route
пусто - все верно
 show ip bgp neighbors 62.141.99.89 routes
пусто - все верно

show ip bgp neighbors 62.141.99.89 received-routes
BGP table version is 0, local router ID is 188.130.171.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 0.0.0.0          62.141.99.89                           0 3216 i
*> 1.0.0.0/24       62.141.99.89                           0 3216 12389 13335 i
*> 1.0.4.0/24       62.141.99.89                           0 3216 4637 1221 38803 38803 38803 i
*> 1.0.5.0/24       62.141.99.89                           0 3216 6939 4826 38803 i
*> 1.0.6.0/24       62.141.99.89                           0 3216 4637 1221 38803 38803 38803 38803 i
*> 1.0.7.0/24       62.141.99.89                           0 3216 6939 4826 38803 i
*> 1.0.16.0/24      62.141.99.89                           0 3216 2497 2519 i
и т.д....

Total number of prefixes 25824

Откуда received-routes? Я ж ничего не принимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

1 час назад, Andrei сказал:

Сессия поднимается, состояние Establishe

Откуда received-routes? Я ж ничего не принимаю.

received-routes это принятые ДО фильтрации.

отключите soft-reconfiguration inbound и у вас их не будет (правда смысла отключать на PC ровно ноль, память не жалко)

 

алсо
update source и так автоматом будет из стыковочной /30, это для лупбеков нужно указывать

вместо weight лучше оперировал local pref, т.к. вес локальный, а lp транзитивный интра-ас

Total number of prefixes 25824 <- вам недоливают?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще позволю себе уточнение :)
Если один магистрал (ТТК) дает пока default, а второй (Bee) уже default+FV, то если я начну анонсить свою сетку /24 им обоим с одинаковым weght, то как полетит трафик по аплинкам?

Если например  я скажу

ip route add default via 62.141.99.89 table bee
ip rule add from 188.130.171.34 table bee

то как это будет соотноситься с BGP?

Эта конструкция работает - пакеты с этого интерфейса уходят по table bee через интерфейс 62.11.99.89, но ответы приходят через первого магистрала - ТТК. Соответственно инет у клиента с адресом 188.130.171.34 не работает. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

weight влияет только на то как ВАШ трафик полетит ОТ вашего роутера, причем конкретно того, на котором вес и настроен

ip route\ip rule соотносится так, что его на bgp маршрутизаторе быть не должно вовсе

а не работает у вас что-то там из-за rp_filter, который включен по-умолчанию на всех интерфейсах (скорее всего)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 минуту назад, vurd сказал:

ip route\ip rule соотносится так, что его на bgp маршрутизаторе быть не должно вовсе

А если мне надо конкретную подсетку завернуть в определенного магистрала?

В описанном выше случае 188.130.171.34 - это один из двух НАТов на толстой циске в центре. Оба НАТа роутятся на сервер, где и стоит bgp на quagga.

Кроме как ip route\rule мне что-то ничего  в голову не пришло. Сетка у меня одна /24, ее никак по частям (например по /25) разным магистралам не проанонсить по понятным причинам.

 

6 минут назад, vurd сказал:

rp_filter, который включен по-умолчанию на всех интерфейсах (скорее всего)

есть такое дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цель какая? Что вы хотите получить? Зачем может потребоваться "подсетку завернуть в магистрала"?

Принимайте с обоих пиров фул и не придумывайте, если надо будет ходить куда-то через определенного, то route-map на матч по as (или префиксу) и повышенный lp туда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 минуты назад, vurd сказал:

Принимайте с обоих пиров фул и не придумывайте,

Это будет. Просто ТТК не такой расторопный как Билайн.

4 минуты назад, vurd сказал:

если надо будет ходить куда-то через определенного, то route-map на матч по as (или префиксу) и повышенный lp туда.

Ходить хочется не "куда-то", а "откуда-то". В описанном выше случае 188.130.171.34 - это один из двух НАТов на толстой циске в центре. Оба НАТа роутятся на сервер, где и стоит bgp на quagga. Хочется, чтобы с одного НАТа трафик шел в одного магистрала, с другого НАТа - через другого магистрала.

Ну и при падении одного из магистралов все шло через выжившего.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И в чем смысл? У вас что так много исходящего, чтобы это на что-то влияло?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Под "с одного НАТа трафик шел в одного магистрала" я конечно подразумевал не только исходящий трафик, но и обратный - входящий. Но при FV с двух ног, как  я понимаю, я на это повлиять не могу?

 

По поводу rp_filter  в /etc/sysctl.conf есть даже коммент:

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

Врут негодяи? :) Или чем это грозит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

FV это про то, кому вы будете отправлять... на то что вам будет прилетать оно вообще не влияет никоим образом. совершенно. Это всего лишь набивание таблицы маршрутизации на вашем бордере.

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

то что вам будет прилетать зависит от того, что и как вы анонсируете, что и как аплинки анонсируют дальше. и тонко настраивать тут может не получиться совсем.. рулить  входящим сетями мельче чем /24 в общем случае нельзя. если ваш аплинк такое может еще принять, то дальше скорее всего порежут.

 

rp_filter на обоих интерфейсах, смотрящих в мир придется выключить. да. трафик не симметричен, а rp_ как раз проверяет симметрию

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, st_re сказал:

rp_filter на обоих интерфейсах, смотрящих в мир придется выключить. да. трафик не симметричен, а rp_ как раз проверяет симметрию

Просто поправить файлы /proc/sys/net/ipv4/conf/__имя_интерфейса____/rp_filter ? Ничего рестартовать не надо будет?

 

В "эпоху до BGP" распределял трафик с разных НАТ на разных магистралов без проблем, а тут...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это не совсем чтобы файлы, это такая фейковая файлуха, которая в виде файлов представляет структуры ядра. после перезагрузки там будет по умолчанию всё. чтобы оно сохранилось надо это применять после перезапуска, например поправив всё тот же, упомянутый выше, /etc/sysctl.conf

 

а так както так должно работать

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

echo 2 > /proc/sys/net/ipv4/conf/__имя_ext_интерфейса____/rp_filter

echo 2 > /proc/sys/net/ipv4/conf/__имя_ext_интерфейса_2__/rp_filter

echo 1 > /proc/sys/net/ipv4/conf/__имя_int_интерфейса____/rp_filter

 

либо

sysctl -w net.ipv4.conf.all.rp_filter=0

sysctl -w net.ipv4.conf.__имя_ext_интерфейса____.rp_filter=2

sysctl -w net.ipv4.conf.__имя_ext_интерфейса_2__.rp_filter=2

sysctl -w net.ipv4.conf.__имя_int_интерфейса____.rp_filter=1

что в общем то тоже самое для линуксов.

 

 

тогда из локалки будет пускать только своих, а из интернета будет дропать мусор с нерутящимися адресами... правда если у вас прилетает дефолт, то рутиться будут все, но если потом будет 2 FV без дефолтов, то всякий шлак будет фильтроваться.. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

19 часов назад, st_re сказал:

sysctl -w net.ipv4.conf.__имя_ext_интерфейса____.rp_filter=2

sysctl -w net.ipv4.conf.__имя_ext_интерфейса_2__.rp_filter=2

Это два интерфейса к магистралам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 часа назад, Andrei сказал:

Это два интерфейса к магистралам?

да

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Andrei 

Да отключите его глобально, как делают все нормальные люди. На бордере он не нужен от слова совсем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.