Linux系统如何正确设置DNS服务器地址?

在Linux系统中,DNS(域名系统)配置用于将域名解析为IP地址,正确的DNS设置直接影响网络访问效率,本文将详细介绍Linux系统中设置DNS的多种方法,涵盖临时修改、永久配置及不同发行版的操作差异,帮助用户根据实际需求选择合适的配置方式。

linux如何设置dns

临时修改DNS(重启后失效)

临时修改DNS适用于快速测试或临时场景,重启系统或网络服务后配置会恢复默认,直接编辑/etc/resolv.conf文件即可,该文件是Linux系统中DNS解析的核心配置文件,记录了系统使用的DNS服务器地址。

操作步骤:

  1. 使用文本编辑器(如vinano)打开/etc/resolv.conf,需root权限:
    sudo vi /etc/resolv.conf
    ```  示例如下,通过`nameserver`指令指定DNS服务器(可配置多个,按优先级顺序使用):  
    ```plaintext
    # 本地域名解析配置
    domain localdomain
    search localdomain
    nameserver 8.8.8.8   # Google DNS
    nameserver 114.114.114.114 # 114 DNS
    nameserver 223.5.5.5   # 阿里DNS
  2. 保存文件后,立即生效,但重启系统或网络服务(如sudo systemctl restart NetworkManager)后可能被覆盖。

永久修改DNS(推荐方法)

永久修改需通过系统网络管理工具或配置文件实现,避免重启后丢失,不同Linux发行版(如Ubuntu/Debian、CentOS/RHEL)使用的管理工具不同,需分别操作。

(一)Ubuntu/Debian系统(基于systemd和Netplan/NetworkManager)

  1. 通过Netplan配置(适用于Ubuntu 18.04+)
    Netplan是Ubuntu默认的网络配置工具,配置文件通常位于/etc/netplan/目录下(如01-netcfg.yaml)。

    • 编辑配置文件(示例为静态IP+DNS):
      sudo vi /etc/netplan/01-netcfg.yaml
    • 添加或修改DNS配置:
      network:
        version: 2
        ethernets:
          enp0s3: # 网卡名称,需通过ip a命令确认
            dhcp4: no
            addresses: [192.168.1.100/24] # 静态IP
            gateway4: 192.168.1.1 # 网关
            nameservers:
                addresses: [8.8.8.8, 114.114.114.114] # DNS服务器
                search: [localdomain] # 搜索域
    • 应用配置:
      sudo netplan apply
  2. 通过NetworkManager配置(图形化或命令行)
    NetworkManager是Ubuntu常用的网络管理工具,支持图形界面(nm-connection-editor)和命令行(nmcli)。

    • 命令行方式
      sudo nmcli con mod "连接名称" ipv4.dns "8.8.8.8 114.114.114.114" # 修改DNS
      sudo nmcli con mod "连接名称" ipv4.ignore-auto-dns yes # 忽略DHCP分配的DNS
      sudo nmcli con up "连接名称" # 重启连接
    • 图形化方式:通过“系统设置”→“网络”→“连接”→“IPv4设置”→“DNS服务器”手动添加。

(二)CentOS/RHEL系统(基于NetworkManager或ifcfg文件)

  1. 通过NetworkManager配置(推荐)
    CentOS 7+默认使用NetworkManager,可通过nmtui(文本界面)或nmcli(命令行)配置。

    linux如何设置dns

    • 文本界面(nmtui)
      sudo nmtui

      进入“编辑连接”→选择网卡→“IPv4配置”→“手动”→“DNS服务器”添加地址→保存。

    • 命令行(nmcli)
      sudo nmcli con mod "ens33" ipv4.dns "8.8.8.8 223.5.5.5" # 修改DNS(ens33为网卡名)
      sudo nmcli con up "ens33" # 重启连接
  2. 通过ifcfg文件配置(传统方式)
    若NetworkManager未启用,可直接编辑网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33):

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

    添加或修改以下参数:

    DNS1=8.8.8.8
    DNS2=114.114.114.114
    PEERDNS=no # 忽略DHCP分配的DNS

    重启网络服务:

    sudo systemctl restart network

systemd-resolved本地DNS缓存配置

现代Linux系统(如Ubuntu 20.04+)默认使用systemd-resolved提供本地DNS缓存,可提升解析效率并支持DNS over HTTPS(DoH)。

  1. 查看状态
    systemd-resolve --status
  2. 修改上游DNS:编辑/etc/systemd/resolved.conf
    sudo vi /etc/systemd/resolved.conf

    取消注释并修改DNS=字段(如DNS=8.8.8.8 223.5.5.5),禁用DNSStubListener(若需直接使用/etc/resolv.conf):

    linux如何设置dns

    DNSStubListener=no
  3. 重启服务
    sudo systemctl restart systemd-resolved

验证DNS配置

配置完成后,可通过以下命令验证DNS解析是否生效:

  • nslookup:查询域名对应的IP,如nslookup www.baidu.com
  • dig:显示详细的DNS解析过程,如dig www.baidu.com
  • host:简单查询,如host www.baidu.com

不同发行版DNS配置方法对比

发行版 推荐工具 配置文件/命令 重启命令
Ubuntu 18.04+ Netplan /etc/netplan/*.yaml sudo netplan apply
Ubuntu/Debian NetworkManager nmcli/nm-connection-editor sudo nmcli con up "连接名称"
CentOS 7+ NetworkManager nmtui/nmcli sudo systemctl restart network
传统CentOS ifcfg文件 /etc/sysconfig/network-scripts/* sudo systemctl restart network

注意事项

  1. 避免直接修改/etc/resolv.conf,优先使用系统网络管理工具,防止配置被覆盖。
  2. 企业环境中,DNS配置需结合内部服务器策略,公共DNS(如8.8.8.8)仅适用于临时测试。
  3. 若需启用DNS安全功能(如DoH),可配置systemd-resolved或使用第三方工具(如dnscrypt-proxy)。

相关问答FAQs

Q1:为什么修改/etc/resolv.conf后DNS设置不生效?
A:/etc/resolv.conf可能被NetworkManager或systemd-resolved自动管理,解决方法:

  • 对于NetworkManager:确保配置中设置ipv4.ignore-auto-dns=yes(nmcli)或PEERDNS=no(ifcfg文件)。
  • 对于systemd-resolved:修改/etc/systemd/resolved.conf中的DNSStubListener=no,并重启服务。

Q2:如何查看当前系统实际使用的DNS服务器?
A:可通过以下命令确认:

  • systemd-resolve --status:显示systemd-resolved使用的DNS及缓存状态。
  • nmcli dev show | grep DNS:查看NetworkManager管理的DNS配置。
  • cat /etc/resolv.conf:查看最终生成的DNS解析文件(注意是否为软链接,如/etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf)。

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

(0)
酷番叔酷番叔
上一篇 2025年9月25日 23:05
下一篇 2025年9月26日 00:17

相关推荐

  • 如何生成目录1的校验和?,(说明,严格控制在30字内,采用疑问句式引发用户点击,保留核心关键词生成目录1的校验和,符合技术类搜索需求,无书名号。)

    命令行工具(高效精准)diff 命令:逐行对比内容原理:递归比较两个目录的文件内容差异(非仅文件名),基础命令:diff -rq 目录1 目录2-r:递归对比子目录-q:仅显示差异文件(省略具体差异内容)输出差异详情(显示具体修改行):diff -r 目录1 目录2示例输出:Only in dir1: file……

    2025年8月7日
    5500
  • Linux编译C文件的具体步骤和命令有哪些?

    在Linux环境下编译C文件主要依赖于GNU Compiler Collection(GCC),这是Linux系统中最常用的C语言编译器,编译过程通常包括预处理、编译、汇编和链接四个阶段,每个阶段可以通过不同的GCC选项进行控制,下面将详细介绍编译C文件的完整流程及常用操作,编译C文件的第一步是编写源代码,通常……

    2025年9月20日
    4200
  • Linux如何修改文件扩展名?

    在Linux操作系统中,文件的扩展名(后缀)虽然不直接影响系统的文件识别机制(Linux更依赖文件权限、元数据等),但为了方便用户理解、程序调用或满足特定场景需求(如将文本文件改名为.jpg以适配某些工具),修改文件扩展名是一项常见操作,本文将详细介绍Linux下修改文件扩展名的多种方法,包括基础命令、批量处理……

    2025年9月17日
    4800
  • 熬夜真的会导致猝死吗?

    在Linux系统中,子进程的管理是进程控制的核心任务之一,正确关闭子进程不仅能释放系统资源,还能避免僵尸进程(Zombie Process)积累导致的内存泄漏和系统性能下降,本文将详细解释关闭子进程的四种方法、常见问题及最佳实践,为什么需要主动关闭子进程?资源释放:子进程退出后,内核会保留其退出状态(PID、退……

    2025年7月31日
    6600
  • 如何快速获取Linux系统root权限?

    标准安全方式:使用 sudo 命令(推荐)适用场景:日常管理任务(90%以上场景)前提:您的普通用户账户已被加入 sudoers 授权列表(Ubuntu等发行版默认开启)操作步骤:打开终端(Ctrl+Alt+T 或通过菜单启动)在需要root权限的命令前添加 sudo, sudo apt update # 更新……

    2025年6月26日
    6200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信