<html><head></head><body>Hi,<br><br>You could very likely mitigate this with:<br><br>sysctl -w net.ipv4.ip_nonlocal_bind=1<br><br>K.<br><br><div class="gmail_quote">On 7 January 2020 21:45:43 CET, Ben Tremblay <ben@tremblay.dev> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">Hi all,<br><br>I have encountered a problem with how BIRD opens the listening socket for strict bind BGP.<br><br>In particular, BIRD sometimes tries to open the listening socket for the protocol when the configured local IP is not yet present on the interface. It seems that BIRD will try to bind the BGP socket to the configured IP if any address exists on the protocol interface that can be used to reach the neighbor. Let me give an example to clarify.<br><br>I have a minimal reproducible example with the following BGP configuration:<br><br>    router id 192.168.0.1;<br><br>    protocol device {<br>        scan time 10;<br>    }<br><br>    protocol bgp bgp_01 {<br>            ipv4 {<br>                    import all;<br>                    export all;<br>            };<br>            debug all;<br>            local 192.168.0.1 port 179 as 1;<br>            neighbor 192.168.0.2 port 179 as 1;<br>            interface "host1";<br>            direct;<br>            strict bind yes;<br>    }<br><br>Given this configuration, I can reproduce the problem behaviour by starting the protocol with no addressing on the host1 interface and then adding an address which includes the neighbor IP in its subnet, e.g. 192.168.0.3/24. Once this address/route is added, BIRD logs the following:<br><br>    Jan 07 12:09:31 router03 bird[57497]: bgp_01: Neighbor ready<br>    Jan 07 12:09:31 router03 bird[57497]: bgp_01: Socket error: bind: Cannot assign requested address<br>    Jan 07 12:09:31 router03 bird[57497]: bgp_01: Cannot open listening socket<br><br>And the protocol enters an error state:<br><br>    BIRD 2.0.6 ready.<br>    Name       Proto      Table      State  Since         Info<br>    device1    Device     ---        up     11:55:51.049<br>    bgp_01     BGP        ---        down   12:09:31.264  Error: No listening socket<br><br>The reason this error is so problematic for me is that the protocol cannot recover from this state without administrative intervention (e.g. configuring bird or restarting the protocol).<br><br>So, I have two questions:<br><br>    1. Is this correct behaviour?<br>    2. Can I configure BIRD so that my protocol is able to recover after suffering a socket error like this?<br><br>I should also mention I can actually observe this socket error occur when adding the 'correct' address to the protocol interface, but only in the context of a larger application and only some of the time.<br><br>Thanks,<br>Ben<br><br><br><br><br><br><br></pre></blockquote></div><br>-- <br>Sent from my Android device with K-9 Mail. Please excuse my brevity.</body></html>