Linux系统如何正确配置DNS服务器?详细步骤和方法是什么?

在Linux系统中,DNS(域名系统)配置是网络通信的基础,它负责将人类可读的域名转换为机器可识别的IP地址,正确的DNS配置能确保系统高效访问互联网或内部网络资源,本文将详细介绍Linux下配置DNS的多种方法,涵盖临时配置、永久配置、系统服务配置及DNS服务器搭建等场景,并针对不同发行版提供具体操作步骤。

linux下如何配置dns

临时配置DNS(适用于快速测试)

直接修改/etc/resolv.conf文件是最直接的临时配置方法,但该配置在系统重启或网络服务重启后可能会被覆盖,适合临时调试或快速验证DNS解析。

操作步骤

  1. 使用文本编辑器(如vinano)打开/etc/resolv.conf文件:
    sudo vi /etc/resolv.conf
  2. 在文件中添加或修改nameserver指令,指定DNS服务器IP地址(如公共DNS:8.8.8.8或114.114.114.114,或内网DNS服务器):
    nameserver 8.8.8.8
    nameserver 114.114.114.114
  3. 保存文件后,使用nslookupdig命令测试DNS解析是否生效:
    nslookup www.baidu.com

注意事项

  • 该方法为临时配置,若网络服务重启(如systemctl restart NetworkManager)或系统重启,配置可能恢复默认。
  • 避免直接修改该文件,因部分系统会通过网络管理工具自动覆盖,建议优先使用永久配置方法。

永久配置DNS(通过网络管理工具)

不同Linux发行版使用不同的网络管理工具,以下是主流发行版的永久配置方法:

基于NetworkManager的发行版(Ubuntu、CentOS 7+、RHEL 7+等)

NetworkManager是桌面版和部分服务器版Linux的默认网络管理工具,可通过图形界面或命令行配置DNS。

命令行配置(nmcli)

  1. 查看当前网络连接名称(如eno1wlan0eth0):
    nmcli connection show
  2. 修改指定连接的DNS服务器(以eno1为例,添加8.8.8.8和114.114.114.114):
    sudo nmcli connection modify eno1 ipv4.dns "8.8.8.8 114.114.114.114"
  3. 重启网络连接使配置生效:
    sudo nmcli connection down eno1 && sudo nmcli connection up eno1

配置文件修改
编辑对应网卡的配置文件(路径为/etc/sysconfig/network-scripts/ifcfg-eno1/etc/NetworkManager/system-connections/eno1.nmconnection),添加或修改以下内容:

linux下如何配置dns

DNS1=8.8.8.8
DNS2=114.114.114.114
PEERDNS=no  # 禁用NetworkManager自动覆盖DNS配置

保存后重启网络服务:sudo systemctl restart NetworkManager

基于netplan的发行版(Ubuntu 18.04+、Debian 10+等)

netplan是Ubuntu等系统使用的网络配置工具,通过YAML文件配置。

  1. 编辑netplan配置文件(通常位于/etc/netplan/目录下,如01-netcfg.yaml):
    sudo vi /etc/netplan/01-netcfg.yaml
  2. 在配置文件中添加DNS服务器,示例(以以太网连接为例):
    network:
      version: 2
      ethernets:
        eno1:
          dhcp4: no
          addresses: [192.168.1.100/24]  # 静IP地址(若使用DHCP可省略)
          gateway4: 192.168.1.1
          nameservers:
            addresses: [8.8.8.8, 114.114.114.114]
            search: [localdomain]  # 可选,添加域名后缀
  3. 应用配置并测试:
    sudo netplan apply
    nslookup www.google.com

基于systemd-networkd的发行版(Debian、Arch Linux等)

  1. 编辑网卡配置文件(如/etc/systemd/network/eno1.network):

    sudo vi /etc/systemd/network/eno1.network
  2. 添加DNS配置:

    [Match]
    Name=eno1
    [Network]
    DHCP=no
    Address=192.168.1.100/24
    Gateway=192.168.1.1
    DNS=8.8.8.8 114.114.114.114
  3. 重启systemd-networkd服务:

    sudo systemctl restart systemd-networkd

通过systemd-resolved配置DNS(现代系统)

systemd-resolved是systemd提供的本地DNS解析服务,支持缓存、LLMNR等功能,常用于Ubuntu 18.04+、CentOS 8+等系统。

  1. 启用并启动systemd-resolved服务:
    sudo systemctl enable --now systemd-resolved
  2. 修改/etc/systemd/resolved.conf文件:
    sudo vi /etc/systemd/resolved.conf

    取消注释并修改以下内容:

    linux下如何配置dns

    DNS=8.8.8.8 114.114.114.114
    FallbackDNS=1.1.1.1
    DNSStubListener=yes
  3. 创建/etc/resolv.conf的软链(指向systemd-resolved管理的本地DNS):
    sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
  4. 重启服务:sudo systemctl restart systemd-resolved

配置DNS服务器(以BIND9为例)

若需搭建本地DNS服务器,可使用BIND9(Berkeley Internet Name Domain)。

  1. 安装BIND9:
    sudo apt install bind9  # Debian/Ubuntu
    sudo yum install bind bind-utils  # CentOS/RHEL
  2. 修改主配置文件/etc/bind/named.conf.options
    sudo vi /etc/bind/named.conf.options

    添加 forwarders(转发外部DNS查询)和区域配置:

    options {
        directory "/var/cache/bind";
        forwarders { 8.8.8.8; 114.114.114.114; };
        allow-query { any; };
    };
  3. 创建正向区域文件(如example.com):
    sudo vi /etc/bind/db.example.com
    ```  示例:  
    ```plaintext
    $TTL    86400
    @       IN      SOA     ns1.example.com. admin.example.com. (
                                2023100101      ; Serial
                                3600            ; Refresh
                                1800            ; Retry
                                604800          ; Expire
                                86400 )         ; Minimum TTL
                IN      NS      ns1.example.com.
                IN      A       192.168.1.10
                IN      MX      10 mail.example.com.
    ns1      IN      A       192.168.1.10
    www      IN      A       192.168.1.20
  4. 创建反向区域文件(解析IP到域名):
    sudo vi /etc/bind/db.192.168.1
    ```  示例:  
    ```plaintext
    $TTL    86400
    @       IN      SOA     ns1.example.com. admin.example.com. (
                                2023100101      ; Serial
                                3600            ; Refresh
                                1800            ; Retry
                                604800          ; Expire
                                86400 )         ; Minimum TTL
                IN      NS      ns1.example.com.
                IN      PTR     example.com.
    10      IN      PTR     ns1.example.com.
    20      IN      PTR     www.example.com.
  5. 重启BIND9服务:sudo systemctl restart bind9,并使用dig测试解析:
    dig @localhost www.example.com

不同配置方法对比

方法 适用场景 永久性 重启要求 示例发行版
修改/etc/resolv.conf 临时测试、快速调试 网络服务重启 所有发行版
NetworkManager 桌面版、服务器版(CentOS 7+) 重启网络连接 Ubuntu、CentOS、RHEL
netplan Ubuntu 18.04+、Debian 10+ 执行netplan apply Ubuntu、Debian
systemd-resolved 现代系统(支持systemd) 重启systemd-resolved Ubuntu 18.04+、CentOS 8+
BIND9 搭建本地DNS服务器 重启bind9 所有发行版

相关问答FAQs

Q1:为什么修改/etc/resolv.conf后重启系统,DNS配置又恢复默认?
A:/etc/resolv.conf文件通常由网络管理工具(如NetworkManager、systemd-networkd)自动管理,若直接修改该文件,工具下次运行时会覆盖配置,解决方法:通过对应网络管理工具永久配置DNS(如NetworkManager中设置PEERDNS=no,或使用netplan修改配置文件),避免直接编辑/etc/resolv.conf

Q2:如何验证DNS配置是否生效?
A:可通过以下命令测试:

  1. nslookup 域名:查询域名对应的IP地址,若返回指定DNS服务器的解析结果,则配置生效。
  2. dig 域名 @DNS服务器IP:指定DNS服务器进行查询,可确认是否使用目标DNS(如dig www.baidu.com @8.8.8.8)。
  3. ping 域名:通过域名测试网络连通性,若能解析IP并通包,说明DNS配置正常。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20165.html

(0)
酷番叔酷番叔
上一篇 4小时前
下一篇 4小时前

相关推荐

  • Linux修改FTP地址,vsftpd配置教程

    修改FTP服务监听地址(以vsftpd为例)步骤1:编辑配置文件sudo nano /etc/vsftpd.conf # 使用nano编辑器,也可用vi/vim步骤2:设置监听地址在配置文件中找到或添加以下参数:listen_address=192.168.1.100 # 替换为你的目标IP地址若使用IPv6……

    2025年6月17日
    2900
  • 烧录前准备,你漏了啥?当心烧录失败!

    在ARM Linux设备上烧录IMG镜像文件是系统部署、恢复或设备刷新的常见操作,以下为详细步骤及注意事项,适用于树莓派、Orange Pi、NanoPi等主流ARM开发板及嵌入式设备,遵循E-A-T原则(专业性、权威性、可信度),确保内容可靠,必备工具硬件:ARM Linux设备(如树莓派)读卡器(若烧录到S……

    2025年7月13日
    2500
  • 如何制作linux脚本

    Linux脚本需编写命令序列,以`#!

    2025年8月18日
    800
  • linux中如何修改年月日

    Linux 中,可以使用 date 命令修改年月日,如 `date -s “YY

    2025年8月10日
    800
  • Linux装XGBoost哪种最稳?

    安装前准备更新系统与安装编译工具终端执行:sudo apt update && sudo apt upgrade -y # Ubuntu/Debiansudo yum update -y && sudo yum groupinstall "Development Too……

    2025年6月24日
    2300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信