How to change route gw on export to BGP neighbor?

ico ico at petrzalka.net
Wed Nov 4 14:09:48 CET 2020


Hi,

Thank you for reply. Unfortunately that seems not to solve my problem. 
Config of my bird instance is in previous email. The "receiving peer" I 
set in test lab running bird is configured as follows:

########
router id 1.1.1.1;

protocol bgp {
     local 1.1.1.1 as 65000;
     neighbor 1.1.1.2 as 65000;
     strict bind;
     ipv4 {
         import filter {
             print "import bgp ", net, " gw ", gw, " bnh ", bgp_next_hop;
             #gw = 1.1.1.5;
             accept;
         };
         export none;
     };
}
########

This should simply receive a route 2.2.2.0/24 with whatever gw attribute 
and with bgp_next_hop set to 1.1.1.5. This is of course received, but 
the gw is not set to 1.1.1.5 on receiver. The print statement produces this:

<INFO> import bgp 2.2.2.0/24 gw :: bnh 1.1.1.5

Receiver's console:

bird> show route all
Table master4:
2.2.2.0/24           unreachable [bgp1 13:54:09.354 from 1.1.1.2] * 
(100) [i]
         Type: BGP univ
         BGP.origin: IGP
         BGP.as_path:
         BGP.next_hop: 1.1.1.5
         BGP.local_pref: 100

As you can see the next hop is 1.1.1.5 but still it is unreachable. I 
can set it on receiver side (with commented out "gw = 1.1.1.5;"), but 
that will require a change on receiver, which I am unable to do in my 
situation. Is there a workaround for this?

Thanks

ico

On 2. 11. 2020 19:26, Alexander Zubkov wrote:
> Hi,
> 
> There is no reason to set gw attribute in the export filter, because
> this attribute is not exported over bgp. bgp_next_hop is what you
> want. You should also consider the "next hop self" option.
> 
> On Mon, Nov 2, 2020 at 5:53 PM ico <ico at petrzalka.net> wrote:
>>
>> 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