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)
酷番叔酷番叔
上一篇 2025年8月30日 09:26
下一篇 2025年8月30日 09:40

相关推荐

  • Linux设备驱动如何编写?关键步骤与注意事项有哪些?

    Linux设备驱动是内核与硬件交互的核心组件,负责直接操作硬件设备并为上层应用提供统一的访问接口,编写Linux设备驱动需要深入理解内核机制、硬件工作原理及内核编程规范,以下从开发环境准备、核心步骤、关键代码结构及调试方法等方面详细说明,开发环境准备编写设备驱动前需搭建完整的开发环境,包括:内核源码:需与目标系……

    2025年8月30日
    4500
  • 这样洗碗真的干净吗

    环境准备:构建专业开发基础安装开发工具链终端执行:sudo apt update && sudo apt install build-essential(Debian/Ubuntu)或 sudo dnf groupinstall “Development Tools”(Fedora/CentOS……

    2025年8月1日
    6700
  • Linux系统下telnet登录密码修改的具体步骤是什么?

    在Linux系统中,修改telnet密码的核心逻辑并非直接修改telnet服务的独立密码,而是通过修改系统用户的登录密码来实现,因为telnet服务默认依赖系统的PAM(可插拔认证模块)进行用户认证,telnet协议本身存在明文传输密码的安全风险,因此在实际生产环境中强烈建议使用更安全的SSH协议替代,但若因兼……

    2025年8月26日
    6000
  • 如何实现Linux系统1秒启动的极致速度?

    实现Linux系统1秒启动是一个涉及硬件、固件、内核及系统服务深度优化的过程,需要从启动链的每个环节入手减少延迟,以下是具体实现方法及操作步骤:硬件基础:选择高速存储与低延迟组件硬件是启动速度的物理基础,传统机械硬盘(HDD)的随机读写速度(lt;1MB/s)是主要瓶颈,必须替换为固态硬盘(SSD),NVMe……

    2025年10月1日
    2700
  • 为什么大家都说好,却没人买?

    在Linux系统中,ping命令是网络故障排查的基础工具,用于测试主机之间的网络连通性,它通过发送ICMP(Internet Control Message Protocol)回显请求包到目标主机并等待响应,帮助用户诊断网络延迟、丢包等问题,以下是详细使用指南:ping [选项] 目标主机- **示例……

    2025年6月18日
    7700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信