How to change route gw on export to BGP neighbor?

ico ico at petrzalka.net
Mon Nov 2 17:47:19 CET 2020


Hello,

I'm trying to to export some routes from our internal OSPF to BGP , both 
running in the same bird instance. I am able to filter those routes via 
BGP just fine (some tables connected via pipe). The problem is that all 
exported routes have private gw addresses (10.x.x.x). I am unable to 
configure bird to change gw of routes before then get sent to neighbors. 
Neighbors see original gateways from 10.0.0.0/8 range which is 
invalid/unreachable from outside of course.

Here is also some simplyfied example, not showing OSPF setup etc. In 
this example I also don't show the pipes between tables. All of those 
doesn't seem to be important in this case.

########
router id 1.1.1.2;

protocol kernel krnl4 {
     ipv4 {
         export all;
         import all; # route 2.2.2.0/24 gets into bird here
     };
     learn;
}
protocol device {
}

protocol bgp {
     local 1.1.1.2 as 65000;
     neighbor 1.1.1.1 as 65000;
     strict bind;
     ipv4 {
         import none;
         export filter {
             # here I want to export routes with changed gateways
             bgp_next_hop = 1.1.1.5; # sets next hop but not gw
             gw = 1.1.1.5; # <ERR> filters, line XY: Invalid gw address
             print "export bgp ", net, " gw ", gw, " bnh ", bgp_next_hop;
             # <INFO> export bgp 2.2.2.0/24 gw 1.1.1.5 bnh 1.1.1.5
             accept;
         };
     };
}
########

With similar setup in a lab I was able to change those gw attributes on 
RECEIVING side in import filter to any arbitrary value I wanted. In real 
life I don't manage those BGP routers so I need to make sure to send 
correct routes.

The example config prints changed gw but BGP peer sees the original gw. 
In some tests I got error "Invalid gw address" but now I don't have that 
config. Here it just ignores changed gw.

Is there a configuration to achieve this?

Thanks

ico


More information about the Bird-users mailing list