[dns-operations] resolv.conf and resolving IPv6-only domains/NSes
Mark Andrews
marka at isc.org
Thu Nov 4 21:09:02 UTC 2010
In message <!&!AAAAAAAAAAAuAAAAAAAAAKTyXRN5/+lGvU59a+P7CFMBAN6gY+ZG84BMpVQcAbDh
1IQAAAATbSgAABAAAADoQfg1GbH6T5dIxe9Zzj5wAQAAAAA=@iname.com>, "Frank Bulk" write
s:
> Matt:
>
> Thanks for testing this so extensively. I will bring this to the attention
> of ISC.
>
> Frank
dig +[no]fail
> -----Original Message-----
> From: dns-operations-bounces at lists.dns-oarc.net
> [mailto:dns-operations-bounces at lists.dns-oarc.net] On Behalf Of Matt
> Thompson
> Sent: Wednesday, November 03, 2010 10:28 PM
> To: dns-operations at lists.dns-oarc.net
> Subject: Re: [dns-operations] resolv.conf and resolving IPv6-only
> domains/NSes
>
> On 10-11-03 10:16 PM, Frank Bulk wrote:
> > Holger:
> >
> > The Debian box is not IPv6 only.
> >
> > I had presumed (incorrectly) that I could list a bunch of DNS servers
> (IPv4
> > and IPv6-only) in resolv.conf and the IP stack would handle SERVFAIL
> > gracefully and move on to the next one. Apparently that's not the case,
> > which is why your recommendation that all the servers listed in
> resolv.conf
> > be dual-stack is a good idea.
> Hi Frank,
>
> It seems that glibc getaddrinfo() does fail to the second DNS server if
> the first one is not dual stack in your resolv.conf. It's up to glibc or
> other stub resolver code to handle SERVFAIL. The IP stack itself has no
> knowledge of DNS.
>
> My resolv.conf has:
> nameserver 4.2.2.5 # Not dual stack
> nameserver 192.168.12.1 # Dual stack
>
> This test program demonstrates that it does fail over to the dual stack
> nameserver:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netdb.h>
> #include <string.h>
>
> const char *query = "onlyv6.com";
>
> int main(int argc, char **argv)
> {
> struct addrinfo hints;
> struct addrinfo *result;
> char addrbuf[INET6_ADDRSTRLEN];
>
> int ret;
>
> memset(&hints, 0, sizeof(struct addrinfo));
> hints.ai_family = AF_UNSPEC; /** IPv4 or IPv6 */
> hints.ai_socktype = SOCK_DGRAM;
>
> ret = getaddrinfo(query, NULL, &hints, &result);
> if(ret != 0)
> {
> fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
> return(EXIT_FAILURE);
> }
>
> while(result)
> {
>
> inet_ntop(result->ai_family, result->ai_addr->sa_data + 2,
> addrbuf, sizeof(addrbuf));
> printf("Result: %s\n", addrbuf);
> result = result->ai_next;
> }
> return(EXIT_SUCCESS);
> }
>
> Here's the output from the program:
>
> matt at desk:~$ ./testv6
> Result: ::2607:f118:8c0:800:0:0
>
>
> Dig implements its own stub resolver and doesn't failover on SERVFAIL:
>
> matt at desk:~$ dig onlyv6.com
>
> ; <<>> DiG 9.7.1-P2 <<>> onlyv6.com
> ;; global options: +cmd
> ;; Got answer:
> ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 41092
> ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
>
> ;; QUESTION SECTION:
> ;onlyv6.com. IN A
>
> ;; Query time: 56 msec
> ;; SERVER: 4.2.2.5#53(4.2.2.5)
> ;; WHEN: Wed Nov 3 23:09:17 2010
> ;; MSG SIZE rcvd: 28
>
> nslookup does failover:
>
> matt at desk:~$ nslookup -type=AAAA onlyv6.com
> ;; Got SERVFAIL reply from 4.2.2.5, trying next server
> Server: 192.168.12.1
> Address: 192.168.12.1#53
>
> Non-authoritative answer:
> onlyv6.com has AAAA address 2607:f118:8c0:800::64
>
>
> Cheers,
> Matt Thompson
> HexWave Software Systems
>
> > Frank
> >
> > -----Original Message-----
> > From: Zuleger, Holger, VF-DE [mailto:holger.zuleger at vodafone.com]
> > Sent: Wednesday, November 03, 2010 12:26 PM
> > To: frnkblk at iname.com; Stephane Bortzmeyer
> > Cc: dns-operations at dns-oarc.net
> > Subject: RE: [dns-operations] resolv.conf and resolving IPv6-only
> > domains/NSes
> >
> >> Stephane:
> >>
> >> You are correct, whether my tool requests resolution via IPv4
> >> or IPv6 for
> >> onlyv6.com shouldn't matter as long as the queried resolver has IPv6
> >> connectivity.
> >>
> >> So what I've learned is that if I want to resolve query
> >> v6-only domains,
> >> such as onlyv6.com, I had better make sure that the first DNS
> >> server in my
> >> resolv.conf has IPv6 connectivity. Even better, make sure
> >> all of them do.
> > No.
> > If your client is ipv6-only then it doesn't make sense to
> > use an IPv4 resolver.
> > Additionally each of the ipv6 resolvers in your list *must* be
> > dual-stack, or need the help of an dual stack resolver (e.g. via
> > BINDs dual-stack-server command).
> >
> > If the domain is a v6-only domain, at least the authoritative name
> > servers of
> > the domain have to be dual stack.
> >
> > Regards
> > Holger
> >
> > _______________________________________________
> > dns-operations mailing list
> > dns-operations at lists.dns-oarc.net
> > https://lists.dns-oarc.net/mailman/listinfo/dns-operations
>
> _______________________________________________
> dns-operations mailing list
> dns-operations at lists.dns-oarc.net
> https://lists.dns-oarc.net/mailman/listinfo/dns-operations
>
>
> _______________________________________________
> dns-operations mailing list
> dns-operations at lists.dns-oarc.net
> https://lists.dns-oarc.net/mailman/listinfo/dns-operations
--
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742 INTERNET: marka at isc.org
More information about the dns-operations
mailing list