菜鸟科技网

Linux命令行如何设置DNS?

在Linux系统中,命令行设置DNS是网络管理中的常见操作,无论是临时修改还是永久配置,掌握相关命令都能高效管理域名解析服务,DNS(域名系统)的作用是将人类可读的域名转换为机器可识别的IP地址,正确配置DNS对网络访问至关重要,以下将详细介绍不同Linux发行版中通过命令行设置DNS的方法,包括临时修改、永久配置以及常见问题的解决方案。

Linux命令行如何设置DNS?-图1
(图片来源网络,侵删)

临时修改DNS配置

临时修改DNS配置适用于测试场景或重启后无需保留的配置,重启网络服务或系统后修改会失效,主要方法有两种:

  1. 使用resolv.conf文件
    resolv.conf是Linux系统中存放DNS解析器的核心文件,直接编辑该文件可立即生效。

    • 查看当前配置:cat /etc/resolv.conf
    • 编辑文件(需root权限):sudo nano /etc/resolv.conf
    • 添加或修改DNS服务器,
      nameserver 8.8.8.8  # Google DNS
      nameserver 8.8.4.4  # 备用DNS
      nameserver 223.5.5.5  # 阿里DNS
    • 保存后立即生效,但重启网络服务(如sudo systemctl restart NetworkManager)或系统后会恢复默认配置。
  2. 使用nmcli命令(NetworkManager工具)
    若系统使用NetworkManager(如Ubuntu、CentOS 7+),可通过nmcli临时修改DNS:

    sudo nmcli connection show  # 查看当前连接名称
    sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 8.8.4.4"  # 设置DNS
    sudo nmcli connection down "连接名称" && sudo nmcli connection up "连接名称"  # 重启连接

    此方法修改后仅在当前会话有效,NetworkManager重启后可能恢复。

    Linux命令行如何设置DNS?-图2
    (图片来源网络,侵删)

永久修改DNS配置

永久配置需根据系统使用的网络管理工具选择对应方法,确保重启后配置不丢失。

基于NetworkManager的系统(Ubuntu 18.04+、CentOS 7+、Fedora等)

  • 使用nmcli命令

    sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 223.5.5.5"  # 设置DNS
    sudo nmcli connection modify "连接名称" ipv4.ignore-auto-dns yes  # 忽略DHCP分配的DNS
    sudo nmcli connection up "连接名称"  # 重启连接使配置生效

    验证配置:nmcli connection show "连接名称" | grep ipv4.dns

  • 修改NetworkManager配置文件
    编辑/etc/NetworkManager/NetworkManager.conf,在[main]段落添加:

    Linux命令行如何设置DNS?-图3
    (图片来源网络,侵删)
    dns=none

    然后编辑/etc/resolv.conf,将其设为只读(防止被覆盖):

    sudo chattr +i /etc/resolv.conf

    最后重启NetworkManager:sudo systemctl restart NetworkManager

基于systemd-networkd的系统(Debian 10+、Ubuntu 20.04+等)

使用netplannetworkd配置文件:

  • 编辑网络配置文件(如/etc/netplan/01-netcfg.yaml):
    network:
      version: 2
      ethernets:
        enp0s3:  # 网卡名称
          dhcp4: no
          addresses: [192.168.1.100/24]  # IP地址(可选)
          nameservers:
            addresses: [8.8.8.8, 223.5.5.5]
            search: [example.com]  # 域名后缀(可选)

    应用配置:sudo netplan apply

基于传统ifupdown的系统(Debian 9、Ubuntu 16.04等)

编辑/etc/network/interfaces文件:

auto enp0s3
iface enp0s3 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8 223.5.5.5

重启网络服务:sudo systemctl restart networking

不同发行版的DNS配置对比

发行版系列 主要网络工具 永久配置命令/文件 临时配置方法
Ubuntu/Debian NetPlan/NetworkManager /etc/netplan/*.yamlnmcli 直接编辑/etc/resolv.conf
CentOS/RHEL 7+ NetworkManager nmcli/etc/NetworkManager/ nmcli临时修改
Arch Linux systemd-networkd /etc/systemd/networkd/*.network resolvectl命令
openSUSE NetworkManager YaST工具或nmcli nmcli临时修改

常见问题排查

  1. DNS修改后不生效

    • 检查/etc/resolv.conf是否被NetworkManager或其他服务覆盖,可通过chattr +i锁定文件。
    • 重启网络服务或系统:sudo systemctl restart networkingreboot
    • 验证DNS解析:nslookup example.comdig example.com
  2. 多网卡环境DNS冲突
    若系统有多张网卡,可能导致DNS解析混乱,可通过ip route检查默认路由,或为指定网卡配置DNS:

    sudo nmcli connection modify "enp0s3" ipv4.dns "8.8.8.8"

相关问答FAQs

Q1: 为什么修改/etc/resolv.conf后重启系统会恢复默认配置?
A: 在现代Linux系统中,/etc/resolv.conf通常由NetworkManager、systemd-resolved或DHCP客户端自动管理,直接编辑该文件会被后续服务覆盖,导致配置失效,需通过对应网络管理工具(如nmclinetplan)永久修改,或锁定文件(chattr +i)防止覆盖。

Q2: 如何为特定域名配置自定义DNS服务器?
A: 可通过/etc/hosts文件实现本地域名解析,或使用systemd-resolvedDNS-over-TLS功能,在/etc/hosts中添加:

168.1.50  internal.example.com

若需为特定域名设置不同DNS,可配置split DNS(通过nmcliipv4.dns-optionsnetplannameservers.domains字段)。

分享:
扫描分享到社交APP
上一篇
下一篇