After upgrade to 13.10 my DNS resolving fails. It seems the DNS servers which I get by DHCP (LAN) are not used.
I could temporary solve the problem by adding nameserver 8.8.8.8
to /etc/resolv.conf
. But then the intranet hosts still can not be resolved.
When clicking on the Connection Information menu item on the network indicator, the Primary DNS and the Secondary DNS are set correctly. But my computer seams not to use them.
So my questions:
- What should I put into
resolv.conf
, if anything? - How to find out, which name servers my computer is querying?
- Where to look next, to find out, why name servers received by DHCP are not used?
First you need to know a bit about how name resolving works in Ubuntu since Ubuntu 12.04.
Stéphane Graber blogged some information about it last year here. The most important thing to know is that both Ubuntu Server and Ubuntu Desktop use resolvconf to manage the
resolv.conf
file. That means that you should no longer edit/etc/resolv.conf
directly; instead you should configure your network interface configuration utility to provide the right information to resolvconf. For Ubuntu Server the network interface configuration utility is ifup and it is configured by the file/etc/network/interfaces
. For Ubuntu Desktop the network interface configuration utility is NetworkManager. This is what you are using.NetworkManager is configured by means of Network indicator > Edit Connections. However, for network interfaces configured by DHCP it normally isn't necessary to change any settings manually. Normally what happens is that the (remote) DHCP server provides to NetworkManager both an IP address for the local interface and the address of a (remote) DNS nameserver to use. NetworkManager starts an instance of a forwarding nameserver that listens locally at 127.0.1.1. This address, 127.0.1.1, is sent to resolvconf which puts
nameserver 127.0.1.1
in/etc/resolv.conf
. NetworkManager also gives the (remote) IP address of the DHCP-provided DNS nameserver to the forwarding nameserver. Thus a program running on the local system asks the resolver to translate a host name into an IP address; the resolver queries the local forwarding nameserver at 127.0.1.1; the forwarding nameserver queries the remote nameserver(s) it has been told about, receives an answer and sends it back up the chain.NetworkManager communicates with the forwarding nameserver process over D-Bus. You can see what NetworkManager told the forwarding nameserver by running the command
Update arising from the comments:
Note that resolvconf actually writes the file
/run/resolvconf/resolv.conf
to which/etc/resolv.conf
is supposed to be a symbolic link. If/etc/resolv.conf
is not a symbolic link then you need to recreate it. To do so you can runor
I made the change suggested on the link below (disabling dnsmasq). Now everything works great! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html
Open
/etc/NetworkManager/NetworkManager.conf
file.Comment out line as:
EDIT 2: Previous post was rightfully deleted by the moderation, I'm posting what I have found to be a solution. Sorry for that.
EDIT: I just found the answer and it's in this very page - sorry for my miopy. I posted my findings below, expanding the correct answer by Richard Lindstedt found in this page. I left my early rumbling for a bit of context. Please upvote Richard's answer, he deserves it.
That sure did not help the OP and doesn't help me now. We don't want static addresses, we want to use the ones the DHCP server sends us. NetworkManager seems to recognise them, but Ubuntu bluntly ignores them:
But...
And my /etc/network/interfaces is:
which is a bit odd, I would expect all interfaces being declared here (or am I missing something?).
So, in short:
dpkg-reconfigure resolvconf
Not opening another thread because it's the exact problem except I'm on 14.10 now (but this have been nagging me since de upgrade from 12.10 to 13.04).
SOLUTION
That last phrase got me on the right track, and only then I noticed Richard's answer.
The problem seems to be related to the conflicting
dnsmasq
andresolvconf
packages. Until 12.10,dnsmasq
was used. From 13.04 onwards, Ubuntu seemed to switch to a dnsmasq/resolvconf hybrid, where you have installed the packagesdnsmasq-base
andresolvconf
, but notdnsmasq
itself.I can't say if it's a bug in the upgrade scripts for 13.04 or something else, because when upgrading (as in fresh installs) resolvconf is installed, dnsmasq-base is upgraded and dnsmasq is (correctly) uninstalled.
The catch is, the upgrade script fails to comment out the
dns=dnsmasq
line in/etc/NetworkManager/NetworkManager.conf
. So, even though the dnsmasq daemon is not present anymore on the system, /etc/resolv.conf still expects it to be.It's actually really easy.
just open your interfaces conf file --> sudo vi /etc/network/interfaces
and under your interface (probably eth0) you will see all the usual config.
After gateway just add 'dns-nameservers 8.8.8.8 8.8.8.9' or whatever nameserver you're going to use.
So your config should be:
then just do a 'sudo service networking restart' and you're good to go!
I'm using Pop!OS but I think my solution could be applicable to ubuntu users as well. For me 2 issues were involved.
First systemd-resolved was not configured to use mdns. So this should be enabled by editing
/etc/systemd/resolved.conf
and enabling optionMulticastDNS=yes
after that change systemd-resolved must be restarted.
systemctl restart systemd-resolved.service
Then check if configuration was updated by
systemd-resolve --status
It should have
Global LLMNR setting: no MulticastDNS setting: yes
but if you check the particular interface it will have multicast disabled.Current Scopes: none DefaultRoute setting: no LLMNR setting: yes MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no
The problem is that enabling MulticastDNS cannot be done from (at least mine) UI network interface configurator so you have to do nmcli commandline config.
nmcli connection edit enp4s0
you are intrested in property connection.mdns you could get more info on that by
describe connection.mdns
so
set connection.mdns reslove
(or what ever you prefer)then
save persistent quit
now mdns should be operationalRun:
This issue can be related to systemd-resolve does not forward DNS requests to stated DNS server
Newer systemd-resolved refuses to resolve simple names via DNS, i.e.
myhost
and will only resolvemyhost.somedomain.com
via DNS.This change is by design. Bypass/remove systemd-resolved if you use simple hostnames.
Create a working
/etc/resolv.conf
andchattr +i /etc/resolv.conf
so that systemd tools don't mess with it, optionally remove systemd-resolved with apt.The reason is that systemd-resolved presumes your intranet's DNS server is on the Internet, and provides no mechanism to indicate that it is not.