I'm attempting to redirect an existing web address to a remote machine on my subnet. To do that, I put the following into /etc/hosts
192.168.1.249 holub.com
and flush the DNS cache with
sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder
However, when I ping holub.com (the most reliable way that I know to see how the address is actually resolved), I see the real web address (204.13.10.74), not the one specified in /etc/hosts (192.168.1.249). Interestingly, the mysqladmin utility does not resolve the address correctly, but the Chrome browser does resolve the address correctly. I'm guessing that Chrome has some sort of internal workaround.
In general, it looks like /etc/hosts is being used after the actual DNS lookup, not before as it should be, so an external address is not overridable.
I've tried using various IPv6 equivalents to my local address (0:0:0:0:0:ffff:c0a8:01f9 ::ffff:192.168.1.249 ::192.168.1.249), but that doesn't help. Rebooting (instead of flushing the cache) doesn't help either.
I have found one unsatisfactory workaround. If I disable the DNS reponder with
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
then /etc/hosts is used, but then I can't access the internet.
If anybody's encountered this problem, I'd love to know if there's a workaround.