如何通过控制台(nmcli)管理 NetworkManager 中的 DNS?

如何通过控制台(nmcli)管理 NetworkManager 中的 DNS?

我有 CentOS 7.2(VirtualBox 中的客户机,vagrant box centos/7,没有 GUI)。

我看到文件中有一个名称服务器:

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

但是如何添加或者替换新的呢?

我已经直接在网络中手动完成了此操作:

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

并且它有效。

但是有没有什么办法可以做到这一点呢nmcli

PS 未nmtui安装(在选定的系统中)。

答案1

这是修改现有连接的命令。

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

connectionName可以通过命令找到:nmcli con。在问题案例中,它将是"System eth0"

如果您想忽略自动配置的名称服务器和搜索域,即从 DHCP 传递的设置。

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

最后,为了使更改生效,请关闭连接然后重新打开:

nmcli con down "$connectionName"
nmcli con up "$connectionName"
重新启动 NetworkManager 服务(如果您不想断开连接):
service NetworkManager restart

使用 进行验证cat /etc/resolv.conf。您不应/etc/resolv.conf手动编辑,因为它是由 NetworkManager 服务生成的,它很可能在任何给定时间被覆盖。

有用的 nmcli 手册

答案2

有一个由 red hat 开发的很好的 TUI 工具,nmtui你真的应该尝试一下。现在它已经预装在各种发行版中,但如果你的发行版中没有,请尝试:

  sudo yum install networkmanager-tui

它使用基于 curses 的文本界面 - 可从命令行访问。nmcli只有在编写脚本时才特别必要,并且由于可能的输入种类较多,因此出错的空间也较大。

答案3

除了设置上面描述的 ipv4.dns 属性之外...

要排除 DHCP 提供的 DNS 服务器...请将 ipv4.ignore-auto-dns 属性设置为 yes。

nmcli con mod <connectionName> ipv4.ignore-auto-dns yes

要启用更改,请关闭然后重新打开连接:

nmcli con down <connectionName>
nmcli con up <connectionName>

验证cat /etc/resolv.conf

答案4

为了以防万一,我已经编写了一个小脚本来为每个以太网/无线连接自动执行此操作(这里使用谷歌 DNS):

nmcli -g name,type connection  show  --active | awk -F: '/ethernet|wireless/ { print $1 }' | while read connection
do
  nmcli con mod "$connection" ipv6.ignore-auto-dns yes
  nmcli con mod "$connection" ipv4.ignore-auto-dns yes
  nmcli con mod "$connection" ipv4.dns "8.8.8.8 8.8.4.4"
  nmcli con down "$connection" && nmcli con up "$connection"
done

最后,无线连接将会丢失。您必须重新连接,然后就好了!

相关内容