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串口如何配置权限与通信?

    识别串口设备物理连接将串口设备(如USB转TTL模块)插入电脑,系统通常自动识别,查看设备节点终端执行:dmesg | grep tty # 查看内核日志ls /dev/tty* # 列出所有串口设备常见设备名:/dev/ttyS0:主板原生串口/dev/ttyUSB0:USB转串口设备/dev/ttyACM0……

    2025年7月15日
    17400
  • Linux如何读取MATLAB的.mat文件?

    使用Python的Scipy库(推荐)适用于大多数.mat文件(v7.3以下版本),需安装Python环境:pip install scipy numpy操作步骤:创建Python脚本(如read_mat.py):from scipy.io import loadmatdata = loadmat('y……

    2025年7月15日
    18200
  • linux中如何删除账户密码忘记

    Linux系统中,无论是管理员忘记root密码导致无法管理系统,还是普通用户忘记登录密码无法进入系统,都会严重影响日常使用,此时需通过底层方法重置密码,而非常规的passwd命令(因无法登录),本文将分场景详细介绍密码重置方案,涵盖GRUB引导、救援模式等常见方法,并附操作注意事项及FAQs,root密码丢失……

    2025年9月16日
    14400
  • Linux系统下如何启动Apache服务?步骤与命令详解?

    在Linux系统中,Apache作为最流行的开源Web服务器软件之一,广泛应用于网站部署和Web服务提供,启动Apache服务是进行Web服务部署的基础操作,但不同Linux发行版(如基于Debian/Ubuntu的系统或基于RHEL/CentOS的系统)可能因初始化系统(systemd或SysVinit)的不……

    2025年9月25日
    13400
  • linux如何查看汇编代码

    Linux中,可以使用objdump -d 命令查看汇编代码,或者

    2025年8月9日
    15900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信