Not Installing BGP Route

Good Evening,

I’m working on a setup where I’m trying to import routes learned from a BGP peer into a specific routing table, and they never appear to actually be installed, despite BGP not saying they’ve been filtered.

Neighbor

set address-family ipv4-unicast nexthop-self
set address-family ipv4-unicast route-map export 'EXPORT-SEATTLE'
set address-family ipv4-unicast route-map import 'IMPORT-SEATTLE'
set address-family ipv4-unicast soft-reconfiguration inbound
set bfd profile 'BGP'
set graceful-restart 'enable'
set remote-as 'internal'

Route Map IMPORT-SEATTLE

set rule 1 action 'permit'
set rule 1 set table '100'
set rule 9999 action 'deny'

bgp ipv4 neighbors IP received-routes

BGP table version is 20, local router ID is 23.131.161.1, vrf id 0
Default local pref 100, local AS 13925
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
 *> 0.0.0.0/0        23.131.161.182           0    100      0 64515 i

show ip route table 100
Is empty.

The IPv6 side of this session, with exactly the same route-map and config, just s/ipv4/ipv6/ works fine.

show ipv6 route table 100

VRF default table 100:
B>* ::/0 [200/0] via 2620:138:5002::2, tun0, weight 1, 02:47:23

The only difference I can think of is that the main routing table has a static default for ipv4, but not for v6. Is that somehow preventing the installation of the BGP route on table 100?

Reset bgp peer
Probably route map attached later (after prefix has received)
Which version?

Doesn’t appear that resetting the BGP peer fixed it. Running latest as of yesterday afternoon.

Version:          VyOS 1.5-rolling-202402291036

I’ve also done a full system reboot as well to see if that did anything, with no change.

OK, it does seem to be related to the static default route in the default table.

This is the output from vtysh running show bgp ipv4 detail where it shows the static default, and comparing to the bgp received default, the static wins, and the BGP route will never be installed, even though I’m asking for it to go into another table.

r1-a# show bgp ipv4 detail
BGP table version is 20, local router ID is 23.131.161.1, vrf id 0
Default local pref 100, local AS 13925
BGP routing table entry for 0.0.0.0/0, version 15
Paths: (2 available, best #2, table default)
  Advertised to non peer-group peers:
  23.131.161.186
  64515
    23.131.161.182 from 23.131.161.182 (23.131.161.182)
      Origin IGP, metric 0, localpref 100, valid, internal
      Last update: Fri Mar  1 17:59:34 2024
BGP routing table entry for 0.0.0.0/0, version 15
Paths: (2 available, best #2, table default)
  Advertised to non peer-group peers:
  23.131.161.186
  Local
    50.106.10.221 from 0.0.0.0 (23.131.161.1)
      Origin incomplete, metric 0, weight 32768, valid, sourced, best (Weight)
      Last update: Fri Mar  1 16:56:46 2024

You could probably work around this using a full VRF instead of just trying to use a second table, but this does seem problematic in general, as any local route will prevent a matching BGP route from being installed into ANY table.

I tried changing my local static default from 0.0.0.0/0 to the pair of 0.0.0.0/0 and 128.0.0.0/0, which worked, and allows for the BGP route to be installed in the separate table, but is pretty ugly.