How to manage DNS in NetworkManager via console (nmcli)

centos7nameservernetworkingnetworkmanager

I have CentOS 7.2 (guest in VirtualBox, vagrant box centos/7, no GUI).

I see there is a nameserver in file:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3

But how to add or replace with new one?

I have done this manually directly in the network:

$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
PEERDS=no
DNS1=8.8.4.4
DNS2=8.8.8.8

And it works.

But is there any way to do this through nmcli?

P.S. No nmtui installed (in a selected system).

Best Answer

Here is the command to modify an existing connection.

nmcli con mod $connectionName ipv4.dns "8.8.8.8 8.8.4.4"

connectionName can be found by command: nmcli con. In the question case, it will be "System eth0"

If you want to ignore automatically configured nameservers and search domains, ie the settings passed from DHCP.

nmcli con mod $connectionName ipv4.ignore-auto-dns yes

Finally, to enable the changes, bring the connection down then up:

nmcli con down $connectionName
nmcli con up $connectionName

Verify with cat /etc/resolv.conf. You should not edit /etc/resolv.conf manually as it is generated by NetworkManager service, it is likely to get overridden at any given time.

Useful nmcli manual