5154

Good Luck To You!

Linux如何编辑DNS的配置

编辑 /etc/resolv.conf 文件,添加 nameserver 行(如 nameserver 8.8.8.8

Linux系统DNS配置详解

DNS基础概念

域名系统(DNS)是互联网的电话簿,负责将人类可读的域名转换为机器可识别的IP地址,在Linux系统中,正确配置DNS服务器地址是保证网络访问正常的关键,本文将详细介绍Linux系统DNS配置的多种方法及注意事项。


主流DNS配置方法对比

配置方式 适用场景 配置文件路径 是否需要重启
/etc/resolv.conf 临时配置,快速生效 /etc/resolv.conf 立即生效
NetworkManager 图形化系统首选 /etc/NetworkManager/config 需要重启网络服务
传统网络脚本 Debian/Ubuntu等传统配置文件系统 /etc/network/interfaces 需要重启网络服务
dhclient DHCP客户端自动获取 /etc/dhcp/dhclient.conf 需要重启网络服务
systemdresolved 现代systemd系统默认DNS解析器 /etc/systemd/resolved.conf 需要重启systemdresolved

核心配置文件详解

/etc/resolv.conf 文件

nameserver 8.8.8.8    # Google公共DNS
nameserver 8.8.4.4    # 备用DNS
search example.com    # 本地域名后缀
options ndots:2        # 少于2个点的域名不使用搜索域

注意事项

Linux如何编辑DNS的配置

  • 该文件优先级最高,会被大多数程序优先读取
  • 网络管理器可能会自动覆盖此文件(需禁用NetworkManager管理)
  • 推荐至少配置2个可靠的DNS服务器
  • 注释行以开头,支持空行分隔不同配置段

NetworkManager配置(适用于GNOME桌面)

# 通过nmcli命令配置:
nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod "Wired connection 1" ipv4.ignoreautodns yes
# 通过GUI配置:
网络设置 > 选择连接 > IPv4设置 > DNS服务器

优势

  • 可视化操作界面
  • 自动保存配置
  • 支持多连接独立配置
  • 可设置自动获取DNS(Automatic)

高级配置方法

使用systemdresolved(现代系统推荐)

# 编辑配置文件
sudo nano /etc/systemd/resolved.conf
# 添加以下内容:
[Resolve]
DNS=8.8.8.8 1.1.1.1
Domains=~.example.com
DNSOverTLS=true
DNSStubListener=yes

特性说明

Linux如何编辑DNS的配置

  • 支持DNSoverTLS安全加密
  • 可配置全局DNS解析策略
  • 与systemd服务深度集成
  • 需要重启服务:sudo systemctl restart systemdresolved

DHCP客户端配置(自动获取DNS)

# 编辑dhclient配置文件
sudo nano /etc/dhcp/dhclient.conf
# 添加以下内容:
append domainnameservers 8.8.8.8;
request subnetmask, broadcastaddress, timeoffset, domainname, domainnameservers;

工作原理

  1. 向DHCP服务器请求DNS配置
  2. 自动追加自定义DNS服务器
  3. 支持多个接口独立配置
  4. 需要重启网络服务生效

DNS验证与排错

验证工具使用

# 测试DNS解析
host www.baidu.com           # 显示解析结果和响应时间
dig +trace www.google.com    # 追踪完整解析路径
nslookup type=mx gmail.com  # 查询邮件交换记录
# 查看当前DNS配置
cat /etc/resolv.conf        # 显示当前使用的DNS服务器
systemdresolve status    # 查看systemdresolved状态
nmcli dev show | grep DNS    # 显示NetworkManager配置的DNS

常见问题排查

现象 可能原因 解决方案
无法解析域名 DNS服务器配置错误/不可达 更换公共DNS(如114.114.114.114)
部分网站无法访问 DNS缓存污染 清除缓存:sudo systemdresolve flushcaches
解析速度慢 DNS服务器响应延迟 更换更快的DNS服务商
间歇性解析失败 网络不稳定或DNS服务器负载过高 增加备用DNS服务器

特殊场景配置方案

情景1:搭建本地私有DNS服务器

# 安装dnsmasq:
sudo apt install dnsmasq    # Debian/Ubuntu
sudo yum install dnsmasq    # CentOS/RHEL
# 配置文件示例:
sudo nano /etc/dnsmasq.conf
# 添加以下内容:
server=8.8.8.8          # 上游DNS服务器
address=/corp.example/192.168.1.1 # 特定域名转发
noresolv               # 不使用系统resolv.conf

情景2:配置容器DNS(以Docker为例)

# 修改Docker daemon配置:
sudo nano /etc/docker/daemon.json
# 添加以下内容:
{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "dnsoptions": ["ndots:2"]
}
# 重启Docker服务:
sudo systemctl restart docker

常见问题与解答(FAQ)

Q1:如何永久修改DNS配置而不被网络管理器覆盖? A1:需要根据系统类型采取不同措施:

Linux如何编辑DNS的配置

  • 对于使用NetworkManager的系统,应通过nmcli命令或GUI进行配置
  • 禁用NetworkManager对特定接口的管理:nmcli dev set eth0 managedfalse
  • 对于systemd系统,建议使用/etc/systemd/resolved.conf进行全局配置
  • 确保/etc/resolv.conf文件权限正确(chmod 644)

Q2:为什么修改了DNS配置但仍然无法解析域名? A2:可能原因及解决方案:

  1. DNS缓存未更新:执行sudo systemdresolve flushcaches清除缓存
  2. 防火墙拦截DNS请求:检查firewalld/iptables规则,允许UDP 53端口
  3. 网络接口未重启:执行sudo systemctl restart networkingsudo ifdown eth0; sudo ifup eth0
  4. DNS服务器不可达:使用ping 8.8.8.8测试基础连通性
  5. SELinux限制:临时关闭SELinux验证sudo setenforce 0

发表评论:

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

«    2025年6月    »
1
2345678
9101112131415
16171819202122
23242526272829
30
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.