Ubuntu: DNS server address no longer stored in resolv.conf; where is it now?



Question:

I sometimes switch DNS servers, using the NetworkManager indicator in the taskbar; this worked fine with previous versions, and actually works fine with 12.04, too, except for one thing: I use Conky to display some system information, including the DNS address, and I noticed that it is now always displaying 127.0.0.1.

I looked in resolv.conf, which is where it gets this address, and sure enough, that's what it always says. I has a single line, with the admonishment not to edit the file by hand:

nameserver 127.0.0.1  

The only way I know to check the DNS server address now is to open the network manager GUI to check the info page. So, where is this information stored now?


Solution:1

The information is managed internally by Network Manager. You can get this information on the command line using the included nmcli tool.

You can retrieve Network Manager's information for a particular network interface with the following command:

nmcli dev list iface eth0  

(replace eth0 with the interface you are connecting with). The output will include information about the interface and the currently active connection on that interface:

GENERAL.DEVICE:                         eth0  GENERAL.TYPE:                           802-3-ethernet  ...  IP4.DNS[1]:                             192.168.0.1  ...  

It shouldn't be too difficult to extract the information you are after from this output.

If you need a programmatic method of accessing this data that doesn't rely on the output of nmcli, this information should also be available from Network Manager's D-Bus interface.


Solution:2

Ubuntu developers should document these changes in /etc/resolv.conf, but have not.

Here is a list of quick commands to get you going.

  1. Show the current DNS servers

    nm-tool | grep DNS  
  2. Define a static DNS server in /etc/dhcp/dhclient.conf. Add the following line, and restart local resolver:

    supersede domain-search "sub.mydomain.com", "domain.com";  prepend domain-name-servers 192.168.0.1;  

    From the command prompt:

    invoke-rc.d network-manager restart  


Solution:3

Be aware that using nmcli may not always give you the full answer. e.g. if you use openconnect (or vpnc, presumably) to start a VPN, and if you have the resolvconf package installed (to take care of automatically managing /etc/resolv.conf), you'll find that it can still automatically insert the VPN's DNS settings into /etc/resolv.conf ahead of 127.0.0.1. In this circumstance, just checking (e.g.) "nmcli -f IP4 dev list" won't give you the true current DNS list. Not sure if this scenario affects you, but figured it worth mentioning.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »