适用范围: CentOS 7, 银河麒麟 V10, 以及其他使用 NetworkManager 管理网络的 Linux 发行版。
核心工具: nmcli (NetworkManager Command Line Interface)
操作流程
第一步:环境诊断与确认
在修改之前,先确认网卡名称及当前 DNS 管理状态。
1. 确认网卡信息
bash
# 查看简要网卡列表
ip -br addr
> lo UNKNOWN 127.0.0.1/8 ::1/128
> eth0 UP 192.168.1.100/24 2001:db8::1/64
> docker0 DOWN 172.17.0.1/16
> virbr0 DOWN 192.168.122.1/24
# 或查看详情
ip addr
> 很多东西 不好用
2. 检查 DNS 管理状态
查看 /etc/resolv.conf 文件头部的注释:
bash
cat /etc/resolv.conf
如果输出内容包含NetworkManager,证明被NetworkManager管理,可以采用接下来的方法
bash
# Generated by NetworkManager
nameserver 192.168.1.1
nameserver 8.8.8.8
或是测试命令:
bash
systemctl status NetworkManager
输出active 证明被NetworkManager 管理。
如果显示
inactive或not found或测试systemctl status network显示active (running),请搜索被network管理的修改方法。
第二步:配置 DNS 参数
1. 修改dns配置
bash
# 设置首选和备用 DNS
# 语法: nmcli con mod <连接名> ipv4.dns "首选DNS 备选DNS"
# 示例 (假设连接名为 eth0,使用阿里和腾讯 DNS)
nmcli con mod "eth0" ipv4.dns "223.5.5.5 119.29.29.29"
2. 确定是否通过 DHCP 获取 IP
bash
# 查看所有连接的 IP 获取方式
nmcli connection show
# 网卡输出示例
NAME UUID TYPE DEVICE
eth0 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet eth0
# 查看具体网卡的 DHCP 状态
nmcli connection show eth0 | grep -i dhcp
如果输出ipv4.method: auto或者DHCP4.OPTION[...]: server_id则说明通过dhcp获取ip。
如果启动了dhcp,则需要执行以下命令防止自动覆盖dns。
bash
nmcli con mod eth0 ipv4.ignore-auto-dns yes
3. 重启网卡
bash
nmcli con up eth0
第四步:验证配置
查看 DNS 是否已更新
bash
# 查看 DNS 是否已更新
nmcli dev show eth0 | grep DNS
再测试下dns解析是否生效
bash
# 2. 测试DNS解析
nslookup www.baidu.com
# 或
dig www.baidu.com
# 或
ping www.baidu.com