Bird, вопросы новичка.

Статическая и динамическая, протоколы

Bird, вопросы новичка.

Сообщение Melman » 16 авг 2016, 12:19

Думаю здесь есть люди которые смогут помочь, буду очень признателен.
Начал осваивать bird, пока для домашних целей, на quagga работало в принципе и кушать сильно не просило.
Как выглядит домашняя схема:
2 аплинка, один отдает 1ГБ канал через DHCP подключение, второй обычный ADSL используется в качестве резерва. ASDL модем отдает default route через rip2.

Как было: по dhcp получил адрес и работает, quagga по rip получает второй default gw и ставит его с повышенной метрикой в резерв, собственно весь конфиг кваги:

Код: Выделить всё
log stdout
!
password zebra
enable password zebra
!
interface eth0
 ipv6 nd suppress-ra
!
interface eth1
 ipv6 nd suppress-ra
!
interface eth2
 ipv6 nd suppress-ra
!
interface lo
!
interface tun0
 ipv6 nd suppress-ra
!
interface tun11
 ipv6 nd suppress-ra
!
router rip
 version 2
 redistribute connected
 network 192.168.8.0/24
!
ip forwarding
!
line vty
!


Этого хватало.


Теперь использую bird:

Код: Выделить всё
# cat /etc/bird/bird.conf|grep -v "^#"

timeformat base     iso long;
timeformat log      iso long;
timeformat protocol iso long;
timeformat route    iso long;

log "/var/log/bird/bird.log" all;
log stderr all;


router id 192.168.7.254;

protocol kernel {
   scan time 20;
   import none;
   export all;   # Actually insert routes into the kernel routing table
}

protocol direct {
        interface "eth0", "eth3";
}


protocol device {
   scan time 20;
}

debug protocols { routes, interfaces };


protocol rip {
        debug all;
        interface "eth0" { metric 2; mode multicast; };

        import filter { print "importing"; accept; };
        export filter { print "exporting"; accept; };
}
#


Вроде ничего такого и тоже должно работать, но увы, не работает как надо.
После того как опускает 1ГБ аплинк, ifdown eth3, default gw пропадает и через не много времени появляется default gw по rip2, то есть в принципе переход выполнен успешно.
Но дальше поднимает назад интерфейс ifup eth3, он получает адрес и гейт по dhcp и увы, он не меняет default route который прилетел до этого по rip2. В итоге трафик все равно уходит через ADSL.

Как можно научить bird работать с dhcp интерфейсом?

Заранее извиняюсь если не правильно выразился или не понятным языком. Старался описать ситуацию максимально подробно.
Melman
новичок
 
Сообщения: 13
Зарегистрирован: 12 янв 2016, 00:11

Re: Bird, вопросы новичка.

Сообщение root » 17 авг 2016, 09:43

Доброго.

Во-первых, нужно посмотреть что в логах. Включить глобальный дебаг:
Код: Выделить всё
debug protocols all;

Или в protocol direct и kernel добавить debug all
Во-вторых, в protocol kernel добавить learn
В-третьих, что показывает вывод:
Код: Выделить всё
# birdc show route

До ситуации и после.
В-четвертых, а почему RIP ?
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Bird, вопросы новичка.

Сообщение Melman » 17 авг 2016, 21:49

Спасибо за ответ, постараюсь дать максимальную информацию:

Актуальный конфиг:
Код: Выделить всё
# cat /etc/bird/bird.conf|grep -v "^#"                                                                                                                                                     

timeformat base     iso long;
timeformat log      iso long;
timeformat protocol iso long;
timeformat route    iso long;

log "/var/log/bird/bird.log" all;
log stderr all;


router id 192.168.7.254;

protocol kernel {
        scan time 20;
        #import none;
        import all;
        export all;   # Actually insert routes into the kernel routing table
        learn;
}

protocol direct {
        interface "eth0", "eth3";
}


protocol device {
        scan time 20;
}

debug protocols all


protocol rip {
        debug all;
        interface "eth0" { metric 2; mode multicast; };

        import filter { print "importing"; accept; };
        export filter { print "exporting"; accept; };
}


Роуты в нормальном состоянии:
Код: Выделить всё
# birdc show route
BIRD 1.6.0 ready.
0.0.0.0/0          via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:01] * (120/3)
                   via 111.11.33.1 on eth3 [kernel1 2016-08-17 21:36:25] (10)
111.11.33.0/24     dev eth3 [direct1 2016-08-17 21:36:24] * (240)
178.94.236.0/22    via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:01] * (120/3)
37.52.204.0/22     via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:01] * (120/3)
192.168.8.0/24     dev eth0 [direct1 2016-08-17 21:34:01] * (240)
95.135.194.0/23    via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:01] * (120/3)


Код: Выделить всё
# ip r
default via 111.11.33.1 dev eth3
37.52.204.0/22 via 192.168.8.250 dev eth0  proto bird
95.135.194.0/23 via 192.168.8.250 dev eth0  proto bird
111.11.33.0/24 dev eth3  proto kernel  scope link  src 111.11.33.130
178.94.236.0/22 via 192.168.8.250 dev eth0  proto bird
192.168.8.0/24 dev eth0  proto kernel  scope link  src 192.168.8.254


Как видно все работает, bird показывает оба 0.0.0.0 и без особых трудностей.
Выключаем eth3 с 1G dhcp.

Код: Выделить всё
2016-08-17 21:37:10 <TRACE> rip1: Interface timer fired for eth0
2016-08-17 21:37:10 <TRACE> rip1: Sending regular updates for eth0
2016-08-17 21:37:10 <TRACE> rip1: Sending response via eth0
2016-08-17 21:37:10 <INFO> exporting
2016-08-17 21:37:10 <TRACE> rip1 < removed 111.11.33.0/24 dev eth3
2016-08-17 21:37:10 <TRACE> rip1: Scheduling triggered updates for eth0
2016-08-17 21:37:10 <TRACE> rip1 < interface eth3 goes down
2016-08-17 21:37:12 <TRACE> rip1: Interface timer fired for eth0
2016-08-17 21:37:12 <TRACE> rip1: Sending triggered updates for eth0
2016-08-17 21:37:12 <TRACE> rip1: Sending response via eth0
2016-08-17 21:37:12 <TRACE> rip1 < interface eth3 changes link
2016-08-17 21:37:12 <TRACE> rip1: Response received from 192.168.8.250 on eth0


Код: Выделить всё
# ip r
default via 192.168.8.250 dev eth0  proto bird
37.52.204.0/22 via 192.168.8.250 dev eth0  proto bird
95.135.194.0/23 via 192.168.8.250 dev eth0  proto bird
178.94.236.0/22 via 192.168.8.250 dev eth0  proto bird
192.168.8.0/24 dev eth0  proto kernel  scope link  src 192.168.8.254


Новый default установился без всяких проблем.

Включаем назад интерфейс с 1G dhcp:

Код: Выделить всё
# ip r
default via 192.168.8.250 dev eth0  proto bird
37.52.204.0/22 via 192.168.8.250 dev eth0  proto bird
95.135.194.0/23 via 192.168.8.250 dev eth0  proto bird
111.11.33.0/24 dev eth3  proto kernel  scope link  src 111.11.33.130
178.94.236.0/22 via 192.168.8.250 dev eth0  proto bird
192.168.8.0/24 dev eth0  proto kernel  scope link  src 192.168.8.254


Видим что маршрут 111.11.33.0/24 dev eth3 proto kernel scope link src 111.11.33.130 появился, но default так и остается на adsl
Логи:
Код: Выделить всё
2016-08-17 21:37:54 <TRACE> rip1 < interface eth3 changes link
2016-08-17 21:37:55 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-17 21:37:57 <TRACE> rip1 < interface eth3 goes up
2016-08-17 21:37:57 <INFO> exporting
2016-08-17 21:37:57 <TRACE> rip1 < added 111.11.33.0/24 dev eth3
2016-08-17 21:37:57 <TRACE> rip1: Scheduling triggered updates for eth0
2016-08-17 21:37:58 <TRACE> rip1: Interface timer fired for eth0
2016-08-17 21:37:58 <TRACE> rip1: Sending triggered updates for eth0
2016-08-17 21:37:58 <TRACE> rip1: Sending response via eth0
2016-08-17 21:37:58 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-17 21:38:02 <TRACE> rip1: Main timer fired
2016-08-17 21:38:10 <TRACE> rip1: Interface timer fired for eth0
2016-08-17 21:38:10 <TRACE> rip1: Sending regular updates for eth0
2016-08-17 21:38:10 <TRACE> rip1: Sending response via eth0



Код: Выделить всё
# birdc show route
BIRD 1.6.0 ready.
0.0.0.0/0          via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:02] * (120/3)
111.11.33.0/24     dev eth3 [direct1 2016-08-17 21:37:57] * (240)
178.94.236.0/22    via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:02] * (120/3)
37.52.204.0/22     via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:02] * (120/3)
192.168.8.0/24     dev eth0 [direct1 2016-08-17 21:34:02] * (240)
95.135.194.0/23    via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:02] * (120/3)


Как видно bird дальше не видит изменения роута на данном интерфейсе. Вот такая вот проблема и ответа пока на неё ненашел.

Почему rip? потому что это единственное что поддерживает мой adsl модем, хотел сделать 2 default route на базе динамических протоколов машрутизации чтобы сильно не заморачиватся. Моя цель начать знакомство с bird, в последствии перейти на него на работе.
Melman
новичок
 
Сообщения: 13
Зарегистрирован: 12 янв 2016, 00:11

Re: Bird, вопросы новичка.

Сообщение root » 18 авг 2016, 10:44

BIRD какой версии ? Насколько свежий ?

А что если не выполнять down ифейса руками, а уронить линк физически, т.е. выдернув кабель из eth3, тем самым спровоцировав падение дефолта через eth3, а затем воткнуть обратно, то поведение поменяется ?

Далее так же будет интересен дамп с eth3 после его поднятия, т.е. процесс получения адреса по DHCP:
Код: Выделить всё
tcpdump -s0 -vni eth3 port 67 or port 68

Т.е. default там точно приходит ?

Так же уже интересен вывод:
Код: Выделить всё
birdc sh route for 0.0.0.0 all

Как в нормальном так и в не нормальном состоянии.

Так же я бы попробовал после устраивания падения eth3, устроить падение и eth0, а затем включать по очереди: а) eth3 б) eth0.
Что по итого в роутах ?

Так же попробовать явно описать:
http://bird.network.cz/?get_doc&f=bird-6.html#ss6.6
6.6 Kernel
...skiped...
merge paths switch [limit number]
Usually, only best routes are exported to the kernel protocol. With path merging enabled, both best routes and equivalent non-best routes are merged during export to generate one ECMP (equal-cost multipath) route for each network. This is useful e.g. for BGP multipath. Note that best routes are still pivotal for route export (responsible for most properties of resulting ECMP routes), while exported non-best routes are responsible just for additional multipath next hops. This option also allows to specify a limit on maximal number of nexthops in one route. By default, multipath merging is disabled. If enabled, default value of the limit is 16.

Так же, судя по названию ифейсов, у вас какой то из линухов. Погуглите по ECMP (equal-cost multipath) для вашей ОС. Если мне не изменяет память, то там есть какие то заморочки, но утверждать не буду.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Bird, вопросы новичка.

Сообщение Melman » 18 авг 2016, 22:39

ех, еще интересней становится:

Код: Выделить всё
dpkg -l|grep bird
ii  bird                           1.6.0-1                      amd64        Internet Routing Daemon


до вынимания шнурка:
Код: Выделить всё
 birdc sh route for 0.0.0.0 all
BIRD 1.6.0 ready.
0.0.0.0/0          via 192.168.8.250 on eth0 [rip1 2016-08-17 21:34:02] ! (120/3)
        Type: RIP unicast univ
        RIP.metric: 3
        RIP.tag: 0000
                   via 111.11.33.1 on eth3 [kernel1 2016-08-18 18:51:37] (10)
        Type: inherit unicast univ
        Kernel.source: 3
        Kernel.metric: 0


после ничего не изменилось.

А вот логи:
Код: Выделить всё
2016-08-18 22:28:19 <TRACE> rip1 < interface eth3 changes link
2016-08-18 22:28:24 <WARN> Netlink: File exists
2016-08-18 22:28:27 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:28:40 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:28:40 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:28:40 <TRACE> rip1: Sending response via eth0
2016-08-18 22:28:44 <WARN> Netlink: File exists
2016-08-18 22:28:56 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:29:04 <WARN> Netlink: File exists
2016-08-18 22:29:04 <TRACE> rip1: Main timer fired
2016-08-18 22:29:10 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:29:10 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:29:10 <TRACE> rip1: Sending response via eth0
2016-08-18 22:29:24 <WARN> Netlink: File exists
2016-08-18 22:29:27 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:29:40 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:29:40 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:29:40 <TRACE> rip1: Sending response via eth0
2016-08-18 22:29:44 <WARN> Netlink: File exists
2016-08-18 22:29:56 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:30:04 <WARN> Netlink: File exists
2016-08-18 22:30:04 <TRACE> rip1: Main timer fired
2016-08-18 22:30:10 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:30:10 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:30:10 <TRACE> rip1: Sending response via eth0
2016-08-18 22:30:24 <WARN> Netlink: File exists
2016-08-18 22:30:27 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:30:40 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:30:40 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:30:40 <TRACE> rip1: Sending response via eth0
2016-08-18 22:30:44 <WARN> Netlink: File exists


Видно что шнур вытащили, но bird не может всунуть в систему новый default route что конечно странно.

Код: Выделить всё
2016-08-18 22:31:01 <TRACE> rip1 < interface eth3 changes link
2016-08-18 22:31:04 <WARN> Netlink: File exists
2016-08-18 22:31:04 <TRACE> rip1: Main timer fired
2016-08-18 22:31:10 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:31:10 <TRACE> rip1: Sending regular updates for eth0
2016-08-18 22:31:10 <TRACE> rip1: Sending response via eth0
2016-08-18 22:31:24 <WARN> Netlink: File exists
2016-08-18 22:31:27 <TRACE> rip1: Response received from 192.168.8.250 on eth0
2016-08-18 22:31:39 <TRACE> rip1: Interface timer fired for eth0
2016-08-18 22:31:39 <TRACE> rip1: Sending regular updates for eth0


Включили назад, в итоге выдергивание кабеля ничего в обще не дало.
В таком случае даже default route на adsl не поменялся, странная ситуация.
Melman
новичок
 
Сообщения: 13
Зарегистрирован: 12 янв 2016, 00:11

Re: Bird, вопросы новичка.

Сообщение root » 19 авг 2016, 09:40

Дамп получения IP по DHCP смотрели ? Что на тему merge ? Что на тему дергания ифейсов по очереди ?

Melman писал(а):после ничего не изменилось.

Так где вывод sh route ?

Так же что при всех случаях смотреть что показывается в маршрутах по netstat -anr или route -n (кажется так в линухах) в самой системе ?

В protocol kernel значение в import по прежнему all ?

Добавить логирование на импорт и экспорт маршрутов. Пример:
Код: Выделить всё
filter debugRoutes{
 accept "accept ", net, " to " , gw;
}

И применить этот фильтр и в import и в export.

Собственно засада тут явно в виду дефолта по dhcp и самой OS. Вот и надо траблшутить этот процесс. Т.е. одновременно смотреть в дамп, чтобы точно понимать что и когда приходит, в таблу маршрутизации самой OS и в bird и его логи.

Что-то гугление не приводит ни к каким результатам. Толи ни у кого нет подобных схем bird+dhcp, толи у всех все работает и вопросов не возникает.

P.S. Можно ещё попробовать засандалить в protocol kernel опцию device routes, но это на совсем крайний случай, чисто посмотреть что получится.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Bird, вопросы новичка.

Сообщение Melman » 19 авг 2016, 11:31

Спасибо, я вижу моментов много.
Наверное чтобы не дергать пока домашний канал попробую сделать стенд и симулировать проблему.
Постараюсь вечером выложить всю информацию.
Melman
новичок
 
Сообщения: 13
Зарегистрирован: 12 янв 2016, 00:11


Вернуться в Маршрутизация / Routing

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3