Problems adding another router to OSPF

ico ico at petrzalka.net
Sat Mar 19 16:09:50 CET 2016


Hello,

I'm writing this mail to get some help debugging some bird issues.

Our OSPF network consists of 14 linux routers running bird, until
now I didn't see any problem. Now I wanted to 15th router, but I was
unable to do so. I'll try to describe the problem:

Let's talk about routers rA, rB, and rC:

rA:
- running bird
- NIC eth0A: part of OSPF, 11 neighbors (and the rest of OSPF)
- NIC eth1A: part of OSPF, 1 neighbor - rB
- some other stub NICs

rB:
- running bird
- NIC eth0B: part of OSPF, 1 neighbor - rA
- NIC eth1B: not part of OSPF, rC and some other routers here
- some other stub NICs

rC:
- not running bird
- NIC eth0C: not part of OSPF, rB and some other routers here
- some other stub NICs

Currently all routes via rC are static on rB. All these routers are
exported to the rest of OSPF, soo rA (and others) know about all
these routes. No problem here.

I want to add rC into OSPF. rC and rB are neighbors, so I should
start bird on rC, configure rB and rC to talk to each other.  rC
should tell all it's routes to the rest of the OSPF, so I can remove
static routes on rB (routes via rC). It looks simple.

My problem is this:
When bird on rB and rC start to talk to each other, rB learns all
routes from rC (this is expected). But something between rB and rA
is wrong, becouse rA un-learns all new routes from rC.

If I don't remove static routes on rB, bird on rB knows about both
statically configured routes via rC and routes learned from rC via
OSPF. If I remove static routes on rB, bird on rB knows only about
routes learned from rC. That is normal. What is wrong - in both
cases rA drops these new routes rB learns from rC.

If I stop bird or rC, all static routes from rB (if not manually
removed) are again re-learned on rA.

Question #1: Where could be a problem? Why rA doesn't want routes
from rC?

Question #2: What is the best way to debug this?

Thank you.

ico

##################################################

# BEGIN bird.conf @ host A
log stderr all;
debug protocols all;
router id rA;
protocol device { ... }
protocol static { ... };
protocol kernel {
     learn on; persist; scan time 3;
     import filter {
         if 0.0.0.0/0 = net then reject;
         accept;
     };
     export all;
     debug { states, routes, filters, interfaces };
}
protocol ospf {
     debug { states, routes, filters, interfaces, events };
     tick 2; rfc1583compat yes;
     import all;
     export all;
     area 0.0.0.0 {
         stub no;
         interface "eth0A" {
             hello 5; retransmit 2; wait 10; dead 20;
             type nonbroadcast; check link yes;
             authentication cryptographic; password "pass";
             neighbors { ... };
         };
         interface "eth1A" {
             hello 5; retransmit 2; wait 10; dead 20;
             type nonbroadcast; check link yes;
             authentication cryptographic; password "pass";
             neighbors {
                 rB eligible;
             };
         };
         interface "eth2A" { stub yes; } ...
     };
};
# END bird.conf @ host A

##################################################

# BEGIN bird.conf @ host B
log stderr all;
debug protocols all;
router id rB;
protocol device { ... }
protocol static { ... };
protocol kernel {
     learn on; persist; scan time 3;
     import filter {
         if 0.0.0.0/0 = net then reject;
         accept;
     };
     export all;
     debug { states, routes, filters, interfaces };
}
protocol ospf {
     debug { states, routes, filters, interfaces, events };
     tick 2; rfc1583compat yes;
     import all;
     export all;
     area 0.0.0.0 {
         stub no;
         interface "eth0B" {
             hello 5; retransmit 2; wait 10; dead 20;
             type nonbroadcast; check link yes;
             authentication cryptographic; password "pass";
             neighbors {
                 rA eligible;
             };
         };
         interface "eth1B" {
             hello 5; retransmit 2; wait 10; dead 20;
             type nonbroadcast; check link yes;
             authentication cryptographic; password "pass";
             neighbors {
                 rC eligible;
             };
         };
         interface "eth2B" { stub yes; } ...
     };
};
# END bird.conf @ host B

##################################################

# BEGIN bird.conf @ host C
log stderr all;
debug protocols all;
router id rC;
protocol device { ... }
protocol static { ... };
protocol kernel {
     learn on; persist; scan time 3;
     import filter {
         if 0.0.0.0/0 = net then reject;
         accept;
     };
     export all;
     debug { states, routes, filters, interfaces };
}
protocol ospf {
     debug { states, routes, filters, interfaces, events };
     tick 2; rfc1583compat yes;
     import all;
     export all;
     area 0.0.0.0 {
         stub no;
         interface "eth0C" {
             hello 5; retransmit 2; wait 10; dead 20;
             type nonbroadcast; check link yes;
             authentication cryptographic; password "pass";
             neighbors {
                 rA eligible;
             };
         };
         interface "eth1C" { stub yes; } ...
     };
};
# END bird.conf @ host C


More information about the Bird-users mailing list