DNS question

DNS question

Shachar Shemesh shachar at shemesh.biz
Sat Jun 18 05:36:15 IDT 2011


On 06/18/2011 02:34 AM, Amos Shapira wrote:

> I wasn't suggesting that you should make money from it but if you want 
> a *reliable* highly available DNS setup then you might be better off 
> paying someone else to do that for you instead of having this 
> liability on top of what you are actually get paid for.
> I know that setting up a secondary DNS server could be a 5 minute 
> exercise in the right hands (and I suppose this applies to you), but 
> when things break you could end up stopping work on more important 
> stuff (from business perspective) to find and fix a problem someone 
> else could look at for you for a relatively small sum.
>
I should just point out something. I don't think you said it, but 
someone might understand it from your words:

Anycast does not improve reliability of the DNS system for almost any 
normal use case.

Anycast was designed to work around the size limitations of a DNS 
request. DNS can use either TCP or UDP. UDP is considerably faster, as 
the actual request-response is very short, and the three way handshake 
is, therefor, a high price to pay. As such, correct setup of a DNS 
system will try to limit TCP transactions to domain transfers and 
nothing else.

In order to assure a UDP transaction, the response must be no bigger 
than about 512 bytes (actual number might be slightly higher or lower - 
do not remember). This means that an "NS" query (which is your DNS?) can 
reply a maximum of 13 servers per domain. This is not a problem for, 
e.g., lingnu.com, but might be a problem for . (root) or .com. The 
solution found was to report only 13 IP addresses, but to have more than 
13 servers serve those addresses via anycast. This leverages the global 
routing table's ability to find a reasonably shortest path to the 
destination IP address, but not insist that all instances actually be 
served by the same actual server. This, obviously, only works if the 
transaction is composed of one request packet and responded to by one 
reply packet. In other words, for DNS, this only works if the 
transaction is, indeed, UDP.

If you host your own domains, anycast is, most likely, not the solution 
for you. First, it is exceedingly unlikely that you will have more than 
13 domain name servers serving your domain, which means that you can 
actually provide 5 different IPs. The DNS system has a failover AND load 
balancing system built into each and every client that performs query, 
and thus actually providing different 5 different IP address works just 
as well than providing one IP address that is served by 5 different servers.

In fact, it works better. Using anycast alone (i.e. - advertising just 
one IP address) has several modes of failure simply not there for the 
standard system. If the network goes down, it might take a few minutes 
for the world wide BGP tables to catch up to that fact. During that 
time, your domain will be off line. If the actual server is down, but 
the network is up, queries still reach it and are never handled, again 
resulting in an off line domain. If all 5 servers are advertised the 
clients will perform round robin between all five, resulting in equal 
distribution of the load. If just one IP address is advertised then, 
failure non-withstanding, a specific client will almost always query the 
same server, resulting in load distribution that is geographically 
split. In most cases, that is a less even split than the round robin the 
other option provides.

In other words, Amos, if your company is doing anycast for DNSes, they 
are, most likely, wasting a valuable /22 IPv4 address range.

Shachar

-- 
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
http://www.lingnu.com




More information about the Linux-il mailing list