菜鸟科技网

Linux命令行如何正确配置DNS?

在Linux命令行环境中配置DNS是网络管理的基础技能之一,正确的DNS配置能够确保系统顺利解析域名,从而访问互联网或内部网络资源,Linux系统中的DNS配置主要通过修改配置文件、使用命令行工具或管理网络服务来实现,具体方法因发行版不同而有所差异,本文将详细介绍常见Linux发行版(如Ubuntu/Debian、CentOS/RHEL)的DNS配置方法,包括临时配置、永久配置以及常见问题的排查思路。

Linux命令行如何正确配置DNS?-图1
(图片来源网络,侵删)

DNS配置基础概念

DNS(域名系统)的作用是将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,在Linux系统中,DNS解析主要依赖以下几个组件:

  1. /etc/resolv.conf文件:核心DNS配置文件,记录了系统使用的DNS服务器地址(如nameserver 8.8.8.8)和搜索域(如search example.com)。
  2. 网络管理工具:如NetworkManager(Ubuntu/默认桌面版)、systemd-networkd(CentOS 7+)、ifcfg文件(CentOS/RHEL传统方式)等,这些工具会动态生成或管理/etc/resolv.conf
  3. /etc/hosts文件:本地静态域名解析,用于将特定域名直接映射到IP地址,优先级高于DNS。

临时DNS配置(重启失效)

如果仅需临时修改DNS配置(如测试特定DNS服务器),可直接编辑/etc/resolv.conf文件。

操作步骤:

  1. 打开文件:使用文本编辑器(如vinano)以root权限打开文件:
    sudo vi /etc/resolv.conf
  2. 配置DNS服务器:在文件中添加或修改nameserver指令,每行指定一个DNS服务器,
    nameserver 8.8.8.8    # Google DNS
    nameserver 8.8.4.4    # Google备用DNS
    nameserver 114.114.114.114  # 国内公共DNS
  3. 保存退出:在vi中按Esc,输入wq保存并退出。

注意事项:

  • 这种方式是临时性的,重启系统或网络服务后,配置可能会被网络管理工具覆盖(如NetworkManager会重新生成该文件)。
  • 可通过cat /etc/resolv.conf验证配置是否生效。

永久DNS配置(推荐)

永久配置需根据网络管理工具的不同调整,以下是主流发行版的操作方法。

Ubuntu/Debian(使用NetworkManager)

Ubuntu桌面版默认使用NetworkManager管理网络,配置DNS需通过nmcli命令或图形界面,直接修改/etc/resolv.conf会被覆盖。

Linux命令行如何正确配置DNS?-图2
(图片来源网络,侵删)

使用nmcli命令(推荐)

  • 查看当前网络连接
    nmcli connection show

    假设连接名为ens33(根据实际输出修改)。

  • 修改DNS服务器
    sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 114.114.114.114"
  • 重启网络连接使配置生效
    sudo nmcli connection down ens33 && sudo nmcli connection up ens33
  • 验证配置
    cat /etc/resolv.conf  # 查看是否添加了指定的DNS服务器

修改Netplan配置文件(Ubuntu 18.04+)

Netplan是Ubuntu 18.04及以后版本的网络配置工具,配置文件通常位于/etc/netplan/目录下(如01-network-manager-all.yaml)。

  • 编辑配置文件
    sudo vi /etc/netplan/01-network-manager-all.yaml
  • 添加DNS配置(示例):
    network:
      version: 2
      ethernets:
        ens33:
          dhcp4: yes
          dhcp4-overrides:
            dns: ["8.8.8.8", "114.114.114.114"]
          nameservers:
            addresses: [8.8.8.8, 114.114.114.114]
            search: [example.com]  # 可选,指定默认搜索域
  • 应用配置
    sudo netplan apply

CentOS/RHEL(使用NetworkManager或systemd-networkd)

NetworkManager(CentOS 7+默认)

  • 查看连接名称
    nmcli connection show
  • 修改DNS
    sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8 114.114.114.114"
  • 重启连接
    sudo nmcli connection down "ens33" && sudo nmcli connection up "ens33"

使用ifcfg文件(CentOS/RHEL传统方式)

若使用ifcfg文件(通常位于/etc/sysconfig/network-scripts/,如ifcfg-ens33),需修改以下参数:

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

添加或修改:

Linux命令行如何正确配置DNS?-图3
(图片来源网络,侵删)
DNS1=8.8.8.8
DNS2=114.114.114.114
DOMAIN=example.com  # 可选,搜索域

重启网络服务:

sudo systemctl restart network

systemd-networkd(CentOS 8+可选)

CentOS 8+可使用networkd,配置文件位于/etc/systemd/network/(如ens33.network):

[Match]
Name=ens33
[Network]
DNS=8.8.8.8 114.114.114.114
Domains=example.com

重启服务:

sudo systemctl restart systemd-networkd

其他发行版(如Arch Linux)

Arch Linux默认使用systemd-networkd,配置方法与上述CentOS的networkd类似,或通过dhcpcd配置(修改/etc/dhcpcd.conf):

sudo vi /etc/dhcpcd.conf

添加:

static domain_name_servers=8.8.8.8 114.114.114.114

重启dhcpcd服务:

sudo systemctl restart dhcpcd

DNS配置验证与问题排查

验证DNS解析

  • 使用nslookup
    nslookup www.baidu.com

    若返回IP地址,说明DNS配置生效。

  • 使用dig(更详细):
    dig www.baidu.com
  • 使用ping
    ping www.baidu.com

常见问题排查

  • 问题1/etc/resolv.conf被自动覆盖。
    原因:网络管理工具(如NetworkManager)自动生成该文件。
    解决:通过对应工具的配置文件(如Netplan、nmcli)修改DNS,而非直接编辑/etc/resolv.conf
  • 问题2:域名解析失败,但/etc/hosts配置正确。
    原因/etc/hosts优先级高于DNS,检查域名是否在hosts中被错误映射。
  • 问题3:多个DNS服务器配置后部分域名无法解析。
    原因:DNS服务器顺序问题,系统按nameserver顺序依次查询,可调整DNS服务器顺序或超时时间(通过/etc/resolv.confoptions timeout:1)。

相关问答FAQs

Q1:为什么直接修改/etc/resolv.conf后重启配置会丢失?

A:Linux系统中的网络管理工具(如NetworkManager、systemd-networkd)会动态管理/etc/resolv.conf文件,当网络服务重启或系统重启时,这些工具会根据自身的配置(如Netplan、ifcfg文件)重新生成/etc/resolv.conf,覆盖手动修改的内容,永久配置应通过网络管理工具的配置文件或命令实现,而非直接编辑/etc/resolv.conf

Q2:如何配置DNS以支持特定域名的本地解析?

A:可通过修改/etc/hosts文件实现本地静态解析,将test.local解析为168.1.100,操作如下:

sudo vi /etc/hosts
168.1.100 test.local

保存后,系统访问test.local时会直接使用该IP,无需查询DNS服务器,若需覆盖DNS解析结果,/etc/hosts的优先级始终高于DNS配置。

分享:
扫描分享到社交APP
上一篇
下一篇