ubuntu的dns设置问题

背景说明

在Ubuntu中使用netplan配置dns的时候发现配置的dns总是不生效

内容介绍

1、配置文件说明

发现使用了systemd-resolved 的系统的dns配置和下面四个文件有关系。

/etc/resolv.conf
/etc/systemd/resolved.conf
/run/systemd/resolve/stub-resolv.conf
/run/systemd/resolve/resolv.conf

/etc/resolv.conf

  • 默认情况下,/etc/resolv.conf 应该是指向 /run/systemd/resolve/stub-resolv.conf 的符号链接。这意味着所有 DNS 查询会被转发到 systemd-resolved 的本地代理(127.0.0.53),然后 systemd-resolved 会根据 /run/systemd/resolve/resolv.conf 的配置进行实际的 DNS 解析。

/etc/systemd/resolved.conf

  • /etc/systemd/resolved.conf 是 systemd-resolved 的主要配置文件,用于定义 DNS 解析行为和选项。

/run/systemd/resolve/stub-resolv.conf

  • 用途:该文件用于本地 DNS 解析代理,指向 systemd-resolved 的本地 DNS 解析服务。
  • 内容:这个文件包含一个 127.0.0.53 的 DNS 服务器地址,指向 systemd-resolved 本地代理。
  • 符号链接:在典型的 systemd 配置中,/etc/resolv.conf 通常是一个符号链接,指向这个文件。这样,所有使用标准 /etc/resolv.conf 进行 DNS 解析的应用程序都会通过 systemd-resolved 进行解析.

/run/systemd/resolve/resolv.conf

  • 用途:该文件包含实际配置的 DNS 服务器地址列表,是 systemd-resolved 根据网络配置生成的。
  • 内容:这个文件包含了由 systemd-resolved 管理的 DNS 服务器的真实 IP 地址列表,以及搜索域。
  • 直接使用:你可以直接使用这个文件来查看 systemd-resolved 实际使用的 DNS 配置,但通常不会将 /etc/resolv.conf 直接链接到这个文件。
  • /run/systemd/resolve/resolv.conf 是 systemd-resolved 根据这些配置动态生成的运行时文件,反映了当前系统正在使用的 DNS 服务器和其他相关设置。

2、systemd-resolved介绍

systemd-resolved 是 systemd 套件的一部分,用于处理 DNS 解析和其他网络名称解析任务。它提供了一种统一的、现代化的方式来管理和处理 DNS 请求,并具有以下功能:
systemd-resolved 的功能

  • DNS 缓存:它可以缓存 DNS 查询结果,提高解析速度并减少重复查询。
  • 多重 DNS 解析:支持从多个 DNS 服务器进行解析,并能根据不同的域名使用不同的 DNS 服务器。
  • DNS-over-TLS (DoT):支持加密的 DNS 解析请求,提高隐私和安全性。
  • LLMNR 和 mDNS:支持本地链路多播名称解析(LLMNR)和多播 DNS(mDNS),使得局域网内的设备可以互相发现。
  • DNS 代理:提供本地 DNS 解析代理,通过 127.0.0.53 地址进行本地解析。
  • DNSSEC:支持 DNS 安全扩展(DNSSEC),确保 DNS 数据的完整性和来源验证。

使用 systemd-resolved 的操作系统
systemd-resolved 被许多基于 Linux 的操作系统所使用,特别是那些采用 systemd 作为初始化系统的发行版。以下是一些常见的操作系统:

  • 从 Ubuntu 16.10 开始,systemd-resolved 默认启用,
  • Debian 9 (Stretch) 及以后版本,
  • Fedora 32 及以后版本默认启用 systemd-resolved,
  • 提供 systemd-resolved,用户可以手动启用,
  • 在 RHEL 8 和 CentOS 8 以及衍生版本中可以手动启用 systemd-resolved
<think>好的,我现在需要帮助用户在Ubuntu系统中配置DNS设置。用户之前的问题是关于DNS解析的,现在他们想知道如何在Ubuntu中进行配置。我需要参考用户提供的站内引用,并结合自己的知识来给出正确的步骤。 首先,用户给出的引用[1]提到了使用systemd-resolved服务,通过编辑/etc/systemd/resolved.conf文件来设置DNS。引用[2]提到了使用netplan配置YAML文件来设置DNS,而引用[3]看起来不太相关,可能包含了一些无关信息,比如面试资料,这部分可以忽略。 接下来,我需要确定Ubuntu系统中常用的DNS配置方法。通常有两种主要方式:使用Netplan(适用于较新的Ubuntu版本,如18.04及以上)和直接修改resolv.conf文件(传统方法,但可能不持久)。此外,systemd-resolved也是一个现代的方法,需要配置相关文件并重启服务。 用户可能希望了解多种方法,所以应该分步骤介绍不同的配置方式。需要确保步骤清晰,命令准确,并指出不同方法的适用场景。比如,Netplan是推荐的方式,因为它管理网络配置更系统化,而手动修改resolv.conf可能在重启后失效。 还要注意引用中的配置示例是否正确。例如,引用[1]中的DNS=223.5.5.5 223.6.6.6是否正确,以及是否需要取消注释该行。引用[2]中的netplan配置是否正确,比如缩进和语法是否正确,是否需要应用配置。 此外,用户可能需要知道如何验证DNS是否生效,比如使用nslookup或dig命令测试。同时,提醒用户可能的常见问题,比如缓存问题,需要刷新systemd-resolved或重启服务。 最后,确保回答结构清晰,分点说明,并包含验证步骤和注意事项,帮助用户全面理解并避免常见错误。</think>### Ubuntu系统DNS配置方法详解 根据您的需求,以下是Ubuntu系统中三种主流DNS配置方法,涵盖传统方案和现代管理工具(推荐优先使用Netplan方案): --- #### 一、Netplan配置方案(Ubuntu 18.04+ 推荐) 适用于使用网络管理服务的系统(如NetworkManager、systemd-networkd) 1. **编辑YAML配置文件** 打开对应网络接口配置文件(不同机器可能名称不同): ```bash sudo vim /etc/netplan/01-netcfg.yaml # 文件名可能为50-cloud-init.yaml等 ``` 添加`nameservers`字段: ```yaml network: version: 2 renderer: networkd # 或NetworkManager ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] # 主备DNS服务器 optional: true ``` > 注:严格遵循YAML缩进语法,冒号后需空格[^2] 2. **应用配置** ```bash sudo netplan apply ``` --- #### 二、systemd-resolved服务配置(Ubuntu 16.04+) 适用于使用systemd管理的系统 1. **修改全局配置** 编辑配置文件并取消注释DNS行: ```bash sudo vim /etc/systemd/resolved.conf ``` ```ini [Resolve] DNS=223.5.5.5 223.6.6.6 # 阿里云DNS FallbackDNS=8.8.8.8 1.1.1.1 Domains=~. ``` 2. **重启服务并创建符号链接** ```bash sudo systemctl restart systemd-resolved sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf ``` --- #### 三、传统resolv.conf配置(临时方案) ⚠️ 注意:重启后可能失效,需配合持久化配置 1. **直接修改文件** ```bash sudo vim /etc/resolv.conf ``` 添加DNS服务器: ```conf nameserver 8.8.8.8 nameserver 8.8.4.4 ``` 2. **防止覆盖配置**(可选) 若使用DHCP,修改`/etc/dhcp/dhclient.conf`: ```bash sudo sed -i 's/#prepend domain-name-servers/prepend domain-name-servers 8.8.8.8;/' /etc/dhcp/dhclient.conf ``` --- #### ▶️ 验证配置 ```bash # 查看生效DNS systemd-resolve --status | grep 'DNS Servers' -A2 # 或 nslookup google.com # 检查连通性 dig @8.8.8.8 google.com +short ``` --- #### 常见问题排查 1. **配置未生效** - 检查Netplan缩进是否正确(推荐使用`yamllint`工具) - 确认未同时启用多个网络管理服务(如networkd与NetworkManager冲突) 2. **DNS劫持检测** ```bash dig +short TXT whoami.ds.akahelp.net # 显示实际响应的DNS服务器 ``` 3. **缓存刷新** ```bash sudo systemd-resolve --flush-caches ``` --- **选择建议**:生产环境推荐使用Netplan方案,其配置可版本化管理且兼容云初始化工具。若需快速临时修改,可采用传统resolv.conf方法[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值