Linux系统如何开启DNS服务?

在Linux系统中,DNS(域名系统)配置是网络通信的基础,它负责将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,正确配置DNS不仅能确保网络连接正常,还能优化访问速度、提升安全性,本文将详细介绍Linux系统中查看、修改及排查DNS配置的多种方法,涵盖命令行工具、配置文件操作及不同发行版的差异处理。

linux计算机如何打开dns

DNS在Linux中的作用与基础概念

DNS相当于互联网的“电话簿”,当用户在浏览器输入域名时,计算机会通过DNS查询获取对应的IP地址,进而建立连接,Linux系统中,DNS配置通常存储在特定的配置文件中,由系统或网络管理工具(如NetworkManager、systemd-resolved)读取并应用,常见的DNS解析流程包括:检查本地hosts文件→查询系统DNS配置→向DNS服务器发起请求,若配置错误,可能导致域名无法解析、网络连接异常等问题。

查看当前DNS配置的方法

在排查问题或确认设置时,首先需要了解当前系统的DNS配置状态,以下是几种常用查看方法:

使用systemd-resolved查询(现代Linux系统)

较新的Linux发行版(如Ubuntu 18.04+、CentOS 8+)默认使用systemd-resolved服务管理DNS,通过以下命令可查看全局DNS配置:

resolvectl status

输出示例会显示当前DNS服务器地址(如DNS Servers: 8.8.8.8 8.8.4.4)、域名搜索列表等信息。

检查/etc/resolv.conf文件

/etc/resolv.conf是传统的DNS配置文件,直接记录了系统使用的DNS服务器,使用catless查看:

cat /etc/resolv.conf
```  通常包含`nameserver`行(如`nameserver 114.114.114.114`),指定DNS服务器IP;`search`行定义域名后缀(如`search localdomain`);`domain`行指定默认域名。
#### 3. 使用`nmcli`命令(NetworkManager环境)
若系统使用NetworkManager(如Ubuntu桌面版、RHEL/CentOS),可通过`nmcli`查看网络接口的DNS配置:  
```bash
nmcli dev show | grep "DNS"

或针对特定接口(如eth0):

nmcli con show "eth0" | grep "ipv4.dns"

使用netstatss检查DNS监听状态

通过以下命令可确认DNS服务是否在监听(如systemd-resolved默认监听0.0.53:53):

ss -tuln | grep 53

netstat -tuln | grep 53

不同查看方法的适用场景对比

方法 适用场景 优点 缺点
resolvectl status systemd-resolved管理的现代系统 信息全面,包含域名搜索等细节 依赖systemd-resolved服务
/etc/resolv.conf 所有Linux系统(传统或现代) 直接查看核心配置 部分系统可能被NetworkManager覆盖
nmcli NetworkManager管理的网络 关联网络接口,适合多网卡环境 需安装NetworkManager
ss/netstat 检查DNS服务监听状态 确认服务是否运行 仅显示监听,不包含具体DNS地址

修改DNS配置的方法

根据使用场景(临时修改、永久修改)和发行版差异,DNS配置方法可分为以下几类:

临时修改(重启后失效)

仅用于临时测试或快速切换DNS,重启系统或网络服务后恢复原配置:

  • 方法1:直接编辑/etc/resolv.conf
    使用vimnano打开文件,修改nameserver行:

    sudo vim /etc/resolv.conf

    添加或修改为:

    nameserver 8.8.8.8
    nameserver 1.1.1.1

    保存后立即生效,但NetworkManager可能覆盖该文件(需结合方法3锁定)。

  • 方法2:使用resolvectl命令
    为全局或特定域设置DNS:

    # 设置全局DNS服务器
    sudo resolvctl dns 8.8.8.8 1.1.1.1
    # 为特定域设置DNS(如example.com)
    sudo resolvctl domain example.com 192.168.1.1

永久修改(重启后生效)

根据网络管理工具不同,永久修改方法分为以下情况:

(1)NetworkManager管理网络(Ubuntu桌面版、RHEL/CentOS等)

  • 使用nmcli命令(推荐)
    为指定网络连接(如eth0)设置DNS:

    linux计算机如何打开dns

    # 设置静态DNS(覆盖原有配置)
    sudo nmcli con mod "eth0" ipv4.dns "8.8.8.8 1.1.1.1"
    # 更新连接并重启网络
    sudo nmcli con down "eth0" && sudo nmcli con up "eth0"

    若需自动获取DNS(DHCP分配),确保ipv4.ignore-auto-dnsno

    sudo nmcli con mod "eth0" ipv4.ignore-auto-dns no
  • 修改NetworkManager配置文件
    编辑/etc/NetworkManager/NetworkManager.conf,在main段添加:

    [main]
    dns=none

    然后创建/etc/NetworkManager/dnsmasq.d.conf,指定DNS:

    [main]
    dns=dnsmasq

    并在/etc/NetworkManager/dnsmasq.d/01-dns.conf中添加:

    server=8.8.8.8
    server=1.1.1.1

    重启NetworkManager服务:

    sudo systemctl restart NetworkManager

(2)Netplan管理网络(Ubuntu Server 18.04+等)

编辑Netplan配置文件(如/etc/netplan/01-netcfg.yaml),在对应网络接口下添加nameservers

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: yes
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
        search: [localdomain]

应用配置:

sudo netplan apply

(3)systemd-networkd管理网络(CentOS Stream、Debian等)

编辑网络配置文件(如/etc/systemd/network/eth0.network),添加DNS=字段:

[Match]
Name=eth0
[Network]
DHCP=yes
DNS=8.8.8.8 1.1.1.1

重启网络服务:

sudo systemctl restart systemd-networkd

(4)直接修改/etc/resolv.conf并锁定(不推荐)

若需直接使用/etc/resolv.conf,需通过chattr锁定文件防止被NetworkManager覆盖:

sudo chattr +i /etc/resolv.conf

解锁时使用:

sudo chattr -i /etc/resolv.conf

不同发行版永久修改DNS方法对比

发行版/环境 推荐工具 配置文件/命令示例 注意事项
Ubuntu Desktop NetworkManager (nmcli) nmcli con mod "eth0" ipv4.dns "8.8.8.8" 需重启网络连接
Ubuntu Server Netplan /etc/netplan/01-netcfg.yaml 应用配置需运行netplan apply
RHEL/CentOS 7+ NetworkManager 同Ubuntu Desktop 部分版本需安装NetworkManager
CentOS Stream systemd-networkd /etc/systemd/network/eth0.network 需启用systemd-networkd服务
Debian systemd-networkd 同CentOS Stream 老版本可能使用ifupdown

DNS常见问题排查

即使配置正确,DNS解析也可能因多种问题失败,以下是排查步骤:

测试DNS解析是否正常

使用nslookupdigping测试域名解析:

  • nslookup(基础查询):

    nslookup www.baidu.com

    输出应包含服务器地址(Server: 127.0.0.53)和解析结果(Address: 182.61.200.7)。

  • dig(详细查询):

    linux计算机如何打开dns

    dig www.baidu.com

    查看ANSWER SECTION确认IP地址是否返回。

  • ping(连通性测试):

    ping www.baidu.com

    若能解析出IP但ping不通,可能是网络或防火墙问题。

检查DNS服务状态

  • 若使用systemd-resolved,确认服务运行:

    systemctl status systemd-resolved

    未运行则启动并设为开机自启:

    sudo systemctl enable --now systemd-resolved
  • 若使用dnsmasq(NetworkManager的DNS缓存服务),检查状态:

    systemctl status dnsmasq

检查/etc/resolv.conf

确保/etc/resolv.conf可被用户读取(权限通常为644),且nameserver行格式正确(无多余空格或特殊字符),若文件被锁定(chattr +i),需先解锁再修改。

检查防火墙与SELinux

防火墙(如ufwfirewalld)可能阻止DNS查询(端口53),临时关闭防火墙测试:

sudo ufw disable  # Ubuntu
sudo firewall-cmd --reload  # CentOS

若SELinux启用,检查是否阻止DNS服务:

sudo getenforce

若为Enforcing,可临时设为Permissive测试:

sudo setenforce 0

相关问答FAQs

Q1:修改DNS配置后不生效怎么办?
A:首先确认修改方式是否为“永久修改”(如nmcli需重启网络连接,Netplan需运行netplan apply),其次检查/etc/resolv.conf是否被NetworkManager覆盖(可通过chattr +i锁定或使用NetworkManager的配置工具),若仍不生效,尝试重启网络服务(systemctl restart NetworkManagersystemctl restart systemd-networkd),并检查防火墙或SELinux是否阻止DNS查询。

Q2:如何设置自定义DNS域名搜索列表?
A:域名搜索列表用于简化域名解析(如输入test会自动解析为test.localdomain),可通过以下方式设置:

  • NetworkManager:使用nmcli添加搜索域:
    sudo nmcli con mod "eth0" ipv4.dns-search "localdomain,example.com"
  • Netplan:在配置文件中添加search字段:
    nameservers:
      search: [localdomain, example.com]
  • systemd-resolved:使用resolvectl
    sudo resolvctl domain eth0 localdomain example.com

    修改后重启网络服务使配置生效。

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

(0)
酷番叔酷番叔
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信