next-hop announcement/withdrawal process
Eric Cables
ecables at gmail.com
Mon Aug 4 02:01:18 CEST 2014
Try this:
protocol device {
scan time 10; # Scan interfaces every 10 seconds
primary "lo" 127.0.0.1;
}
-- Eric Cables
On Sun, Aug 3, 2014 at 3:11 PM, Pavlos Parissis <pavlos.parissis at gmail.com>
wrote:
> Hi,
>
> I am building a solution where I have N HAProxy servers which have BGP
> and BFD sessions with 2 upstream routers. Bird runs on all HAProxy
> servers and announces the same prefixes via BGP. I am using ECMP on
> upstream routes to balance incoming traffic to these HAProxy servers,
> which balance traffic to N backend servers.
>
> I need to advertise/withdraw several IP prefixes within the same range
> (192.168.200.0/24) based on the health of a service, in this case the
> frontend on HAProxy. These IPs are assigned only the loopback interface.
>
> The problem I am facing is that when I adjust a filter in order to
> withdraw the route, all routes are withdrawn and the remaining are
> announced again. According to the doc if a reload on bird brings a new
> configuration for a protocol, that protocol will be restarted. So, it is
> expected behavior.
>
> Below is the log[1] after I removed '192.168.200.1' from prefix set
> anycast_prefixes in loopback_ACL filter and reloaded bird.
> I was monitoring BGP protocols in a loop running
> bird show protocols all "bgp8" and saw that
> 'export updates' counter was increased from 2 to 3 and 'export
> withdraws' counter was increased from 0 to 2.
>
> Is there a way to withdraw to a route from a list without effecting the
> rest routes from the list?
>
> The only way I have found so far, it was by removing the specific IP
> from the loopback interface. But, this solution prevents a
> reload/restart on HAProxy as it can't bind anymore to the socket
>
>
> Cheers,
> Pavlos
>
> [1]
> 23:37:52 <INFO> Reconfiguration requested by SIGHUP
> 23:37:52 <INFO> Reconfiguring
> 23:37:52 <TRACE> direct1: Reconfigured
> 23:37:52 <INFO> Reloading protocol direct1
> 23:37:52 <INFO> Restarting protocol direct1
> 23:37:52 <TRACE> direct1: Shutting down
> 23:37:52 <TRACE> direct1: State changed to flush
> 23:37:52 <TRACE> bgp_peer1: Reconfigured
> 23:37:52 <TRACE> bgp_peer2: Reconfigured
> 23:37:52 <INFO> Reconfigured
> 23:37:52 <TRACE> direct1 > removed [sole] 192.168.200.1/32 dev lo
> 23:37:52 <TRACE> direct1 > removed [sole] 192.168.200.2/32 dev lo
> 23:37:52 <TRACE> direct1: State changed to down
> 23:37:52 <TRACE> direct1: Starting
> 23:37:52 <TRACE> direct1: Connected to table master
> 23:37:52 <TRACE> direct1: State changed to feed
> 23:37:52 <TRACE> direct1 < primary address 192.168.200.1/32 on interface
> lo added
> 23:37:52 <TRACE> direct1 > filtered out 192.168.200.1/32 dev lo
> 23:37:52 <TRACE> direct1 < secondary address 127.0.0.0/8 on interface lo
> added
> 23:37:52 <TRACE> direct1 < secondary address 192.168.200.2/32 on
> interface lo added
> 23:37:52 <TRACE> direct1 > added [best] 192.168.200.2/32 dev lo
> 23:37:52 <TRACE> bgp_peer2 < filtered out 192.168.200.2/32 dev lo
> 23:37:52 <TRACE> bgp_peer1 < filtered out 192.168.200.2/32 dev lo
> 23:37:52 <TRACE> direct1 < primary address 192.168.80.0/20 on interface
> eth0 added
> 23:37:52 <TRACE> direct1: State changed to up
> 23:37:54 <TRACE> bgp_peer2: Sending KEEPALIVE
> 23:37:54 <TRACE> bgp_peer1: Sending KEEPALIVE
> 23:37:54 <TRACE> bgp_peer2: Got KEEPALIVE
> 23:37:56 <TRACE> bgp_peer1: Got KEEPALIVE
>
>
> bird.conf
> # Override router ID
> router id 192.168.88.194;
>
> # Listens only on eth0's IP
> listen bgp address 192.168.88.194;
>
> filter loopback_ACL
> prefix set anycast_prefixes;
> {
> anycast_prefixes = [
> 192.168.200.1/32,
> 192.168.200.2/32
> ];
> if net ~ anycast_prefixes then accept;
> else reject;
> }
>
>
> filter anycast_range {
> if net ~ [ 192.168.200.0/24 ] then accept;
> else reject;
> }
>
> protocol direct {
> interface "lo";
> debug all;
> import filter loopback_ACL;
> export none;
> }
>
> protocol kernel kernel1 {
> disabled yes;
> }
>
> protocol device {
> scan time 10;
> # TODO do I need this?
> }
>
> protocol static {
> disabled yes;
> }
>
> protocol bfd {
> interface "eth0" {
> min rx interval 500 ms;
> min tx interval 500 ms;
> idle tx interval 1000 ms;
> multiplier 3;
> };
> }
>
> template bgp BGP_PEERS {
> bfd on;
> debug all;
> import none;
> export filter anycast_range;
> direct;
> hold time 30;
> startup hold time 240;
> connect retry time 120;
> keepalive time 10;
> start delay time 5;
> error wait time 60, 300;
> error forget time 300;
> disable after error off;
> next hop self;
> path metric 1;
> default bgp_med 0;
> default bgp_local_pref 0;
> }
>
> protocol bgp bgp_peer1 from BGP_PEERS {
> disabled no;
> description "My-BGP-Peer1";
> local as 46111;
> neighbor 192.168.95.252 as 46111;
> source address 192.168.88.194;
> }
>
> protocol bgp bgp_peer2 from BGP_PEERS {
> disabled no;
> description "My-BGP-Peer2";
> local as 46111;
> neighbor 192.168.95.253 as 46111;
> source address 192.168.88.194;
> }
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20140803/fe58f386/attachment-0001.html>
More information about the Bird-users
mailing list