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

Kir*_*rby 33 networking networkmanager nameserver centos7

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

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

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3
Run Code Online (Sandbox Code Playgroud)

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

我是直接在网络中手动完成的:

$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
PEERDNS=no
DNS1=91.217.197.2
DNS2=8.8.8.8
Run Code Online (Sandbox Code Playgroud)

它有效。

但是有没有办法做到这一点nmcli

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

lau*_*nod 45

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

nmcli con mod <connectionName> ipv4.dns "8.8.8.8 8.8.4.4"
Run Code Online (Sandbox Code Playgroud)

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

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

nmcli con mod <connectionName> ipv4.ignore-auto-dns yes
Run Code Online (Sandbox Code Playgroud)

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

nmcli con down <connectionName>
nmcli con up <connectionName>
Run Code Online (Sandbox Code Playgroud)

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

有用的 nmcli 手册

  • 我宁愿使用 nmtui 或者如果可能的话也使用 GUI 版本。如果您有更方便的选项来做同样的事情,则不需要成为命令行忍者。 (2认同)
  • @lauc.exon.nod 有些选项在 nmtui 中不可用,您必须使用 nmcli 来获取它们。 (2认同)

inf*_*era 10

有一个由 red hat 开发的优秀 TUI 工具nmtui,您确实应该尝试一下。如今,它已预安装在各种发行版上,但如果您没有,请尝试:

  sudo yum install networkmanager-tui
Run Code Online (Sandbox Code Playgroud)

它使用基于curses 的文本界面——可从命令行访问。nmcli仅在编写脚本时特别需要,并且由于可能的输入种类繁多,因此有更大的错误空间。


小智 6

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

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

nmcli con mod <connectionName> ipv4.ignore-auto-dns yes
Run Code Online (Sandbox Code Playgroud)

要启用更改,请先断开连接,然后再打开:

nmcli con down <connectionName>
nmcli con up <connectionName>
Run Code Online (Sandbox Code Playgroud)

验证 cat /etc/resolv.conf


小智 5

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

\n
nmcli -g name,type connection  show  --active | awk -F: '/ethernet|wireless/ { print $1 }' | while read connection\ndo\n  nmcli con mod "$connection" ipv6.ignore-auto-dns yes\n  nmcli con mod "$connection" ipv4.ignore-auto-dns yes\n  nmcli con mod "$connection" ipv4.dns "8.8.8.8 8.8.4.4"\n  nmcli con down "$connection" && nmcli con up "$connection"\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

最后,无线连接将丢失。您必须重新连接并破坏\xc3\xa0!

\n