菜鸟科技网

Linux命令行如何正确设置DNS?

在Linux命令行中设置DNS是系统管理和网络配置中的常见任务,正确的DNS配置直接影响域名解析效率和网络访问能力,本文将详细介绍通过命令行修改DNS配置的多种方法,包括临时修改、永久配置以及不同Linux发行版的差异处理,同时结合实例和表格说明操作步骤,最后附上常见问题解答。

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

临时修改DNS配置

临时修改DNS配置适用于测试场景或重启后无需保留的配置,主要涉及resolv.conf文件和nameserver命令。

  1. 直接编辑/etc/resolv.conf文件
    该文件是Linux系统传统的DNS解析配置文件,格式简单,包含nameserversearchdomain等字段。

    sudo nano /etc/resolv.conf

    在文件中添加或修改nameserver行,

    nameserver 8.8.8.8    # Google DNS
    nameserver 114.114.114.114  # 中国电信DNS

    保存后立即生效,但重启网络服务或系统后可能被重置。

    Linux命令行如何正确设置DNS?-图2
    (图片来源网络,侵删)
  2. 使用nmcli命令(NetworkManager管理)
    若系统使用NetworkManager(如Ubuntu、CentOS 7+),可通过nmcli临时修改:

    sudo nmcli connection show "连接名称" | grep ipv4.dns
    sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 114.114.114.114"
    sudo nmcli connection up "连接名称"

    连接名称”可通过nmcli connection show查看,此方法仅在NetworkManager运行时有效。

永久修改DNS配置

永久配置需根据Linux发行版和使用的网络管理工具选择不同方法,避免重启后失效。

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

  • 通过nmcli命令

    Linux命令行如何正确设置DNS?-图3
    (图片来源网络,侵删)
    # 查看当前连接
    nmcli connection show
    # 修改DNS并自动配置
    sudo nmcli connection modify "ens33" ipv4.ignore-auto-dns yes ipv4.dns "8.8.8.8 1.1.1.1"
    # 重启连接
    sudo nmcli connection up "ens33"

    参数说明:ipv4.ignore-auto-dns忽略DHCP分配的DNS,ipv4.dns指定DNS服务器。

  • 通过图形界面(可选)
    执行nm-connection-editor,在连接属性中切换到“IPv4设置”,将“DNS服务器”手动添加并保存。

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

此类系统使用netplansystemd-networkd管理网络。

  • 使用netplan配置
    编辑/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, 114.114.114.114]
            search: [example.com]

    应用配置:

    sudo netplan apply
  • 使用systemd-networkd
    创建或编辑/etc/systemd/network/ens33.network

    [Match]
    Name=ens33
    [Network]
    DNS=8.8.8.8 114.114.114.114
    DHCP=no
    Address=192.168.1.100/24
    Gateway=192.168.1.1

    重启网络服务:

    sudo systemctl restart systemd-networkd

传统SysVinit系统(CentOS 6、Debian 9等)

此类系统使用ifcfg文件配置网络。

  • 编辑/etc/sysconfig/network-scripts/ifcfg-ens33
    DEVICE=ens33
    BOOTPROTO=static
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=114.114.114.114
    ONBOOT=yes

    重启网络服务:

    sudo service network restart

使用resolv.conf的永久绑定(不推荐)

部分系统(如Alpine Linux)允许通过chattr锁定/etc/resolv.conf

sudo chattr +i /etc/resolv.conf

此方法会阻止系统自动覆盖文件,但可能导致DHCP分配的DNS失效,需谨慎使用。

验证DNS配置

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

# 查看当前DNS配置
cat /etc/resolv.conf
# 测试域名解析
nslookup www.baidu.com
ping www.google.com

若解析失败,检查网络服务状态(systemctl status NetworkManagerservice network status)及防火墙规则。

不同Linux发行版的DNS配置差异

下表总结了主流发行版的推荐配置方法:

发行版系列 推荐工具 配置文件/命令示例 重启命令
Ubuntu/Debian Netplan/nmcli /etc/netplan/*.yamlnmcli netplan apply
CentOS/RHEL 7+ NetworkManager nmcli connection modify nmcli connection up
CentOS 6 ifcfg文件 /etc/sysconfig/network-scripts/ifcfg-* service network restart
Arch Linux systemd-networkd /etc/systemd/network/*.network systemctl restart systemd-networkd
Alpine Linux 直接编辑resolv.conf /etc/resolv.conf 无需重启(需锁定文件)

相关问答FAQs

Q1: 修改DNS后仍无法解析域名,可能的原因有哪些?
A: 可能的原因包括:

  1. DNS服务器不可达(检查网络连通性:ping 8.8.8.8);
  2. 防火墙阻止DNS端口(如ufw规则需允许53端口);
  3. 系统缓存了旧的DNS记录(尝试清除缓存:sudo systemd-resolve --flush-cachessudo /etc/init.d/nscd restart);
  4. 配置文件路径错误(如nmcli修改时未指定正确的连接名称)。

Q2: 如何为特定域名设置自定义DNS解析(如内网域名)?
A: 可通过以下方法实现:

  1. /etc/hosts文件中添加静态映射:
    sudo nano /etc/hosts
    192.168.1.50  internal.example.com
  2. 使用searchdomain字段(在resolv.conf或Netplan配置中):
    nameservers:
      addresses: [8.8.8.8]
      search: [internal.example.com]
  3. 部署内部DNS服务器(如BIND),并将客户端指向该服务器。

通过以上方法,可根据实际需求灵活选择Linux命令行下的DNS配置方式,确保网络访问的稳定性和高效性。

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