I’m connected via ethernet and DHCP, the DHCP provided nameserver is 10.0.0.111 and running dnsmasq for example.com to resolve to 10.0.0.110 when on the local network, while the ip for example.com on the open internet is 91.65.182.25.
Why would Mac OS X, after resetting the DNS cache first resolve the domain correctly, and then after a few minutes somehow get the public DNS ip?
ping, Safari, etc. are all affected. There is nothing going on in the 360 seconds wait time.
> sudo killall -HUP mDNSResponder && ping -c 3 example.com && sleep 360 && ping -c 3 example.com
Password:
PING example.com (10.0.0.110): 56 data bytes
64 bytes from 10.0.0.110: icmp_seq=0 ttl=64 time=0.795 ms
64 bytes from 10.0.0.110: icmp_seq=1 ttl=64 time=1.598 ms
64 bytes from 10.0.0.110: icmp_seq=2 ttl=64 time=0.830 ms
--- example.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.795/1.074/1.598/0.371 ms
PING home.jan.io (91.65.182.25): 56 data bytes
64 bytes from 91.65.182.25: icmp_seq=0 ttl=64 time=1.180 ms
64 bytes from 91.65.182.25: icmp_seq=1 ttl=64 time=3.704 ms
64 bytes from 91.65.182.25: icmp_seq=2 ttl=64 time=2.567 ms
--- home.jan.io ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.180/2.484/3.704/1.032 ms
Reading the man page of mDNSResponder it reads that it's also responding to multicast DNS queries if it knows an answer. Assuming there is another mDNSResponder in your local broadcast domain which does not use 10.0.0.111 as resolver but a public resolver, then your mDNSResponder might send a multicast query for example.com and get's an answer from the peer mDNSResponder quicker than from 10.0.0.111.
Just a theory though... it does not easily explain why the resolution works at the first attempt.