139

According to this page it appears to be simple. However, /etc/bind does not exist on the default installation of Ubuntu 12.04.3 LTS server.

So, without installing any further software, how can configure DNS and remove dnsmasq on ubuntu server? I am quite familiar with sudo & nano.

5
  • Also take a look at help.ubuntu.com/community/Dnsmasq. bind IS a nameserver. If you need nameserver functionality on your server, you must install a nameserver. It would help if you could describe what it is you are trying to achieve.
    – hmayag
    Sep 17, 2013 at 21:37
  • 2
    You were reading a manual to configure a DNS Server, not how to configure the DNS entries in the server. The manual you should have read are this
    – Braiam
    Sep 17, 2013 at 22:55
  • I don't have the rep to post a comment on another answer, but in reply to Nullet's answer on September 17th 2013, this worked for me. I was thinking that there was a problem with my router (a cheap, ISP provided one). I also think it worth mentioning that on the dns-nameservers line, you should use the IP of the public DNS. Don't use the local address of the DNS, which is most likely on your router. I was connecting to the DNS on my router, which for some unknown reason wasn't working with my server. Instead, I found out where the DNS on my router was getting its information from, and set dn
    – kyul
    Mar 11, 2014 at 18:38
  • 1
    I think there is a better answer here unix.stackexchange.com/a/154538/82018 - basically you can override your dhcp settings to "prepend" a server in front of the ones you currently use. This is nice as you don't have to rely solely on the new server, you just give it precedence for lookups. Nov 22, 2014 at 21:07

5 Answers 5

175

Set DNS Servers

You need to configure the /etc/network/interfaces file if you want to change your DNS server via the command line.

It should look something like this:

# The loopback network interface  
auto lo  
iface lo inet loopback  


# The primary network interface  
auto eth0 
iface eth0 inet static  
address 192.168.X.X
netmask 255.255.255.0
gateway 192.168.X.X
dns-nameservers X.X.X.X 

If you have more than one DNS server, just add a space between each:

dns-nameservers X.X.X.X Y.Y.Y.Y Z.Z.Z.Z

Just replace the Xs, Ys, and Zs with your own IPs of the DNS servers of choice, and when this is done, run this command to update the settings:

sudo ifdown eth0 && sudo ifup eth0

Hope this helps!

13
  • 1
    Yeah, dnsmasq is not installed on ubuntu server as default, if I remember correctly.
    – Nullet
    Sep 17, 2013 at 22:47
  • 5
    tried @Nullet solution, but got this error, longtth@long-ubuntu-14:~$ sudo ifdown eth0 && sudo ifup eth0 interface eth0 not configured RTNETLINK answers: File exists Failed to bring up eth0. Can you help me fix it ?
    – Luke
    Mar 28, 2015 at 13:58
  • 2
    Here's my situation: I opened the file indicated in this answer and I had only the first 3 lines in it. I pasted in the rest. I ran the command and I got this: ifdown: interface eth0 not configured RTNETLINK answers: File exists Failed to bring up eth0. That concludes the output I received. If anyone has any thoughts that come to mind feel free to respond. I would like to know: what, generally speaking, am I to replace the X's in address and gateway with? Mar 31, 2015 at 10:36
  • 2
    @Mr.Hyde You shouldn't type these lines at terminal, you must to write them inside /etc/network/interfaces file.
    – richardaum
    Aug 13, 2015 at 3:19
  • 1
    Ensure that you are actually using eth0 and not something else like eth1. ifconfig.
    – briankip
    Mar 23, 2016 at 10:47
20

However if you are on newer Ubuntu version, you might be using resolvconf (a package that manages the contents of /etc/resolv.conf).

In order to set dns-nameservers which won't be removed after reboot add them in

sudo nano /etc/resolvconf/resolv.conf.d/base 

like

nameserver x.x.x.x
nameserver x.x.y.y

And afer that just do

sudo resolvconf -u
6
  • 1
    that path doesn't exist on my system I only have /etc/resolvconf/update-libc.d/avahi-daemon which loop for another bash script /usr/lib/avahi/avahi-daemon-check-dns.sh all I want is to get ride of default 192.168.1.1 DNS Servers:
    – Salem F
    Apr 5, 2019 at 16:49
  • @SalemF just go-ahead and create that missing file... Apr 8, 2019 at 11:46
  • 1
    , it's looks like , ubuntu uses different approach to handle dns setting I was only able change it from the GUI nm` which work after changing DHCP setting to address only and type dns address i.ibb.co/ysqwL0r/DHCP.png
    – Salem F
    Apr 8, 2019 at 16:19
  • What is newer version here. I use 20_04, so it should work with it. Another thing: you write base, what about changing head - is head called before base?
    – Timo
    May 19, 2021 at 7:06
  • 1
    @Timo base is used to be read defaults from and written in head, I think that head is overwritten every time you reboot... May 19, 2021 at 7:21
5

As of 20.04 Focal Fossa, Ubuntu Server uses systemd-resolved to manage nameserver configuration. /etc/resolv.conf is a static file and should not be edited.

To configure your resolver, you set it in your netplan configuration file, like this:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      addresses:
        - 192.168.0.100/24
      gateway4: 192.168.0.1
      nameservers:
          search: [mydomain, otherdomain]
          addresses: [1.1.1.1, 8.8.8.8, 4.4.4.4]

For more information on how to use the netplan system, see the Ubuntu article on network configuration.

2

NetworkManager TUI: nmtui

Beside this alternative using nmcli connection edit you might like a more ncurses approach with nmtui, the GNOME's CLITUI alternative to nm-connection-editor.

screenshot nmtui main window

screenshot editing a connection

Note: This anwer is more related to Ubuntu Desktop, but since the suitable question was marked as duplicate of this one (incorrectly, IMO) I post it here.

1
  • Just run sudo nmtui from a terminal. Jan 23, 2020 at 22:36
1

I use ubuntu 20.04 and unfortunately non of the other answers worked for me so I share the way I fixed this problem

first install resolvconf if not installed

sudo apt update
sudo apt install resolvconf

check resolvconf service started and enabled

sudo systemctl status resolvconf.service

if service is not enabled you can start and enable it with :

sudo systemctl start resolvconf.service
sudo systemctl enable resolvconf.service

now edit resolv.conf.d/head configuration file

sudo nano /etc/resolvconf/resolv.conf.d/head

add your DNS addresses to this file for example I use (8.8.8.8 and 8.8.4.4)

nameserver 8.8.8.8 
nameserver 8.8.4.4

now force resolvconf to run update scripts when invoked with -u

sudo resolvconf    --enable-updates 

now run updates

sudo resolvconf -u

now if you check cat /etc/resolv.conf you must see your DNS configuration in this file if not try these commands and check again

sudo systemctl restart resolvconf.service
sudo systemctl restart systemd-resolved.service

Resources:

https://www.tecmint.com/set-permanent-dns-nameservers-in-ubuntu-debian/ http://manpages.ubuntu.com/manpages/trusty/man8/resolvconf.8.html

Not the answer you're looking for? Browse other questions tagged or ask your own question.