BIRD / BGP / IPv6 / source address directive : auto vs link local vs GUA
Hi ! I'm learning BGP and I'm really puzzled about the 'source address' directive in the context of IPv6. I've seen some people explicit a GUA source address ( example : source address 2001:db8:0:0::1; ) Reading the documentation, watching the debug logs and playing with bird6c didn't help me understand. Leaving to auto ( no directive ) was functioning ok, but my BGP setup is rather simple. What is better ? No directive, link local or Global Unicast Address ? Thank you for any clue :-)
Hi Olivier, On 03/22/2015 08:03 AM, olivier a wrote:
I'm learning BGP and I'm really puzzled about the 'source address' directive in the context of IPv6. I've seen some people explicit a GUA source address ( example : source address 2001:db8:0:0::1; ) Reading the documentation, watching the debug logs and playing with bird6c didn't help me understand. Leaving to auto ( no directive ) was functioning ok, but my BGP setup is rather simple. What is better ? No directive, link local or Global Unicast Address ?
Thank you for any clue :-)
First of all, there's nothing wrong with a rather simple looking confinguration. It might show that the configuration language is well thought out and powerful. :-) There are two different scenarios for which the source address best practice differs: eBGP and iBGP. In the case of eBGP, you usually have a single link to a router of an external party, in another AS, with a little subnet in between. In this case you use the address on your side in this little subnet as source. AS64515 AS65517 ExternalRouter ----------- YourRouter 203.0.113.5/30 203.0.113.6/30 2001:db8::1/120 2001:db8::2/120 2001:db8:1000:1/128 (loopback) So, e.g. IPv4 config: protocol bgp ebgp_other { local as 64515; neighbor 203.0.113.5 as 65517; } In this case, bird will automatically choose 203.0.113.6 as source address. Since there's only one path to that external router, it's ok to let the connection depend on this specific interface. For iBGP, you want to exchange information about external routes you learned from the ExternalRouter with other routers in your own network (AS). In this case it's best practice to use a loopback address from the router to set up the iBGP connection. The loopback addresses are put into your IGP (e.g. OSPF) as host-route (/32, /128). Doing so will make sure that your IGP will always try to find the best route to the other router within your own network, independent of which interfaces of it are up or down, and which path to it is available. protocol bgp ibgp_my_other_router { import all; # learn other external routes export all; local as 64515; source address 2001:db8:1000:1; neighbor 2001:db8:1045::6 as 64515; } Even in a small network, where there aren't multiple possible routes between internal routers (e.g. they are in the same vlan), I still use it this way, to make sure any colleague or whoever needs to work with it in the future will quickly understand how it's set up. Link local addresses (fe80::) are usually not used by BGP, but they are for some reason used a lot by OSPF to point to the next hop for a route. Have fun, -- Hans van Kranenburg - System / Network Engineer T +31 (0)10 2760434 | hans.van.kranenburg@mendix.com | www.mendix.com
Hello, On Sun, 22 Mar 2015, Hans van Kranenburg wrote:
First of all, there's nothing wrong with a rather simple looking confinguration. It might show that the configuration language is well thought out and powerful. :-)
...
protocol bgp ibgp_my_other_router { import all; # learn other external routes export all; local as 64515; source address 2001:db8:1000:1; neighbor 2001:db8:1045::6 as 64515; }
Clear configurations prevent errors by making them them more obvious. Above example equals exactly to: protocol bgp ibgp_my_other_router { local 2001:db8:1000::1 as 64515; neighbor 2001:db8:1045::6 as 64515; export all; } ...except just the formatting already exposed an invalid source address. Another example of when you would need a specific source address is when mixing native and tunnelled IPv6. -- Met vriendelijke groet, With kind regards, Leo Vandewoestijne
So bird will handle default settings quite easily. Using the source address directive is useful for : . being more explicit ( helps to prevent errors ) . eBGP ( using loopback address ) . mixed native/ tunnelled IPv6 I got it ! Thank you Hans and Leo for these comprehensive explanations :-)
participants (3)
-
Hans van Kranenburg -
Leo Vandewoestijne -
olivier a