Ubuntu 20.04 DNS解析原理, 解决resolv.conf被覆盖问题

------------------------------------------------------------------
author: hjjdebug
date: 2023年 11月 09日 星期四 14:01:11 CST
description: Ubuntu 20.04 DNS解析原理, 解决resolv.conf被覆盖问题
------------------------------------------------------------------
问题:
开机后不能上网, ping baidu.com 不能ping 通,
错误为:
ping: baidu.com: 域名解析暂时失败
修改 /etc/resolv.conf 文件,添加
nameserver 8.8.8.8

再ping baidu.com, 可以ping 通, 可以正常上网.
但是,当重新启动机器后, /etc/resolv.conf 文件被覆盖为旧的文件,
要想上网, 还需要重新修改文件内容.

解决问题的方法很简单,只需要看第7步即可.即修改/etc/systemd/resolved.conf,添加DNS=8.8.8.8
想了解其工作原理,可阅读本博客! 关注以下内容:
1. 域名解析服务是什么? systemd-resolved.service
2. 它起了什么作用? 它将127.0.0.53的请求转发给后端服务请求
3. 后端服务请求服务器是哪个文件? /run/systemd/resolve/resolv.conf
4. 该文件是如何生成的, 开机时由 /etc/systemd/resolved.conf 形成
5. 域名解析的过程?  参考步骤8, 由127.0.0.53转发给后端server
6. 域名解析工具resolvectl 的使用


这里记录一下我解决问题的过程:
解决问题的思路:
1. 查寻 /etc/resolv.conf, 是一个文件链接.
$ls -l /etc/resolv.conf
resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

在 /run/systemd/resolve 目录, 有2个文件, 它们每次开机时都会重新生成(看文件时间)
-rw-r--r--  1 systemd-resolve systemd-resolve 584 11月  9 11:13 resolv.conf
-rw-r--r--  1 systemd-resolve systemd-resolve 717 11月  9 11:13 stub-resolv.conf
所以不能直接修改这两个文件, 因为它们会开机重新生成. 旧内容被覆盖.

而且你用vim 打开 /etc/resolv.conf 文件, 也可以看到如下提示:
This file is managed by man:systemd-resolved(8). Do not edit.

可见该文件是由systemd-resolved 服务来管理,不要编辑.

2. 查询域名解析服务名称
$ systemctl status |grep resolv
 
  ├─systemd-resolved.service
                └─1254 /lib/systemd/systemd-resolved


3. 查询域名解析服务状态
$ systemctl status systemd-resolved
● systemd-resolved.service - Network Name Resolution
     Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; ven>
     Active: active (running) since Thu 2023-11-09 11:13:47 CST; 11min ago
       Docs: man:systemd-resolved.service(8)
             https://www.freedesktop.org/wiki/Software/systemd/resolved
             https://www.freedesktop.org/wiki/Software/systemd/writing-network->
             https://www.freedesktop.org/wiki/Software/systemd/writing-resolver>
   Main PID: 1254 (systemd-resolve)
     Status: "Processing requests..."
      Tasks: 1 (limit: 9103)
     Memory: 8.6M
     CGroup: /system.slice/systemd-resolved.service
             └─1254 /lib/systemd/systemd-resolved


4. 查找服务配置文件.
 
  用lsof -p 1254 只能查看它当前打开的文件,并不能判定它的配置文件是谁.

 用fswatch 监视 /etc/systemd 目录, -t 是打印时间, -x 是打印事件
 $fswatch -t -x /etc/systemd

 然后执行 停止,启动 systemd-resolved 服务
 $ sudo systemctl stop systemd-resolved
 $ sudo systemctl start systemd-resolved
 监视到如下事件:
 2023年11月09日 星期四 11时34分22秒 /etc/systemd/resolved.conf PlatformSpecific
 说明它访问了 /etc/systemd/resolved.conf 文件, 这也仅仅表示打开服务会访问这个文件,

 通过查找网络资源, 确认还是要手工修改/etc/systemd/resolved.conf 这个文件


5. 编辑服务配置文件 /etc/systemd/resolved.conf
打开这个文件, 看到是一个空文件, 由若干行但都被# 号注释着, 把第一行DNS 的注释号去掉,
写成:
DNS=8.8.8.8

这个文件改动后, 开机会依照它重新生成 /run/systemd/resolve/resolv.conf 文件

6. 验证
重启机器,看到/run/systemd/resolve 目录下新生成的文件
-rw-r--r--  1 systemd-resolve systemd-resolve 584 11月  9 12:42 resolv.conf
-rw-r--r--  1 systemd-resolve systemd-resolve 717 11月  9 12:42 stub-resolv.conf
查看内容: stub-resolv.conf 没有改变
resolv.conf 内容已经添加了:
nameserver 8.8.8.8


7. 结论: 其实只要一步修改
修改 /etc/systemd/resolved.conf, 添加DNS=8.8.8.8
验证: 开机后,ping baidu.com 可以ping 通


8. systemd-resolved 服务起到了什么作用?
在没有systemd-resolved 服务的机器上,域名是这样解析的

    1.从dns缓存里查找域名与ip的映射关系
    2.从/etc/hosts里查找域名与ip的映射关系
    3. 从/etc/resolv.conf里查找dns server,并发起解析请求
    /etc/resolv.conf的内容一般如下:
    nameserver 8.8.8.8


在有systemd-resolved 服务的机器上,域名还是这样解析的
    1.从dns缓存里查找域名与ip的映射关系
    2.从/etc/hosts里查找域名与ip的映射关系
    3. 从/etc/resolv.conf里查找dns server,并发起解析请求
    但是, 此时/etc/resolv.conf 的内容如下:
    nameserver 127.0.0.53
    options edns0 trust-ad

    使得本地解析请求全部发到127.0.0.53

    然后systemd-resolved再根据/run/systemd/resolve/resolv.conf里面的dns server去发起请求
    /run/systemd/resolve/resolv.conf记录的就是真正的后端dns server

9. 域名解析工具 resolvectl

$ ls -l systemd-resolve
lrwxrwxrwx 1 root root 10 3月   2  2023 systemd-resolve -> resolvectl*

systemd-resolve 就是resolvectl 的软链接.

resolvectl 是 systemd 包中的工具:
$ which resolvectl
/bin/resolvectl

$dpkg -S /usr/bin/resolvectl
systemd: /usr/bin/resolvectl

resolvectl 的使用方法:
 $ resolvectl -h
 $ resolvectl status
 $ resolvectl query baidu.com
 $ resolvectl query www.baidu.com

 $ resolvectl flush-caches

$ resolvectl statistics

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(三)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)

问题描述 当尝试在 Visual Studio Code 中登录 GitHub Copilot 插件时,会出现报错的情况,如下图所示: 尽管在浏览器中成功授权了 GitHub 账户,但在返回 VSCode 后仍然报错,如下图所示: 同时,在…

PHP中传值与引用的区别

在PHP中,变量的传递方式主要分为传值和传引用两种。这两种方式在操作中有一些重要的区别,影响着变量在函数调用或赋值操作中的表现。下面详细解释一下这两种传递方式的区别。 传值(By Value) 传值是指将变量的值复制一份传递给函…

OpenAtom OpenHarmony三方库创建发布及安全隐私检测

OpenAtom OpenHarmony三方库(以下简称“三方库”或“包”),是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHarmony应用。三方库根据其开发语言分为2种,一种是使用JavaScript和TypeScr…

分成互质组——DFS

给定 n 个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组? 输入格式 第一行是一个正整数 n。 第二行是 n 个不大于10000的正整数。 输出格式 一个正整数,即最少需要的组数。 数据范围 1≤n≤10 输入样例&am…

React【异步逻辑createAsyncThunk(一)、createAsyncThunk(二)、性能优化、createSelector】(十二)

文章目录 异步逻辑 createAsyncThunk(一) createAsyncThunk(二) 性能优化 createSelector 异步逻辑 //Product.js const onAdd () > {const name nameRef.current.value// 触发添加商品的事件dispatch(addProduct({name…

3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…

线性代数(二)| 行列式性质 求值 特殊行列式 加边法 归纳法等多种方法

文章目录 1. 性质1.1 重要性质梳理1.1.1 转置和初等变换1.1.2加法行列式可拆分1.1.3 乘积行列式可拆分 1.2 行列式性质的应用1.2.1 简化运算1.2.2 将行列式转换为(二)中的特殊行列式 2 特殊行列式2.1 上三角或下三角行列式2.2 三叉行列式2.3 行列式行和&…

VueCli 自定义创建项目及配置

一、VueCli 自定义创建项目 1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-exp-mobile选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually select features 选自定义手动…

生活污水处理一体化处理设备有哪些

生活污水处理一体化处理设备有多种类型,包括但不限于以下几种: 鼓风机:提供曝气系统所需的气流。潜水污水提升泵:将污水从低处提升到高处。旋转式滚筒筛分机:对污水中的悬浮物进行分离和筛选。回旋式格栅:…

100天精通风控建模(原理+Python实现)——第6天:风控建模中离散化是什么?

风控模型已在各大银行和公司都实际运用于业务,用于营销和风险控制等。    之前已经阐述了100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?    100天精通风控建模(原理+Python实现)——第2天:风控建模有什么目的?    100天精通风控建模(原理+Python实现…

ARM Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程&#xf…

AE-水晶/玻璃相框的制作

目录 一、新建合成“蓝色相框” 二、新建蓝色水晶/玻璃相框 三、为蓝色相框添加效果

【计算机网络笔记】网络层服务模型——虚电路网络

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Arduino驱动A01NYUB防水超声波传感器(超声波传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、通信协议 4、驱动程序 A01NYUB超声波测距传感器是一款通过发射和接收机械波来感应物体距离的电子传感器。该款产品具有监测距离远、范围广、防水等优点,且具有一定的穿透能力(烟雾、粉尘等)。该产品带有可拆卸式喇叭口,安…

ubuntu(18.04)中安装open babel docker镜像并在php项目中调用容器中的obabel命令解析结果使用

使用软件: obabel镜像:informaticsmatters/obabel docker:http:// https://www.docker.com/ 安装docker #卸载旧版本sudo apt-get remove docker docker-engine docker-ce docker.io#更新索引包sudo apt-get update#安装 apt 依赖包&…

图的表示与基础--Java

1.图的基础知识 该图片来自于&#xff1a; https://b23.tv/KHCF2m6 2.稀疏图与稠密图 G(V,E)&#xff1a;V顶点个数&#xff0c;E边的个数 稀疏图&#xff1a;E<<V 一般用邻接表表示(数组链表) 稠密图&#xff1a;E接近V 一般用邻接矩阵表示&#xf…

为什么要有__init__.py这个文件?(一篇文章带你详细了解)

__init__.py 文件在Python中有着特殊的意义&#xff0c;尤其是在定义包&#xff08;package&#xff09;时。这个文件的存在有几个主要目的&#xff1a; 将目录标记为Python包&#xff1a;最重要的作用就是它告诉Python解释器&#xff0c;包含这个文件的目录应该被视作一个Pyth…

中断处理机制解析

要处理中断&#xff0c;需要有一个中断处理函数。定义如下&#xff1a; irqreturn_t (*irq_handler_t)(int irq, void * dev_id);/*** enum irqreturn* IRQ_NONE interrupt was not from this device or was not handled* IRQ_HANDLED interrupt was handled by this de…

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…