nanog mailing list archives

Re: IPv6 Deployment for the LAN ... anycast


From: Owen DeLong <owen () delong com>
Date: Fri, 23 Oct 2009 06:48:52 -0700


On Oct 23, 2009, at 5:45 AM, TJ wrote:

WRT "Anycast DNS"; Perhaps a special-case of ULA, FD00::53?



You want to allow for more than one for obvious fault isolation and load balancing reasons. The draft suggested using <prefix>:FFFF::1



FWIW - I think simple anycast fits that bill.



I think for very small/small networks anycast requires a lot of overhead and understanding. If your big enough to do anycast and/or loadbalancing
it's not hard for you to put all three addresses onto one device.


Anycast isn't really hard - same address, multiple places, routers see what appear to be multiple routes to same destination, they choose the least expensive. Only tricky part (for stateless things) is ensuring the route announcement is implicitly tied to service availability on that device ...

Please remember that IPv6 DNS is OFTEN not stateless as the replies
are commonly too large for UDP.




There are some protocols that anycasting doesn't work well for, they may
require multiple instances.


Fair enough; could also standardize something like FD00::<port number>, FD00::1:<port number>, and FD00::2:<port number> ... is three addresses enough? (IIRC, the Site-Local based automagic DNS used 2 or three addresses
... )

That's what I meant by prefix::<inst:ance>:<serv:ice>

<instance> would be a 32-bit instance value and <service> would be a 32 bit
service value (probably port number in the low order bits initially).


I personally would suggest getting a well known ULA-C allocation
assigned to IANA, then use <prefix>::<protocol assignment>:1
<prefix>::<protocol assignment>:2 and <prefix>::<protocol
assignment>:3, where <protocol assignment> could be "0035" for DNS,
and "007b" for NTP, and if you're feeling adventurous you could use
"0019" for outgoing SMTP relay.



IMHO non-hex-converted port numbers works cleanly ... ?




Up to 9999, if you want to announce a service port 30,000 you're in trouble.
Also quite a few protocols don't have "well known" ports, so may want to get things assigned. If you're doing assignment you could do nice things like 0x53 for DNS and then ports >9999 and protocols that don't have "well
known" ports could get an unused one assigned to them.


OK, so the non-hex converted as above (FD00::x:53; where x=[0,1,2] -
reserving FD00::/96) covers us to port 9999 based on automatically using port numbers (or using automatically registered port numbers, see below).

Why use the non-hex converted? Is it really hard to realize that 0x35 = 53?

Maybe FD00::FFFF:xxxx/112 as a block within the above range to be used for manual assignment of automatic service (potentially anycast) addresses.



... Heck, start a registry (@IANA) and add in FD00::101, etc. ...
Maybe reserve FD00::/96 for this type of "ULA port-based anycast
allocation". (16bits would only reach 9999 w/o hex-conversion (if
hex-converted could reserve FD00::/112 ... But would be less
obvious))



Thinking further, if simply based on port#s wouldn't even need a registry. Unless it was decided to implement the multiple-addresses-per- function
mentioned above, then perhaps useful.



In my humble opinion I'd have them registered, linking them to port numbers
means that it's easier on the poor admins brain at 3am while diagnosing
faults, but may cause various hassles in the future (see above).


OK, so register them - but sign up some well-known ones at very comfortable
addresses, like DNS at 53 :).
(Or 35 if you prefer hex-conversion ...)

And I am sure some would be concerned about hosts performing any sort of automatic service discovery anything, but this atleast has the advantage
over multicast in that it doesn't require multicast routing or group
membership / state maintenance, only delivers packets to the nearest (not
all) instances, etc.

Agreed, but, since this mostly doesn't get typed by humans, I think that using
0x35 is much better in this case than using 0x53 -> 53 stuff.

Owen



Current thread: