当前位置: 首页 > news >正文

01 dnsmasq 中 dns服务

前言

这里我们主要是 来看一下 dns 服务器这边的相关业务处理 

通常来说 在我们日常生活中 还是经常会需要使用 dns 的情况, 主要是更加友好的去给一个主机命名一个别名 

比如 现在我的应用在服务器 192.168.220.133 但是我不想记这个生硬的 ip, 我可能更期望记录一个域名, 比如 app.com, 这时候 就可以在 dns 服务器上面增加一个映射 app.com -> 192.168.220.133

比如 现在我的应用在服务器 192.168.220.133, 但是 之后服务可能会发生迁移更新到 10.60.50.16, 这种场景下面 我们仅仅需要在 dns 上面将 “app.com” -> 192.168.220.133 更新为 “app.com” -> 10.60.50.16 而客户端这边无需做任何改动 

我们这里调试的 dns 服务器主要是基于 dnsmasq 

 

在 /etc/hosts 中 映射配置如下, 存在一条 “master“ -> 10.60.50.16 的映射配置 

 

 

dns 的请求 和 响应

dns 请求这边如下, 这里我们看基于 udp 的 dns 数据交互 

dns 这边主要是包含了一个 txId, flags, questions, answterRRs, AuthorityRRs, AdditionalRRs, 以及具体的查询请求

具体的查询请求包含 待查询域名, type, class

 

dns 响应这边情况如下 

可以看到 dns响应 是在 dns请求 的数据基础上面扩展的, 增加了 Answer 的结构

Answer的结构 主要包含了 查询的域名, type, class, ttl, lengthOfIp, 目标ip

 

 

dns 的请求处理

这里就是查询 dns容器 维护的 hash_table, 其中维护的映射类似于 Map<String, String> hostname2Ip;

这里的查询也是类似于 java.util.HashMap 的查询, 找到匹配的记录之后, 返回该记录 

 

然后之后写出 dns 响应的数据是在这里 

header 即为一个 dns 的请求头信息, 在上面 dns 的请求的基础上面去掉了 请求体

这里传入了 nameoffset 表示域名相对于 dns 请求的偏移, ttl 等等相关信息 

传入的待写出的指针为 &ansp, 这个的处理在上面, 我们后面来看 

 

写出响应中的 nameOffset, type, class, ttl, lengthOfIp

 

写出 ip, 这个 for 之后, 会填充写出的 ip 的长度 

 

ansp 初始化的地方

首先是跳过了 dns_header 的部分, 然后接着是遍历每一个 dns请求体, 跳过该部分的 dns请求体 

这里处理完成之后, ansp 的最终的位置是在 整个dns请求的末尾

 

 

dnsmasq 中的 dns_header 结构体

id 对应于数据包中的 trxId

hb3, hb4 对应于数据包中的 flags 

qdcount 对应于 questions

ancount对应于 answterRRs

nscount对应于 AuthorityRRs

arcount对应于 AdditionalRRs

 

 

dns 配置的加载

读取 “/etc/hosts” 以及 “--addn-hosts” 的地方

如果是配置了 “--no-hosts” 则不会加载 “/etc/hosts” 文件 

 

注册 “/etc/hosts” 中的条目到 hash_table 中的过程 

 

 

 

 

 

http://www.xdnf.cn/news/368947.html

相关文章:

  • 【大模型面试每日一题】Day 13:数据并行与模型并行的区别是什么?ZeRO优化器如何结合二者?
  • 背单词软件开发英语App英语提分宝超级单词表,河南数匠软件开发
  • PCBA是电子设备的核心大脑!
  • node提示node:events:495 throw er解决方法
  • C语言编程--19.括号生成
  • 手动修改uart16550的FIFO深度?
  • STM32F103VE 三种低功耗模式
  • CN3791 锂电池充电芯片详解及电路设计要点-国产芯片
  • java-多态
  • 机舱巡飞平台技术要点突破点详解!
  • 流式渲染 Streaming SSR
  • deep seek简介和解析
  • BERT模型讲解
  • 【C语言指针超详解(三)】--数组名的理解,一维数组传参的本质,冒泡排序,二级指针,指针数组
  • 开平机:技术深水区与产业变革的融合突破
  • spring ai alibaba ChatClient 获取大模型返回内容的方式 以及使用场景
  • 什么是 HEIC 格式?如何在电脑上查看HEIC格式的图像?
  • 软件开发的图表类型
  • RAG优化知识库检索(1):基础概念与架构
  • 结构性变革与新兴机遇
  • 如何评估SAP升级实施商的专业能力?
  • JWT原理及工作流程详解
  • 高频算法面试题总结
  • 系统的从零开始学习电子的相关知识,该如何规划?
  • 高效处理CR
  • 耀圣-气动带刮刀硬密封法兰球阀:攻克颗粒高粘度介质的自清洁 “利器”
  • (八)Java面向对象编程三大特性:封装、继承与多态性详解
  • Linux 系统安装Minio详细教程
  • 音视频同步知识
  • 今日行情明日机会——20250509