Ubuntu – Global DNS change

dnsdnsmasq

How do I change my DNS server globally without having to do it manually through network manager for every connection I have.

I want to use OpenDNS, whether its at home, university, wifi hotspot, phone tether…

I use Ubuntu 13.10 but I guess it will be the same on newer versions.

Best Answer

You can add this file so network manager will update resolv.conf each time a connection is established:

echo "echo 'nameserver 85.214.20.141'>/etc/resolv.conf"> /etc/NetworkManager/dispatcher.d/10-FoeBud-dns
chmod +x /etc/NetworkManager/dispatcher.d/10-FoeBud-dns

(I would suggest the dns 85.214.20.141 (FoeBud))

Evaluation:

watch cat /etc/resolv.conf

Then restart networkmanager in another console with

service network-manager restart

... watch changing the resolv.conf file.

Drawback:

The local DNS caching on your machine by dnsmasq will not be available any more.


I also tried:

echo "nameserver 85.214.20.141">/etc/resolv.dnsmasq.conf
echo "resolv-file=/etc/resolv.dnsmasq.conf" > /etc/NetworkManager/dnsmasq.d/FoeBud-dns

which seemed somewhat cleaner or a shorter option would be:

echo "server=85.214.20.141" > /etc/NetworkManager/dnsmasq.d/FoeBud-dns

But both options don't seem to work, because Network-Manager does start his own instance of dnsmasqwhich does not use those standard dnsmasq conf files.

A solution to this would be to detach dnsmasq from NetworkManager and install dnsmasq on its own (see https://superuser.com/a/809716/160420) but I personally don't want to change so much on my default Ubuntu system.