I have an internal DNS server that provides DNS names to my internal servers. For example, my DNS server points "files.mydomain.com" to my NAS's Web interface at 192.168.1.200.
I also have a public DNS server running, exposing the same domain to the Internet, but providing publicly accessible IPs rather than the internal (192.168.1.x) IPs. So for example, resolving "files.mydomain.com" from the Internet will resolve to 12.34.56.78.
The problem is, the machine at 12.34.56.78 is a gateway/firewall, so it will not "redirect" connections that come from within the LAN, and even if it did, it'd be hugely inefficient. Even though my system is configured to use my internal DNS server, Google Chrome still resolves "files.mydomain.com" to 12.34.56.78. Resolving the domain in any other situation - other browser, command line, etc. - properly returns the correct internal IP of 192.168.1.200.
From reading around the Web, this seems to be related to Google's async DNS service in Chrome, which overrides the system DNS and goes first to Google's DNS servers. It seems that only if it fails there, will it actually use the system DNS. Since "files.mydomain.com" does resolve externally (from Google's PoV) to 12.34.56.78, Chrome tries to connect there, and fails. Instead, inside the LAN, I need Chrome to connect to 192.168.1.200. Various options used to exist, but have been disabled or removed from Chrome (the commit messages often read along the lines of "we don't need this feature anymore"). Frustrating.
Apologies if this sounds harsh, but please, no answers asking me to 1) setup IPv6 DNS, 2) somehow redo my network so that Google's DNS will give an internal IP to Chrome (horrible idea, plus it stops access from outside the LAN from working), or 3) use the hosts file (won't stand up to possible DNS changes on the internal server).
How do I get Google Chrome to stop using Google DNS to resolve IP addresses?
Observed on all platforms - Windows, Mac and Linux.