How can I check which DNS server am I using (in Linux)? I am using network manager and a wired connection to my university's LAN. (I am trying to find out why my domain doesn't get resolved)
-
1The Linux kernel itself is not aware about DNS services. To answer it's better to know your userland. What distribution are you using? Ubuntu? Debian GNU/Linux? Centos? – Valerio Bozz May 18 '21 at 07:49
14 Answers
You should be able to get some reasonable information in:
$ cat /etc/resolv.conf
-
45However, please be aware that (on modern Linuxen) the contents of
/etc/nsswitch.conf
dictate what name services are used (DNS, LDAP, etc) and in what order. Sayfgrep hosts: /etc/nsswitch.conf
. If it only references DNS,/etc/resolv.conf
is the right place to look for your nameservers. But chances are you're also using mDNS (aka ZeroConf, aka Avahi, aka Bonjour, etc), etc. In that case, things depend on what you're using. – Alexios Jan 12 '12 at 13:35 -
74This file typically points at 127.0.1.1 on Ubuntu - it's the local DNS cache server, not the actual upstream. – Barry Kelly Mar 08 '16 at 10:24
-
3
-
5And if you have several upstream server configured ? How to know which one is currently used ? – Sylvain Leroux Nov 24 '16 at 23:31
-
4I would suggest to mention that file is a link and dynamically generated for systems using resovconf (like Ubuntu). I've seen this answer millions of times and until today is that I think it is correct, because I understand now that it is actually a dynamically generated file. – jgomo3 Dec 26 '17 at 18:00
-
10See the answers by @G32RW or @Lonniebiz for a more robust approach under various circumstances, e.g. when you get an answer like
127.0.0.53
– nealmcb Nov 11 '18 at 22:13 -
2@Geremia router? I'm on office wifi and I want to verify which DNS server I'm using. Or I'm on VPN and want to verify, similarly. Usually I don't have access to the router. – Barry Kelly Mar 20 '19 at 10:12
-
7This solution is no more up to date. I find the
systemd-resolve --status
suggested by @G32RW most up-to-date solution for this problem. – Georgi Stoyanov Mar 27 '19 at 15:59 -
1There is no "systemd-resolve" in my Ubuntu 22.04 . Also "nmcli device show | grep -i dns" returns nothing. However, "resolvectl --protocol=dns | grep 'DNS Servers'" seems to work. – Marnix A. van Ammers Nov 25 '22 at 17:15
-
I would suggest adding:
cat /run/systemd/resolve/resolv.conf
to your answer if you are running a caching resolver on 127.X.X.X and actually want to know what's behind the cache. Or, as others have answered, you can also runresolvectl
, or justresolvectl dns
– B. Shea Mar 26 '24 at 18:09
Here's how I do it:
( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS
This worked previous to the way above:
nm-tool | grep DNS
On Debian, you need to have the network-manager package installed.

- 67,283
- 35
- 116
- 255

- 5,123
-
19This one is usefull if you are using VPN and NetworkManager. Your
/etc/resolv.conf
will point to your machine, withdnsmasq
resolving names as configured by NetworkManager. – Grzegorz Żur May 30 '13 at 11:32 -
7
-
3nm-tool is not available in newer linuxes. for example it is not in the 'network-manager' package of debian 8. – don bright Oct 31 '15 at 15:06
-
nm-tool | grep DNS No command 'nm-tool' found, did you mean: Command 'dm-tool' from package 'lightdm' (main) nm-tool: command not found
– chovy Aug 31 '16 at 07:22 -
2
-
2This did not work for me on an Ubuntu VM.
nmcli dev show
did not have the DNS info. However,systemd-resolve --status
did have the real DNS server. https://unix.stackexchange.com/a/434756 – wisbucky Nov 14 '18 at 02:22 -
@wisbucky : That didn't work for me in 16.04, but people say its the new way in 18.04+. – Lonnie Best Nov 15 '18 at 00:29
-
1To add, you can also supply an interface name, e.g.,
nmcli dev show eth1
to show information about a specific adapter. Useful if you're troubleshooting a specific adapter that's connected differently than others. – Michael Stum Jun 30 '19 at 23:52 -
1nmcli is only installed for GUI distros, through network-manager package, not evailable in Ubuntu Server by default, for example – xCovelus Oct 03 '19 at 12:52
-
+1 for
systemd-resolve --status
as per https://unix.stackexchange.com/a/434756/36362 (as @wisbucky mentions above) on Ubuntu 18.04. – Johnny Utahh May 14 '20 at 18:38 -
-
The question specifically indicates the use of Network Manager. If you're not using network manager, see other answers. – Lonnie Best Nov 18 '21 at 13:46
On systems running systemd use:
systemd-resolve --status
Or:
resolvectl

- 103

- 1,952
- 1
- 10
- 5
-
12
-
-
-
18Says
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
– xji Apr 12 '18 at 11:19 -
16This is the new default way to do it in Ubuntu 18.04 Bionic Beaver - get used to it, everybody! – Avery Freeman Apr 24 '18 at 20:32
-
10This is the only solution that worked for me, as the others returned 127.0.0.53 – greuze Oct 25 '18 at 07:50
-
-
2
-
Since the commands gives a lot of unrelated information, piping the output into
grep DNS
should return only DNS related information, including DNS servers currently in use. – Umlin Apr 30 '21 at 00:47 -
It says my DNS is 127.0.0.1, which is only the first entry in /etc/resolv.conf – kurdtpage Jul 06 '21 at 21:54
-
resolvectl is pretty verbose for me.
resolvectl dns
seems to give a nice, relatively compact list of DNS server IPs. – mwfearnley Sep 03 '21 at 09:14 -
1resolvctl worked for me in Ubuntu 22.04 . nmcli and systemd-resolve solutions did not work. – Marnix A. van Ammers Nov 25 '22 at 17:28
I think you can also query DNS and it will show you what server returned the result. Try this:
dig yourserver.somedomain.xyz
And the response should tell you what server(s) returned the result. The output you're interested in will look something like this:
;; Query time: 91 msec
;; SERVER: 172.xxx.xxx.xxx#53(172.xxx.xxx.xxx)
;; WHEN: Tue Apr 02 09:03:41 EDT 2019
;; MSG SIZE rcvd: 207
You can also tell dig
to query a specific DNS server by using dig @server_ip

- 9,669
-
13
-
9If you use any DNS masking/caching service that is run on your local machine, it will hide the real DNS servers. – karatedog Sep 07 '15 at 09:12
-
20Ubuntu 18.04 just shows the local dns cache:
SERVER: 127.0.0.53#53(127.0.0.53)
– wisbucky Nov 14 '18 at 02:16 -
2This only tells you which server was used for that query. It doesn't tell you all the DNS servers that your host might use. – Marnix A. van Ammers Nov 28 '21 at 01:14
-
You can find all DNS servers used to satisfy a query by running
dig +trace your.domain
– vesperto Apr 11 '22 at 21:59 -
1Beware that this obviously fails if the DNS server is not available. That's not a common thing, but I've managed to get a bad result or timeout when looking for a DNS server running on IPv6 (using
dig -6
). – Maarten Bodewes Oct 27 '22 at 13:03
Just do an, nslookup
. Part of its results include the server that it's using.
In the example below, it shows that the DNS server used is at 8.8.8.8.
$ nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 172.217.22.174

- 953

- 859
-
9
-
22On a recent Ubuntu, this again points to the local cache server 127.0.0.1 as already hinted at in this comment – FriendFX Dec 01 '17 at 01:50
-
In CentOS 7 it quits with error, but it is a vm so I did
nslookup google.com
in the Windows host and I found the nameserver. Add it in/etc/resolv.conf
like:nameserver xx.xx.xx.xx
and restart servicenetwork
, and all is fine. Praise you. – WesternGun May 03 '18 at 15:22 -
-
1
With the new network-manager
command nmcli
, do this:
nmcli --fields ipv4.dns,ipv6.dns con show [connection_name]
On newer versions of network-manager (such as in Ubuntu 16.04), the field names are slightly different:
nmcli --fields ip4.dns,ip6.dns con show [connection_name]
If you don't know the connection name, use:
nmcli -t --fields NAME con show --active
For example, on old versions of nmcli :
$ nmcli --fields ip4.dns,ip6.dns con show 'Wired connection 1'
IP4.DNS[1]: 172.21.0.13
IP4.DNS[2]: 172.21.0.4

- 145
- 7

- 421
-
-
It works fine for me with network-manager 1.0.4 on Ubuntu 15.10. Maybe you have an older version? – Sameer Mar 17 '16 at 05:40
-
The tabular format is pretty bad. I hope to get a column like format similar to Powershell. – CMCDragonkai Mar 14 '17 at 06:42
-
3Returns
Error: invalid field 'ip4.dns'; allowed fields: NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,AUTOCONNECT-PRIORITY,READONLY,DBUS-PATH,ACTIVE,DEVICE,STATE,ACTIVE-PATH.
– FriendFX Dec 01 '17 at 01:53 -
-
1@FriendFX In newer versions of
nmcli
, the command is :nmcli --fields ip4.dns,ip6.dns dev show
– SebMa Nov 19 '20 at 10:36 -
Ugh, as long as
nmcli
doesn't keep backwards compatibility with specific parameters and output format, I guess this is not a good way of testing for anything. – Maarten Bodewes Oct 27 '22 at 13:06
to get the first DNS SERVER (IP only) :
cat /etc/resolv.conf|grep -im 1 '^nameserver' |cut -d ' ' -f2
cat
will output DNS configgrep
filters only nameserver-i
grep ignore case-m 1
grep stop after first matchcut
take the ip part of the row (second column with ' ' as separator)
To put DNS ip in an environment variable, you could use as follow:
export THEDNSSERVER=$(cat /etc/resolv.conf|grep -im 1 '^nameserver' |cut -d ' ' -f2)

- 349
-
5
grep -m 1
stops matching after first match so you don't have to usehead
– sshow Jul 28 '17 at 08:30 -
1To lighten the pipeline even more, capture groups with Perl regexp is very neat, and grep takes a file argument:
grep -Pom 1 '^nameserver \K\S+' /etc/resolv.conf
. Just wrote up Capture groups with grep perl regular expression – sshow Jul 28 '17 at 09:04 -
There's both IPv4 and IPv6 DNS servers. Also, secondary servers exist for a reason. Which one this command returns? Is it advised to take the first one, and just ignore the others? – André Werlang Jan 16 '20 at 02:53
Using resolvectl
$ resolvectl status | grep -1 'DNS Server'
DNSSEC supported: no
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1
1.0.0.1
grep
option:-C NUM
,-NUM
,--context=NUM
Print NUM lines of output context.
For compatibility, systemd-resolve
is a symbolic link to resolvectl
on many distros as for Ubuntu 18.10:
$ type -a systemd-resolve
systemd-resolve is /usr/bin/systemd-resolve
$ ll /usr/bin/systemd-resolve
lrwxrwxrwx 1 root root 10 nov. 15 21:42 /usr/bin/systemd-resolve -> resolvectl
$ type -a resolvectl
resolvectl is /usr/bin/resolvectl
$ file /usr/bin/resolvectl
/usr/bin/resolvectl: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=09e488e849e3b988dd2ac93b024bbba18bb71814, stripped

- 1,258
- 1
- 12
- 22
-
1
-
see also https://askubuntu.com/q/1149364/157358 about the name of the program – glS Jun 12 '21 at 11:38
-
1As with other answers, thiis will simply return the caching service on your local host. – Maarten Bodewes Oct 27 '22 at 13:09
If you are using network manager probably you get all network parameters from your dhcp server at your university.
If you don't want use your shell to check your dns settings (as described by hesse and Alexios), you can see them from the panel "Network information".
You can reach this panel by pressing right mouse button on network manager icon and selecting "Connection Information" from the menu.

- 437
I have Fedora 25 and also had similar slow response on command line to sudo commands.
nmcli dev show | grep DNS
showed that only one of my 3 adapters (two active) had DNS entries. By adding DNS entries to the one active card that didn't have an entry - presto! All is good and response time is immediate.

- 67,283
- 35
- 116
- 255

- 87
In Ubuntu >= 15
nmcli device show <interfacename> | grep IP4.DNS
Replace <interfacename>
with yours.
In Ubuntu <= 14
The command
nmcli dev list iface <interfacename> | grep IP4
Replace <interfacename>
with yours.
Examples
nmcli device show eth0 | grep IP4.DNS
Or
nmcli dev list iface eth0 | grep IP4
This will list all DNS servers(If you use more than one).

- 431

- 1,888
On a recent Fedora 33, you can just use
# resolvectl dns
Global:
Link 2 (enp0s31f6):
Link 3 (wlp4s0): 1.1.1.1 8.8.8.8
Link 4 (virbr0):
Link 5 (virbr0-nic):
To check if systemd-resolved
is active, do cat /etc/resolv.conf
It will tell you who is controlling the file.
If you want more details, you can use resolvectl status
resolvectl statistics
, you can also flush caches ...
To troubleshoot, you can use journalctl -u systemd-resolved -f -o cat | grep Looking
after setting the level to DEBUG: sudo resolvectl log-level debug

- 79
On systems where systemd-resolved
is NOT installed :
$ host -v something.unknown | awk -F "[ #]" '/Received /{print$5}' | uniq
192.168.1.1
On systems where NetworkManager
is running :
$ ( nmcli -f IP4.DNS,IP6.DNS dev list || nmcli -f IP4.DNS,IP6.DNS dev show ) 2>/dev/null | awk '/DNS/{print$NF}'
192.168.1.1

- 2,149