What is the expected iBGP behaviour for routes with different local_pref?

Tim Weippert weiti+bird-users at weiti.org
Mon Jul 1 13:02:21 CEST 2024


Hi, 

don't know if i'm right, but i think this has nothing to do with iBGP
and local_pref behaviour. As i see you don't use "add path", therefore i
understood that only "best paths" are exchanged and for your server137
the route with local_pref 100 is the best path.

If you want "all available" routes propagated via (i)BGP you should
use

	add paths switch|rx|tx

in my opinion to also transport the "non preferred" paths.

HTH, 
tim

On Mon, Jul 01, 2024 at 10:26:40AM GMT, Nico Schottelius via Bird-users wrote:
> 
> Hello everyone,
> 
> I was wondering how bird *should* behave if within one AS a route is
> received from outside multiple times but with different local_pref set?
> 
> My expectation would be that using iBGP, the lower local_pref route
> would show up on all routers, but the higher one is selected.
> 
> What I observe is that seems the router who initially receives the lower
> local_pref route does not export it via iBGP, even though it matches the
> export filter.
> 
> Example:
> 
> - server145 has a non-preferable uplink and imports all routes with
>   local_pref = 80
> - server137 has a preferable uplink and imports all routes without
>   local_pref modification, thus local_pref = 100
> - server145 has both routes
> - server137 only has the preferable route
> - It seems that server145 is not exporting its lower local_pref routes,
>   even though they match the export filter
> 
> Excerpt from server145, importing 2600:: route from outside, with
> setting local_pref to 80:
> 
> --------------------------------------------------------------------------------
> bird> show route all for 2600::
> Table master6:
> 2600::/48            unicast [ibgp_server137 14:34:07.078 from 2a0a:e5c0:0:b::89] * (100/96) [AS1239i]
>         via fe80::3eec:efff:fed2:d1e4 on eth0
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 39040 1299 174 1239
>         BGP.next_hop: 2a0a:e5c0:31:2::1
>         BGP.local_pref: 100
>         BGP.community: (1299,20000) (39040,100) (39040,109) (39040,1000)
>         BGP.otc: 209898
>                      unicast [outgoing_server120 14:33:56.123] (100) [AS1239i]
>         via 2a0a:e5c0:31:4::1 on tun1
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 39040 1299 174 1239
>         BGP.next_hop: 2a0a:e5c0:31:4::1 fe80::897b:493f:bd44:ec60
>         BGP.local_pref: 80
>         BGP.community: (1299,20000) (39040,100) (39040,109) (39040,1000)
>         BGP.otc: 209898
>                      unicast [outgoing_server121 14:34:41.137] (100) [AS1239i]
>         via 2a0a:e5c0:32:4::1 on tun0
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 15576 3356 174 1239
>         BGP.next_hop: 2a0a:e5c0:32:4::1 fe80::fa84:82d2:a117:43c
>         BGP.local_pref: 80
>         BGP.community: (3356,2) (3356,22) (3356,86) (3356,505) (3356,601) (3356,666) (3356,903) (3356,2074) (15576,100) (15576,102) (15576,1000)
>         BGP.otc: 209898
>                      unicast [ibgp_server138 14:34:56.416 from 2a0a:e5c0:0:b::8a] (100/96) [AS1239i]
>         via fe80::3eec:efff:fed2:d0c4 on eth0
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 15576 3356 174 1239
>         BGP.next_hop: 2a0a:e5c0:32:2::1
>         BGP.local_pref: 100
>         BGP.community: (3356,2) (3356,22) (3356,86) (3356,505) (3356,601) (3356,666) (3356,903) (3356,2074) (15576,100) (15576,102) (15576,1000)
>         BGP.otc: 209898
> --------------------------------------------------------------------------------
> 
> And on server137, this route is not visible, only the local_pref = 100
> are visible:
> 
> --------------------------------------------------------------------------------
> bird> show route all for 2600::
> Table master6:
> 2600::/48            unicast [outgoing_server120 14:41:16.420] * (100) [AS1239i]
>         via 2a0a:e5c0:31:2::1 on oserver120
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 39040 1299 174 1239
>         BGP.next_hop: 2a0a:e5c0:31:2::1
>         BGP.local_pref: 100
>         BGP.community: (1299,20000) (39040,100) (39040,109) (39040,1000)
>         BGP.otc: 209898
>                      unicast [ibgp_server138 14:42:17.052 from 2a0a:e5c0:0:b::8a] (100/96) [AS1239i]
>         via fe80::3eec:efff:fed2:d0c7 on eth5
>         Type: BGP univ
>         BGP.origin: IGP
>         BGP.as_path: 209898 15576 3356 174 1239
>         BGP.next_hop: 2a0a:e5c0:32:2::1
>         BGP.local_pref: 100
>         BGP.community: (3356,2) (3356,22) (3356,86) (3356,505) (3356,601) (3356,666) (3356,903) (3356,2074) (15576,100) (15576,102) (15576,1000)
>         BGP.otc: 209898
> --------------------------------------------------------------------------------
> 
> On the iBGP session we import/export everything that is either static or
> BGP,excerpt from server137:
> 
> --------------------------------------------------------------------------------
>   Channel ipv6
>     State:          UP
>     Table:          master6
>     Preference:     100
>     Input filter:   ACCEPT
>     Output filter:  static_and_bgp
>     Routes:         3 imported, 206002 exported, 2 preferred
>     Route change stats:     received   rejected   filtered    ignored   accepted
>       Import updates:         211444          0          0         70     211374
>       Import withdraws:       230070          0        ---      24038     206032
>       Export updates:         645070     137427         98        ---     507545
>       Export withdraws:        64508        ---        ---        ---      96296
>     BGP Next hop:   2a0a:e5c0:0:b::89 fe80::3eec:efff:fed2:d1e4
>     IGP IPv6 table: master6
> --------------------------------------------------------------------------------
> 
> But it seems server145 is not exporting them from how it looks:
> 
> --------------------------------------------------------------------------------
>   Channel ipv6
>     State:          UP
>     Table:          master6
>     Preference:     100
>     Input filter:   ACCEPT
>     Output filter:  static_and_bgp
>     Routes:         206011 imported, 3 exported, 206008 preferred
>     Route change stats:     received   rejected   filtered    ignored   accepted
>       Import updates:         503843          0          0        445     503398
>       Import withdraws:        91701          0        ---         78      91623
>       Export updates:         927807     684226         97        ---     243484
>       Export withdraws:        33627        ---        ---        ---     230240
>     BGP Next hop:   2a0a:e5c0:0:b::91 fe80::2f0:cbff:fefe:b70c
>     IGP IPv6 table: master6
> --------------------------------------------------------------------------------
> 
> Even though a lot more routes match the filter:
> 
> --------------------------------------------------------------------------------
> bird> show route count filter static_and_bgp
> 3803744 of 3803746 routes for 950939 networks in table master4
> 824133 of 824170 routes for 206080 networks in table master6
> Total: 4627877 of 4627916 routes for 1157019 networks in 2 tables
> bird>
> --------------------------------------------------------------------------------
> 
> So is this a misconfiguration or a bug or intended behaviour?
> 
> Because *if* the upstream of server137 goes down, it starts receiving
> routes from server145, so failover works, but it seems wrong to me to
> not have the routes by default.
> 
> Best regards,
> 
> Nico
> 
> p.s.: the config for server145 that does not export the routes is:
> 
> --------------------------------------------------------------------------------
> define pref_tunnel_fiberstream = 80; # used
> 
> filter static_and_bgp {
>   if source ~ [ RTS_STATIC, RTS_BGP ] then accept;
>   reject;
> }
> 
> 
> protocol bgp outgoing_server120 {
>     local as myas;
>     direct;
>     password "...";
>     bfd on;
> 
>     neighbor 2a0a:e5c0:31:4::1 as 209898;
>     local role customer;
>     default bgp_local_pref pref_tunnel_fiberstream;
> 
> 
>     ipv6 {
>       import filter allow_all;
>       export filter p5_to_world;
>     };
> 
>     ipv4 {
>       import filter allow_all;
>       export filter p5_to_world;
>       extended next hop on;
>     };
> }
> 
> 
> protocol bgp ibgp_server137 {
>     local as myas;
>     neighbor 2a0a:e5c0:0:b::89 as myas;
>     direct;
>     bfd on;
> 
>     ipv6 {
>       import all;
>       export filter static_and_bgp;
> 
>       gateway recursive;
>     };
> 
>     ipv4 {
>       import all;
>       export filter static_and_bgp;
> 
>       gateway recursive;
>       extended next hop on;
>     };
> }
> --------------------------------------------------------------------------------
> 
> -- 
> Sustainable and modern Infrastructures by ungleich.ch



-- 
Tim Weippert
http://weiti.org - weiti at weiti.org
GPG Fingerprint - E704 7303 6FF0 8393 ADB1  398E 67F2 94AE 5995 7DD8


More information about the Bird-users mailing list