DNS issues, site offline. nslookup periodically fails, dig/host consistently work

domain-name-systemgodaddyheroku

My site has been down intermittently for much of the day and I'm going crazy trying to debug why. It seems to be a DNS issue since changing my DNS servers from my ISP's to Google's 8.8.8.8 fixed it for my personal browser. But now that's failing, too! DownForEveryoneOrJustMe says it's up, although I'm getting some complaints from users that it's not.

nslookup is intermittent:

16:04: ~/d/coachup (master) > nslookup www.coachup.com 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
*** Can't find www.coachup.com: No answer

Throughout the day, sometimes that has returned a result, but it's not right now. When I try it with one of my GoDaddy DNS nameservers (which I think are authoritative? I got them from whois) I get:

16:06: ~/d/coachup (master) > nslookup www.coachup.com NS36.DOMAINCONTROL.COM
Server:         NS36.DOMAINCONTROL.COM
Address:        208.109.255.18#53

www.coachup.com canonical name = chiba-9316.herokussl.com.

The other one is more flaky:

16:07: ~/d/coachup (master) > nslookup www.coachup.com NS35.DOMAINCONTROL.COM
Server:         NS35.DOMAINCONTROL.COM
Address:        216.69.185.18#53

*** Can't find www.coachup.com: No answer

16:08: ~/d/coachup (master) > nslookup www.coachup.com NS35.DOMAINCONTROL.COM
Server:         NS35.DOMAINCONTROL.COM
Address:        216.69.185.18#53

www.coachup.com canonical name = chiba-9316.herokussl.com.

However, even with repeated attempts, dig always comes back with information:

16:08: ~/d/coachup (master) > dig @8.8.8.8 www.coachup.com ANY

; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 www.coachup.com ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49917
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.coachup.com.               IN      ANY

;; ANSWER SECTION:
www.coachup.com.        2815    IN      CNAME   chiba-9316.herokussl.com.

;; Query time: 32 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 18 16:09:25 2013
;; MSG SIZE  rcvd: 68

16:09: ~/d/coachup (master) > dig @NS35.DOMAINCONTROL.COM www.coachup.com ANY

; <<>> DiG 9.8.3-P1 <<>> @NS35.DOMAINCONTROL.COM www.coachup.com ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58865
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.coachup.com.               IN      ANY

;; ANSWER SECTION:
www.coachup.com.        3600    IN      CNAME   chiba-9316.herokussl.com.

;; AUTHORITY SECTION:
coachup.com.            3600    IN      NS      ns36.domaincontrol.com.
coachup.com.            3600    IN      NS      ns35.domaincontrol.com.

;; Query time: 309 msec
;; SERVER: 216.69.185.18#53(216.69.185.18)
;; WHEN: Wed Dec 18 16:09:39 2013
;; MSG SIZE  rcvd: 120

host similarly works consistently.

Some questions:

  • Why does dig and host work consistently but not nslookup?
  • How do I determine my authoritative nameservers. Does whois work there?

My working theory is that the GoDaddy nameserver has been flaky, and at one point when Google's 8.8.8.8 asked for www.coachup.com and got a non-response, it cached that negatively for a while. Does that seem plausible? But then it's only flaky with nslookup and not with dig or host.

Also, Heroku status shows that they were doing "DNS maintenance" yesterday. Could that cause this somehow? It says it's green now.

Best Answer

*Why does dig and host work consistently but not nslookup?

Because when you ran dig you used the option 'ANY', that means you weren't just looking for an 'A' record, but also for other records such as CNAME. While nslookup was looking for an 'A' record. What is interesting is when i did 'dig @8.8.8.8 www.coachup.com' i got no answer but when i did 'dig @8.8.8.8 www.coachup.com cname' i got a response.

*How do I determine my authoritative nameservers. Does whois work there?

whois is mainly an administrative database, to determine your actual name servers use 'dig +trace www.coachup.com' -

[root@kauai ~]# dig +trace www.coachup.com

; > DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 > +trace www.coachup.com
;; global options: +cmd
.                       3600000 IN      NS      G.ROOT-SERVERS.NET.
.                       3600000 IN      NS      K.ROOT-SERVERS.NET.
.                       3600000 IN      NS      D.ROOT-SERVERS.NET.
.                       3600000 IN      NS      J.ROOT-SERVERS.NET.
.                       3600000 IN      NS      M.ROOT-SERVERS.NET.
.                       3600000 IN      NS      C.ROOT-SERVERS.NET.
.                       3600000 IN      NS      I.ROOT-SERVERS.NET.
.                       3600000 IN      NS      H.ROOT-SERVERS.NET.
.                       3600000 IN      NS      F.ROOT-SERVERS.NET.
.                       3600000 IN      NS      A.ROOT-SERVERS.NET.
.                       3600000 IN      NS      B.ROOT-SERVERS.NET.
.                       3600000 IN      NS      E.ROOT-SERVERS.NET.
.                       3600000 IN      NS      L.ROOT-SERVERS.NET.
;; Received 512 bytes from 192.168.10.109#53(192.168.10.109) in 18 ms

com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
;; Received 505 bytes from 192.33.4.12#53(192.33.4.12) in 133 ms

coachup.com.            172800  IN      NS      ns35.domaincontrol.com.
coachup.com.            172800  IN      NS      ns36.domaincontrol.com.
;; Received 117 bytes from 192.54.112.30#53(192.54.112.30) in 138 ms

www.coachup.com.        3600    IN      CNAME   chiba-9316.herokussl.com.
;; Received 68 bytes from 208.109.255.18#53(208.109.255.18) in 33 ms

Your authoritative name servers are in the section -

coachup.com.            172800  IN      NS      ns35.domaincontrol.com.
coachup.com.            172800  IN      NS      ns36.domaincontrol.com.

*I would suspect the problem was with Heroku, and google and other some dns servers cached the non-existent record response, and after that they started responding from negative cache. It should work once the negative cache expires. My guess is, still a guess, your authoritative names server did provide the cname response, but google dns servers were not able to complete the resolution for 'chiba-9316.herokussl.com.', assuming Herok had a problem.

To test this i run a dig on several public dns servers - which i got from the site "http://pcsupport.about.com/od/tipstricks/a/free-public-dns-servers.htm". All responded for the CNAME, but a few including google didn't respond for an 'A' record query -

Request for an 'A' record. Note: google dns is '8.8.8.8'


[daniel@kauai ~]$ for dns in $(awk '{print $2}' /tmp/dnsservers ); do echo ==$dns===; dig @$dns www.coachup.com. +short ;done
==209.244.0.3===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
50.16.224.113
23.23.124.44
23.23.101.90
==8.8.8.8===
==8.26.56.26===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.124.44
23.23.101.90
50.16.224.113
==208.67.222.222===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
50.16.224.113
23.23.101.90
23.23.124.44
==156.154.70.1===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.124.44
23.23.101.90
50.16.224.113
==198.153.192.40===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.101.90
50.16.224.113
23.23.124.44
==81.218.119.11===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.124.44
23.23.101.90
50.16.224.113
==195.46.39.39===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
50.16.224.113
23.23.101.90
23.23.124.44
==23.90.4.6===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.101.90
23.23.124.44
50.16.224.113
==216.146.35.35===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
50.16.224.113
23.23.101.90
23.23.124.44
==89.233.43.71===
chiba-9316.herokussl.com.
elb002794-1867396571.us-east-1.elb.amazonaws.com.
23.23.101.90
50.16.224.113
23.23.124.44
==74.82.42.42===
==109.69.8.51===

Request for a CNAME query -


[daniel@kauai ~]$ for dns in $(awk '{print $2}' /tmp/dnsservers ); do echo ==$dns===; dig @$dns www.coachup.com. +short cname ;done
==209.244.0.3===
chiba-9316.herokussl.com.
==8.8.8.8===
chiba-9316.herokussl.com.
==8.26.56.26===
chiba-9316.herokussl.com.
==208.67.222.222===
chiba-9316.herokussl.com.
==156.154.70.1===
chiba-9316.herokussl.com.
==198.153.192.40===
chiba-9316.herokussl.com.
==81.218.119.11===
chiba-9316.herokussl.com.
==195.46.39.39===
chiba-9316.herokussl.com.
==23.90.4.6===
chiba-9316.herokussl.com.
==216.146.35.35===
chiba-9316.herokussl.com.
==89.233.43.71===
chiba-9316.herokussl.com.
==74.82.42.42===
chiba-9316.herokussl.com.
==109.69.8.51===
chiba-9316.herokussl.com.

Related Topic