5154

Good Luck To You!

linux系统如何永久修改dns配置?

在Linux系统中,配置DNS(域名系统)是确保网络通信正常的关键步骤,DNS负责将人类可读的域名转换为机器可识别的IP地址,Linux系统中的DNS配置通常涉及多个文件和工具,具体方法可能因发行版的不同而有所差异,但核心原理和主要配置文件基本一致,以下将详细介绍Linux系统中设置DNS的常用方法、配置文件位置及注意事项。

DNS配置的核心文件

在Linux中,DNS的解析顺序主要由/etc/nsswitch.conf文件控制,而具体的DNS服务器地址通常存储在/etc/resolv.conf文件中,对于使用Systemd作为初始化系统的发行版(如Ubuntu 16.04+、CentOS 7+),还可通过NetworkManagersystemd-resolved服务管理DNS配置。

/etc/resolv.conf文件

这是最传统的DNS配置文件,直接指定DNS服务器的IP地址,文件内容通常包含以下字段:

  • nameserver:指定DNS服务器的IP地址,可配置多个,按顺序查询。
  • domain:定义本地域名,用于短域名解析(如localhost自动补全为localhost.com)。
  • search:定义搜索域列表,当查询短域名时,会依次附加这些后缀进行解析。
  • options:设置解析选项,如timeout(超时时间)、attempts(重试次数)等。

示例配置

nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com localdomain
options timeout:2 attempts:3

该配置表示优先使用Google的公共DNS(8.8.8.8),备用DNS为8.8.4.4,短域名会自动附加example.comlocaldomain后缀,查询超时时间为2秒,最多重试3次。

liunx设置dns

/etc/nsswitch.conf文件

该文件控制名称服务(如DNS、hosts文件等)的解析顺序,确保hosts行的DNS解析优先级正确,

hosts: files dns myhostname

表示优先查询本地hosts文件(/etc/hosts),然后查询DNS,最后查询主机名。

不同发行版的DNS配置方法

基于Debian/Ubuntu的系统

  • 临时修改(立即生效,重启失效):直接编辑/etc/resolv.conf,但需注意该文件可能被网络管理工具覆盖,建议通过工具永久修改。
  • 永久修改(推荐)
    • 使用Netplan(Ubuntu 18.04+):配置文件位于/etc/netplan/目录下(如01-netcfg.yaml),示例:
      network:
        version: 2
        ethernets:
          ens33:
            dhcp4: no
            addresses: [192.168.1.100/24]
            gateway4: 192.168.1.1
            nameservers:
              addresses: [8.8.8.8, 8.8.4.4]
              search: [example.com]

      执行sudo netplan apply使配置生效。

    • 使用NetworkManager:通过命令行nmcli connection edit "连接名"进入交互模式,或直接修改/etc/NetworkManager/system-connections/目录下的连接文件(需管理员权限)。

基于RHEL/CentOS的系统

  • 临时修改:同/etc/resolv.conf直接编辑。
  • 永久修改
    • 使用NetworkManager(CentOS 7+):命令行操作:
      nmcli connection modify "ens33" ipv4.dns "8.8.8.8 8.8.4.4"
      nmcli connection modify "ens33" ipv4.dns-search "example.com"
      nmcli connection down "ens33" && nmcli connection up "ens33"
    • 使用ifcfg文件(传统方式):编辑/etc/sysconfig/network-scripts/ifcfg-ens33,添加:
      DNS1="8.8.8.8"
      DNS2="8.8.4.4"
      DOMAIN="example.com"

      重启网络服务:sudo systemctl restart network

      liunx设置dns

使用systemd-resolved服务(Ubuntu 18.04+/CentOS 8+)

该服务提供本地DNS缓存,并通过/etc/systemd/resolved.confNetworkManager管理配置,启用步骤:

sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

编辑/etc/systemd/resolved.conf,修改DNS=字段指定服务器,如DNS=8.8.8.8 8.8.4.4,重启服务后生效。

DNS配置验证与故障排查

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

  • ping www.baidu.com:测试域名是否解析为IP地址。
  • nslookup www.baidu.com:查询指定域名的DNS记录,可指定DNS服务器(如nslookup www.baidu.com 8.8.8.8)。
  • dig www.baidu.com:显示详细的DNS查询过程,包括查询时间、响应状态等。
  • systemctl status systemd-resolved(或network-manager):检查相关服务是否正常运行。

常见问题

liunx设置dns

  1. 解析失败:检查/etc/resolv.conf中的nameserver是否正确,或防火墙是否阻止DNS查询(如ufwfirewalld规则)。
  2. 配置被覆盖:避免直接修改/etc/resolv.conf,优先使用网络管理工具(如Netplan、NetworkManager)或systemd-resolved进行永久配置。

相关问答FAQs

Q1: 为什么修改了/etc/resolv.conf后,重启系统配置会丢失?
A: 在现代Linux发行版中,/etc/resolv.conf通常由网络管理工具(如NetworkManager、systemd-resolved)自动生成,直接手动修改会被覆盖,正确的做法是通过对应工具的配置文件(如Netplan的.yaml文件、NetworkManager的连接文件)或服务设置来永久修改DNS,确保配置由工具管理。

Q2: 如何在Linux中配置多个DNS服务器并设置优先级?
A: 在/etc/resolv.conf中,多个nameserver按顺序排列,系统会依次尝试查询。

nameserver 8.8.8.8  # 优先DNS
nameserver 114.114.114.114  # 备用DNS

若使用NetworkManager,可在ipv4.dns字段中用空格分隔多个IP,如nmcli connection modify "ens33" ipv4.dns "8.8.8.8 114.114.114.114";若使用Netplan,则在nameservers.addresses列表中按优先级排列IP地址。

发表评论:

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

Powered By Z-BlogPHP 1.7.3

Copyright Your WebSite.Some Rights Reserved.