CentOS7:网络管理器使用了错误的搜索域

Jam*_*wey 7 rhel dns centos networkmanager resolv.conf

使用 Red Hat 7 中的网络管理器,我发现在更改主机名后使用旧/错误搜索域的问题。在 /etc/resolv.conf 中,我看到:

# Generated by NetworkManager
search **ec2.internal** d.sample.com
nameserver 172.31.0.2
Run Code Online (Sandbox Code Playgroud)

当我输入时hostname,我会看到我想要的输出:

[root@testing01 ~]# hostname
testing01.d.sample.com
Run Code Online (Sandbox Code Playgroud)

但不是替换搜索域,而是新域名附加到搜索域。我想完全摆脱 ec2.internal 并完全给这个域斧头。/etc/resolv.conf直接编辑文件会被网络管理器破坏。我不想禁用网络管理器,我宁愿不禁用 NM 的管理,/etc/resolv.conf除非我绝对必须这样做。

因此,1) 为什么 NM 不断恢复我的搜索域和 2) 如何仅使用 nmcli 或命令行工具解决此问题?

Jam*_*wey 7

经过几个小时的摸索,我能够解决这个问题。事实证明,这是通过 DHCP 设置的:

nmcli -f ip4 device show eth0
IP4.ADDRESS[1]:                         172.31.53.162/20
IP4.GATEWAY:                            172.31.48.1
IP4.DNS[1]:                             172.31.0.2
IP4.DOMAIN[1]:                          ec2.internal
Run Code Online (Sandbox Code Playgroud)

我能够通过覆盖网络接口的 ipv4.dns-search 值来覆盖 IP4.DOMAIN[1]:

nmcli connection modify uuid \`nmcli connection show --active | grep 802-3-ethernet | awk '{print $(NF-2)}' | tail -n 1` ipv4.dns-search d.sample.com
Run Code Online (Sandbox Code Playgroud)

或者更简单地说,

nmcli connection modify System\ eth0 ipv4.dns-search "d.sample.com"
Run Code Online (Sandbox Code Playgroud)

然后你必须重新启动NetworkManager

systemctl restart NetworkManager.service
Run Code Online (Sandbox Code Playgroud)

我还发现,因为我正在使用 Amazon 实例,所以我需要更新我的 cloud.cfg 文件。

  • 重新启动 NetworkManager 以应用网络配置是错误的。相反,通过“nmcli connection up”、“nmcli device connect”、“nmcli device reapply”或“nmcli device modify”反应连接配置文件。 (2认同)

L. *_*mes 6

当网络发生更改或更新时,/etc/resolv.conf 文件将始终被覆盖。您可以通过编辑文件/etc/resolvconf/resolv.conf.d/夹中的文件来控制写入的内容......即head文件。

将其放在/etc/resolvconf/resolv.conf.d/head文件中:

nameserver 172.31.0.2
search testing01.d.sample.com
Run Code Online (Sandbox Code Playgroud)

现在这将是/etc/resolv.conf每次更新时的标题。

更新

对于基于 Redhat 的系统,请使用以下步骤:

编辑位于以下位置的网络脚本:/etc/sysconfig/network-scripts。您将看到检测到的网络设备的条目(即网络适配器的 ifcfg-eth0 eth0)。

编辑此文件 ( /etc/sysconfig/network-scripts/ifcfg-eth0):

附加这一行:

DOMAIN=sample.com
Run Code Online (Sandbox Code Playgroud)

还运行此命令:

$ sudo hostnamectl set-hostname --static "testing01.d.sample.com"
Run Code Online (Sandbox Code Playgroud)

您很可能必须重新启动系统才能使更改生效。