5154

Good Luck To You!

如何在linux系统下详细修改dns配置文件并让其永久生效?

在现代的Linux操作系统中,配置DNS(域名系统)是一项基础且至关重要的任务,DNS负责将人类易于记忆的域名(如www.google.com)解析为机器能够识别的IP地址(如142.250.199.100),无论是访问互联网、配置内部服务,还是进行网络故障排查,正确配置DNS都是不可或缺的一环,本文将详细介绍在Linux系统中配置DNS的几种主流方法,从传统的配置文件到现代化的系统服务,帮助您根据不同的场景选择最合适的方案。

如何在linux系统下详细修改dns配置文件并让其永久生效?

传统方法:直接编辑 /etc/resolv.conf

这是最经典、最直接的DNS配置方式。/etc/resolv.conf是DNS客户端的核心配置文件,系统中的绝大多数网络应用程序都会读取此文件来获取DNS服务器的地址。

该文件通常包含以下几项关键指令:

  • nameserver:指定DNS服务器的IP地址,可以指定多个,系统会按从上到下的顺序进行查询。
  • search:定义一个域名搜索列表,当尝试解析一个不包含完整域名的主机名(server1)时,系统会依次尝试将search列表中的域名后缀附加到主机名后进行查询。
  • domain:定义本地主机的域名,它只有一个值,功能与search类似,但优先级更低。
  • options:设置DNS解析器的其他选项,例如超时时间、重试次数等。

手动配置示例:

您可以使用任何文本编辑器(如nanovim)来修改此文件,要将DNS服务器设置为Google的公共DNS(8.8.8.8)和Cloudflare的DNS(1.1.1.1),并添加一个本地搜索域example.com应如下所示:

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1
search example.com
options timeout:2 attempts:3

重要提示: 在许多现代Linux发行版(如Ubuntu 18.04+、CentOS 7+)中,/etc/resolv.conf文件通常是由网络管理服务(如systemd-resolvedNetworkManager)自动生成和维护的,直接手动编辑此文件,在系统重启或网络服务重启后,您的修改很可能会被覆盖,虽然这种方法简单直接,但更推荐通过下述现代方法进行配置,以确保设置的持久性。

现代方法一:使用 systemd-resolved

systemd-resolvedsystemd套件的一部分,为许多现代Linux发行版提供了本地DNS存根解析器,它通过监听本地的回环地址(通常是0.0.53)来处理DNS查询,能够缓存查询结果、提高解析速度,并支持多种上游DNS配置。

要配置systemd-resolved,您需要编辑其主配置文件/etc/systemd/resolved.conf,而不是/etc/resolv.conf

配置步骤:

  1. 编辑配置文件: 使用管理员权限打开/etc/systemd/resolved.conf文件。

    sudo nano /etc/systemd/resolved.conf
  2. 修改DNS设置:[Resolve]部分,取消注释(或添加)并修改以下行:

    [Resolve]
    DNS=8.8.8.8 1.1.1.1
    #FallbackDNS=用于备用DNS
    Domains=~example.com
    #LLMNR=no
    #MulticastDNS=no
    #DNSSEC=no
    #DNSOverTLS=no
    #Cache=yes
    • DNS=:在这里填入您希望使用的DNS服务器地址,用空格分隔。
    • Domains=:可以设置搜索域,前缀表示仅用于路由解析,不影响单标签主机名的搜索。
  3. 重启服务并更新链接: 保存文件后,重启systemd-resolved服务以使更改生效。

    sudo systemctl restart systemd-resolved

    确保/etc/resolv.conf指向由systemd-resolved管理的存根文件,它应该是一个符号链接:

    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. 验证配置: 您可以使用resolvectl命令来检查当前状态:

    如何在linux系统下详细修改dns配置文件并让其永久生效?

    resolvectl status

    输出会显示全局DNS设置、当前网络接口的DNS信息以及Link(即Domains=)的配置。

现代方法二:使用 NetworkManager

NetworkManager是一个功能强大的网络管理工具,常见于桌面环境和需要灵活网络配置的服务器,它允许为每个网络连接(如特定的以太网接口或Wi-Fi网络)单独配置DNS。

使用nmcli命令行工具配置:

nmcliNetworkManager的命令行界面,非常适合脚本化或远程管理。

  1. 查看当前网络连接:

    nmcli connection show

    找到您要配置的连接的名称,例如Wired connection 1MyWiFi

  2. 为指定连接设置DNS:

    sudo nmcli connection mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"

    "Wired connection 1"替换为您的实际连接名称。

  3. 防止DHCP覆盖DNS设置: 如果您的网络使用DHCP,通常DHCP服务器会提供DNS信息,要强制使用您手动设置的DNS,需要忽略自动获取的DNS:

    sudo nmcli connection mod "Wired connection 1" ipv4.ignore-auto-dns yes
  4. 重新激活连接: 为了让配置生效,需要重新启动网络连接。

    sudo nmcli connection up "Wired connection 1"
  5. 验证配置: 检查/etc/resolv.conf文件,或直接使用nmcli查看设备状态:

    nmcli dev show | grep DNS
方法 主要配置文件 管理方式 适用场景
直接编辑/etc/resolv.conf /etc/resolv.conf 手动 临时测试、嵌入式系统或无网络管理服务的简单环境
使用systemd-resolved /etc/systemd/resolved.conf 服务化 现代Linux发行版的默认方案,提供缓存和持久化全局配置
使用NetworkManager 通过nmcli或GUI管理 连接导向 桌面系统、笔记本或多网络环境,可为不同连接设置不同DNS

相关问答FAQs

我修改了 /etc/resolv.conf,但重启服务器或网络后,设置又变回原来的样子了,这是为什么?

解答: 这个问题的根本原因是您的Linux系统正在使用systemd-resolvedNetworkManager这类网络管理服务,这些服务在启动或网络状态发生变化时,会根据它们自己的内部配置(例如/etc/systemd/resolved.conf或NetworkManager的连接配置文件)来重新生成/etc/resolv.conf文件,您对该文件的任何直接修改都会被覆盖。

如何在linux系统下详细修改dns配置文件并让其永久生效?

正确的做法是:

  • 如果系统使用systemd-resolved,请编辑/etc/systemd/resolved.conf文件,然后重启systemd-resolved服务。
  • 如果系统使用NetworkManager,请使用nmcli命令或图形界面来修改特定网络连接的DNS设置。 通过这些正规途径配置的DNS,才是持久且不会在重启后丢失的。

我已经配置了新的DNS服务器,如何快速测试它是否生效?

解答: 有多种命令可以用来测试DNS配置的有效性,以下是几种常用方法:

  1. 使用 ping 命令: 这是最简单的测试方法。ping一个域名,如果能够返回其IP地址并开始接收数据包,说明DNS解析基本正常。

    ping www.baidu.com

    如果成功,您会看到类似 PING www.a.shifen.com (182.61.200.7) 的输出,其中IP地址就是解析出来的结果。

  2. 使用 nslookupdig 命令: 这是更专业的DNS查询工具,提供更详细的信息。

    • nslookup
      nslookup www.github.com

      会显示查询到的域名及其对应的IP地址。

    • dig
      dig www.github.com

      dig的输出非常详尽,包含了查询的整个过程中的详细信息,包括ANSWER SECTION(应答部分),这里清晰地列出了域名和IP的映射关系,您还可以使用dig @DNS服务器地址 域名来直接向指定的DNS服务器发起查询,dig @8.8.8.8 www.github.com

  3. 对于 systemd-resolved 用户: 可以使用其配套的resolvectl命令进行查询,结果清晰直观。

    resolvectl query www.github.com

通过以上任一方法,如果都能成功获取到目标域名的IP地址,就证明您的DNS配置已经正确生效。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.