linux source address selection solution

Chris Caputo ccaputo at alt.net
Wed Apr 29 05:21:58 CEST 2009


One last thing - addresses marked as deprecated are still perfectly usable 
for receiving packets or for manually being specified as a source.  (ie. 
ping6 -I <addr>)

They just aren't included in the source address selection algorithm.

Chris

On Wed, 29 Apr 2009, Chris Caputo wrote:
> Here's a little linux tip.  Hopefully it is of use to others.  Apologies 
> if obvious.
> 
> Recent linux kernels follow RFC 3484 "Default Address Selection for 
> Internet Protocol version 6 (IPv6)".
> 
> In the case of a tie (ie., source address not decided by destination 
> subnet or other mechanisms), if you have multiple IPv6 addresses on an 
> interface, linux tends to use the last address added.
> 
> I prefer to have my source v6 address not be dependent on addition order, 
> but rather be more deterministic.
> 
> A way to do so is to set "preferred_lft" to zero, while "valid_lft" is 
> non-zero or "forever".  Doing so results in the source address being 
> marked as deprecated, which means it won't be used if there are 
> alternatives on the interface, or a loopback address if not.
> 
> Loopback address is great for routers connected to exchange points because 
> it means you can deprecate your v6 exchange point address on the physical 
> interface and use a loopback as the source for any v6 connections.  (no 
> more broken registry queries due to unrouted exchange point address 
> space!)
> 
> To experiment with this try on addresses you don't want to be selected as 
> a source:
> 
>   ip addr change <ADDR> dev <DEV> preferred_lft 0
> 
> "ip -6 addr" should now show the address as being deprecated and 
> non-deprecated address(es) will be favored.  To revert do "preferred_lft 
> forever" instead.
> 
> On Gentoo I found that the network startup scripts did not like the "_lft" 
> in "preferred_lft".  Fortunately "ip addr add" allows you to drop that and 
> just use "preferred 0", ala:
> 
>   config_eth0=(
>         "10.1.1.1/24" "2001:0db8::1/64"
>         "10.1.1.2/24" "2001:0db8::2/64 preferred 0"
>   )
> 
> Cheers,
> Chris


More information about the ipv6-ops mailing list