Recently my VPN client was giving me fits when logged in from home. DNS resolution to my VPN hosts stopped working. After some poking around, I discovered that a workaround was to change my Windows network configuration to hardcode a VPN DNS server, instead of letting it go with the default as it had done successfully for quite a while before.

Some co-workers pointed out what the cause of the problem was. DNS requests were being incorrectly returned by my router. So when my laptop sent a DNS query for a VPN host, which my router should have responded “no such hostname on the Internet”, instead my router responded with a dlinksearch.com web page saying “Couldn’t find that hostname, did you want one of the following search terms?” So my router, instead of leaving things alone, was trying to be helpful (in the intrusive sense, not the helpful sense) which in turned confused my VPN client. The VPN client expected that a VPN hostname would not get resolved by an Internet DNS server, but here was my router trying to be helpful and breaking the rules.

This was a DLink DIR-825, which otherwise has been great. Some Google searches point me to disabling the “Advanced DNS” (cough cough) setting. Make sure you reboot the router so the change takes effect. Let’s try again.

Wait, it’s still not working? Now what is going on? Oh, now my ISP (Time Warner) is doing the same thing, trying to be helpful (in the intrusive sense) and instead of responding “no such hostname on the Internet” it is sending a web page with a list of search suggestions. Would you please stop helping and just stick to the standards?

Repeat after me: standards are for predictability in interoperability.

So back to my router configuration. Instead of accepting the DNS servers as given to me by my ISP, I hardcode my router to use the Google Public DNS servers, because they don’t try to be helpful. Reboot the router and try again.

Ah, now it works. Hey router manufacturers and ISPs, do you now see how beneficial your help has been?