20-用户访问网站原理

接下来一个大环节,就是学习网站的所有知识点了

用户访问网站,主要分两大块知识点

  • 客户端输入www.yuchaoit.cn后,是如何看到网页的,其中原理流程
  • 服务端是如何提供网站服务的?其中原理流程

image-20220501151527804

主流开发运维架构


1. 网站架构(Web Application Architecture)

典型架构模型

客户端(浏览器) → web服务器(运行在linux服务器上的web软件) → 数据库

核心组件

  1. 前端(客户端) 掌握前端源代码的编译部署即可。开发工程师给你代码,启动在ip:port,可以访问。借助nginx技术,部署前端

    • 技术栈:HTML/CSS/JavaScript,现代框架(React、Vue.js、Angular)。
    • 功能:用户交互、页面渲染、API 调用。
    • 优化方向:性能(懒加载、CDN)、SEO、响应式设计。
  2. 后端(服务器)

    • 技术栈:Node.js、Python(Django/Flask)、Java(Spring)、PHP 等。
    • 功能:业务逻辑处理、身份认证、数据存取、第三方服务集成(如支付)。 (看到源代码,文本代码,启动,)
    • 优化方向:微服务化、负载均衡、缓存(Redis)、异步任务(Celery/MQ)。
  3. 数据库

    • 类型:关系型(MySQL、PostgreSQL)、NoSQL(MongoDB、Redis)。
    • 优化方向:索引优化、读写分离、分库分表。
  4. 基础设施

    • 部署:Nginx/Apache(反向代理)、Docker/Kubernetes(容器化)。
    • 安全:HTTPS、WAF(Web 应用防火墙)、DDoS 防护。
    • 扩展:云服务(AWS、阿里云)、Serverless(无服务器架构)。

2. 移动应用(App)架构

典型架构模型

移动端 app啊,苹果,安卓,前端 → 后端服务器 → 数据库

核心组件

  1. 客户端(App)

    • 技术栈
      • 原生开发:Android(Kotlin/Java)、iOS(Swift/Objective-C)。
      • 跨平台:React Native、Flutter、UniApp。
    • 功能:UI 渲染、本地存储(SQLite)、设备功能调用(相机、GPS)。
    • 优化方向:性能(内存管理)、离线支持、热更新。
  2. 后端服务器

    • 功能:与网站后端类似,但需适配移动端特性(如推送通知、短链接优化)。
    • 协议:RESTful API、GraphQL、gRPC(高性能通信)。
  3. 数据同步与离线支持

    • 策略:增量更新、本地缓存、数据同步冲突解决(如 Couchbase)。
  4. 安全与合规

    • 关键点:数据加密、防逆向(代码混淆)、隐私合规(GDPR、国内法规)。

3. 小程序架构(以微信为例)

典型架构模型

小程序客户端 → 微信服务器(中转) → 开发者服务器 → 数据库

核心组件

  1. 小程序客户端

    • 技术栈:WXML(类似 HTML)、WXSS(类似 CSS)、JavaScript。
    • 框架:微信原生语法、UniApp(跨平台)。
    • 特性:无需安装、依赖微信生态能力(支付、社交分享)。
  2. 微信服务器

    • 功能:鉴权(wx.login 获取 code)、消息推送、内容安全审核。
    • 限制:API 调用频率限制、内容合规性要求。
  3. 开发者服务器

    • 核心任务
      1. 通过微信 API 获取用户信息(如 code2session 换取 openid)。
      2. 业务逻辑处理,与数据库交互。
    • 优化方向:接口响应速度、云开发(微信云开发、腾讯云)。
  4. 数据存储

    • 本地存储wx.setStorage(类似 Web 的 localStorage)。
    • 云端存储:微信云数据库、文件存储(CDN 加速)。
  5. 安全与审核

    • 关键点:HTTPS 强制要求、用户隐私协议、小程序内容审核。

对比与适用场景

类型 优势 劣势 适用场景
网站 跨平台、SEO 友好、迭代快 性能依赖网络、功能受浏览器限制 信息展示、复杂交互 Web 应用
App 高性能、设备功能深度集成 开发成本高、需上架审核 高频使用、重体验的场景
小程序 即用即走、依托平台流量 功能受平台限制、审核严格 轻量级服务、社交裂变类需求

总结

  • 网站:适合快速迭代、多端适配的场景,技术生态成熟。
  • App:适合对性能和用户体验要求高的场景,但需投入更多开发资源。
  • 小程序:适合依托微信/支付宝生态快速获客,但需遵守平台规则。

根据业务需求选择合适的架构,也可结合使用(如 App + 小程序矩阵)。

浏览器输入网址后发生了什么

这是一个经典的问题,通过回答的细致程度,可以判断出,小白、新手、中级玩家、高端玩家。

关于这个问题,小到三两句话,大到你用三个月都说不完的知识点,知识深似海。

经典书籍推荐

关于这个问题,想要深入细致了解,可以看如下经典书籍

  • dns

image-20220501175157480

  • tcp/ip

image-20220501175033778

  • http协议

image-20220501175103392

  • http权威指南

image-20220501175231214

当然,超哥将自己毕生所学,所有的功力,取其精华,给大家提供了如下知识点,让小白能尽快的掌握其中重点,更大的世界,还需要你们自己探索,超哥只能先给你带上这趟IT的高速列车。

知识点框架(面试前拿出来背)

浏览器输入url后发生了什么?

总体知识大体分为6个步骤,每一个步骤可以详细的拆开来说。

1.梳理用户访问网站流程

0.客户端  确保你的机器可以上外网
1.客户端   浏览器输入网站url,点击回车 www.yuchaoit.cn
2.客户端        本地进行dns域名查找、查找域名对应的ip地址
3.客户端        直接访问该服务器的ip,开始tcp三次握手过程
4.客户端        建立tcp连接后,发起http请求,构造请求报文,会发出多次请求
5.服务端        接收到http请求后,解析请求,响应请求,回复多次
6.客户端        浏览器看到响应内容,浏览器解析响应数据,渲染结果在屏幕上
7.客户端        结束访问,关闭网站,完成tcp四次挥手

image-20220501201418747

2.抓技术名词关键字

1.域名
2.域名解析
3.TCP/IP 三次握手
4.TCP/IP 四次挥手
5.HTTP请求发出
6.HTTP响应报文

1.DNS域名解析

1.DNS域名结构

由于互联网中的域名太多,全球的用户也太多,因特网的域名采用的是树状结构命名。 任何一个连接到网络中的机器,都有一个唯一的层次结构名字,叫做域名(domain name)。

taobao.com

yuchao.taobao.com

  • 域、就是名字空间中可被划分、管理的部分。
  • 语法上要求,域名由标号(label)组成,每一个label之间通过小数点隔开。
  • 域名可以被分为多个子域,子域还可以继续划分子域的子域,因此形成了
    • 顶级域
    • 主域名
    • 子域名

image-20220501204047121

根域 .

  • 在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),也叫”根域“。
  • 根域 (13台 全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。)

顶级域名(一级域名)

.com

.com

360.top

顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在http://yuchaoit.cn这个域名中,顶级域是.cn(或.COM),大小写视为相同。%2C-iq1hk5rmsf9xnujhg63fqf5b./)

二级域名

二级域名是域名的倒数第二个部分,例如在http://yuchaoit.cn这个域名中,二级域名是yuchaoit。以此类推。

三级域名

子域名

域名机构

收费、新网https://www.xinnet.com/、万网https://www.hichina.com/

免费域名、tk域名等。

2. DNS服务器分层结构(DNS解析流程)

域名是分层结构,域名服务器也是分层结构,域名服务器其实就是一台部署了DNS域名解析系统的计算机,对外提供解析服务。

主要涉及的四个DNS服务器如下

www.taobao.com

第一步,去根域名查找,13台DNS数据库,查出来 .com

第二部,去.com 一级域名数据库,查找taobao.com,二级域名就有对应IP地址

第三部,taobao.com的域名数据库查找,三级域名注册。

分类 作用
根DNS服务器 读作root nameserver。当本地域名服务器在本地找不到解析记录时,第一步来这里找,能够拿到顶级域名服务器的信息。
顶级域名服务器 读作,top level domain nameserver(tld)。负责管理顶级域名下注册的二级域名。如当你访问www.yuchaoit.cn,首先找到顶级域名服务器.cn,然后找到二级域名yuchaoit.cn所在的权威域名服务器地址。
权威域名服务器 读作authoritative nameserver。维护该区域内的域名和ip之间的解析关系,也就是我们常见的如阿里云域名注册商,或是腾讯域名注册商。
本地域名服务器 读作local DNS或是DNS resolver。也就是用户本机自动获取的DNS地址,或是运营商提供的DNS,或是阿里、腾讯公共DNS服务器等。

image-20220501205728707


1. DNS 解析的层级结构

DNS 系统是一个分层的树状结构,由多级服务器组成:

  1. 根域名服务器(Root DNS Server)
    • 管理顶级域(如 .com.cn)的地址。
  2. 顶级域名服务器(TLD DNS Server)
    • 管理二级域(如 .cn 下的 yuchaoit.cn)。
  3. 权威域名服务器(Authoritative DNS Server)
    • 直接管理具体域名的解析记录(如 www.yuchaoit.cn)。
  4. 递归解析器(Recursive Resolver)
    • 通常由 ISP(如电信、联通)或公共 DNS(如 8.8.8.8)提供,负责向各级服务器发起查询。

2. 完整解析流程(以 www.yuchaoit.cn 为例)

步骤 1:本地缓存查询

  • 浏览器缓存:检查浏览器是否缓存过 www.yuchaoit.cn 的 IP。
  • 操作系统缓存:若浏览器无缓存,检查系统的 DNS 缓存(如 Windows 的 ipconfig/displaydns)。
  • 路由器缓存:若本地系统无缓存,向路由器查询。
  • ISP 递归解析器:若以上均未命中,向 ISP 的递归 DNS 服务器发起查询。

步骤 2:递归解析器发起迭代查询

递归解析器会依次向以下服务器发起请求:

  1. 根域名服务器

    • 询问 .cn 的顶级域名服务器地址。
    • 根服务器返回 .cn 的 TLD 服务器列表(如 a.dns.cn, b.dns.cn)。
  2. 顶级域名服务器(.cn)

    • 询问 yuchaoit.cn 的权威域名服务器地址。
    • TLD 服务器返回 yuchaoit.cn 的权威服务器地址(如 ns1.alidns.com)。
  3. 权威域名服务器

    • 直接查询 www.yuchaoit.cn 的解析记录(如 A 记录或 CNAME)。
    • 权威服务器返回最终 IP(例如 1.2.3.4)。

步骤 3:返回结果并缓存

  • 递归解析器将 IP 返回给操作系统,并缓存该结果(遵循记录的 TTL 时间)。
  • 浏览器获取 IP 后,向该 IP 发起 HTTP 请求,加载网页内容。

3. 关键过程示例

假设所有本地缓存均未命中,递归解析器的查询过程如下:

1. 递归解析器 → 根服务器:  
   问:“.cn 的顶级域名服务器地址?”  
   答:“.cn 的 TLD 服务器是 `a.dns.cn`(IP 列表)。”

2. 递归解析器 → TLD 服务器(a.dns.cn):  
   问:“yuchaoit.cn 的权威服务器地址?”  
   答:“权威服务器是 `ns1.alidns.com`(IP 列表)。”

3. 递归解析器 → 权威服务器(ns1.alidns.com):  
   问:“www.yuchaoit.cn 的 IP 是什么?”  
   答:“A 记录为 `1.2.3.4`(或 CNAME 指向其他域名,需继续解析)。”

4. DNS 记录类型

  • A 记录:直接映射域名到 IPv4 地址。
  • CNAME 记录:别名记录(如 www.yuchaoit.cn 可能指向 yuchaoit.cdn.com)。
  • NS 记录:指定域名的权威服务器地址。
  • TTL(Time to Live):控制缓存有效期(单位:秒)。

5. 工具验证

  1. dig 命令查看完整解析链

    dig +trace www.yuchaoit.cn
    

    输出会显示从根服务器到权威服务器的完整查询路径。

  2. nslookup 查询权威服务器

    nslookup -type=ns yuchaoit.cn
    

6. 可能的问题

  • 解析失败:权威服务器未配置记录、DNS 服务器宕机。
  • 解析慢:递归解析器性能差、网络延迟高。
  • 缓存污染:本地或 ISP 缓存了错误记录(需刷新缓存)。

总结

DNS 解析是一个层级化的协作过程,通过递归查询和迭代查询的结合,最终将域名转换为 IP 地址。整个过程依赖全球分布的 DNS 服务器网络,确保高效性和可靠性。

文字描述DNS解析流程

DNS域名解析
浏览器客户端需要正确查询、解析出域名的的ip地址,才能建立与服务器的连接
1.浏览器需要解析域名,首先查看本地的hosts文件,查看是否有固定的解析规则,有则直接使用该ip信息

2.本地的hosts文件没有解析关系,浏览器会发出一个dns请求到本地设置的dns服务器
本地dns服务器一般默认会是你接入的网络运营商,如电信dns,移动dns

3.域名解析的请求到达dns服务器之后,dns服务器优先查找它自己的缓存记录,如果有直接返回结果
如果dns服务器本地没有结果,递归的向上查找DNS根服务器,是否有解析记录。

4.根DNS服务器的作用只是提供域服务器的地址(不提供域名和ip的关系解析)

5.本地dns服务器此时向域服务器继续发出请求,此时请求的服务器就是如.com .cn这样的域服务器了
域服务器也不会直接返回你要访问的域名、以及它对应的IP地址的关系,而是告诉本地dns服务器,该域名对应的解析服务器的地址,
如163.com

6.最后本地dns服务器,向该域名对应的解析服务器发出请求,此时才能正确的拿到该域名对应的ip地址关系
此时本地dns服务器会把ip告诉浏览器
以及这个域名、ip的对应关系会被存储在本地缓存中,便于下次访问,可以直接看到这个域名、ip的对应关系,加速访问

3. DNS专业名词

递归查询

就好比我们递归创建文件夹一样
mkdir -p /opt/linux/chaoge666.log

1.我们本地进行域名解析时,如ping baidu.com,本地的/etc/resolv.conf指定的服务器接收到用户请求,必须返回给用户一个精准的ip结果。

2.如果指定的DNS服务器没有存储这个解析关系,就会以上述于超老师讲解的dns解析流程,开始向根域服务器发出请求,因此反复循环,直到拿到结果。

迭代查询

也就是DNS服务器/etc/resolv.conf没有直接返回查询域名-ip的对应结果,而是告诉另外一台服务器,另外一台服务器,再去请求另外一台机器,反复发请求,直到获取正确结果。

DNS缓存

指的是将域名、ip的解析关系存储在离用户最近的一个客户端上,这个位置可以是任意的地方,目的都是为了减少递归查询的次数,更快的获取查询结果。

TTL值

英文名 time to live
告诉本地dns服务器,该解析记录的可用时长,到期后本地缓存会自动删除该解析关系,重新发起迭代/递归查询,获取新的域名、ip解析结果。

4. dig命令查看解析关系

使用dig命令,可以验证上述的原理流程。
yum install bind-utils -y

使用dig命令追踪域名解析全流程

1.首先确定本地dns服务器

[root@master-61 /etc/ansible/roles]#cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 223.5.5.5

dig追踪解析

apt install dnsutils


root@ansible-01:~# dig +trace www.yuchaoit.cn

; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> +trace www.yuchaoit.cn
;; global options: +cmd
.            1490    IN    NS    j.root-servers.net.
.            1490    IN    NS    f.root-servers.net.
.            1490    IN    NS    b.root-servers.net.
.            1490    IN    NS    d.root-servers.net.
.            1490    IN    NS    i.root-servers.net.
.            1490    IN    NS    c.root-servers.net.
.            1490    IN    NS    k.root-servers.net.
.            1490    IN    NS    l.root-servers.net.
.            1490    IN    NS    e.root-servers.net.
.            1490    IN    NS    a.root-servers.net.
.            1490    IN    NS    h.root-servers.net.
.            1490    IN    NS    g.root-servers.net.
.            1490    IN    NS    m.root-servers.net.
;; Received 515 bytes from 114.114.114.114#53(114.114.114.114) in 20 ms

www.yuchaoit.cn.    600    IN    A    101.126.78.228
;; Received 49 bytes from 192.33.4.12#53(c.root-servers.net) in 28 ms

root@ansible-01:~#

1. 查询根域名服务器

; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> +trace www.yuchaoit.cn
;; global options: +cmd
.            1490    IN    NS    j.root-servers.net.
.            1490    IN    NS    f.root-servers.net.
...(省略部分根服务器列表)
;; Received 515 bytes from 114.114.114.114#53(114.114.114.114) in 20 ms
  • 含义
    • 本地 DNS 解析器(114.114.114.114)返回了 根域名服务器 的列表(如 a.root-servers.netm.root-servers.net)。
    • 这些根服务器管理所有顶级域(如 .com.cn)的地址信息。
    • 1490 是 TTL(缓存时间),单位是秒。

2. 直接获取目标域名的 A 记录

www.yuchaoit.cn.    600    IN    A    101.126.78.228
;; Received 49 bytes from 192.33.4.12#53(c.root-servers.net) in 28 ms
  • 含义
    • DNS 解析器直接向根服务器 c.root-servers.net(IP 192.33.4.12)发起查询,并直接返回了 www.yuchaoit.cnA 记录(IPv4 地址 101.126.78.228)。
    • TTL 为 600 秒,表示此记录的有效缓存时间为 10 分钟。

异常现象分析

正常 DNS 解析流程应为:

根服务器 → 顶级域服务器(.cn) → 权威服务器(yuchaoit.cn) → 返回 A 记录

但你的结果中,根服务器直接返回了 A 记录,这可能是以下原因导致:

可能原因 1:域名配置错误

  • 权威服务器被错误指向根服务器
    • yuchaoit.cn 的权威服务器(NS 记录)被错误配置为根服务器(如 c.root-servers.net)。
    • 根服务器不管理具体域名的解析,此配置违反 DNS 层级规则。

可能原因 2:DNS 缓存污染

  • 递归解析器(如 114.114.114.114)存在缓存污染
    • 递归服务器可能缓存了错误的记录,导致查询直接跳过了中间步骤。

可能原因 3:域名使用了特殊解析策略

  • CDN 或 DNS 服务商的特殊配置
    • 某些服务商可能通过全局负载均衡直接返回结果,但这种情况罕见。

验证方法

  1. 检查域名的 NS 记录
    执行以下命令,查看 yuchaoit.cn 的权威服务器配置:

    root@ansible-01:~# dig ns yuchaoit.cn
    
    ; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> ns yuchaoit.cn
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12885
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ; COOKIE: 5bb94a1ccf123b1d (echoed)
    ;; QUESTION SECTION:
    ;yuchaoit.cn.            IN    NS
    
    ;; ANSWER SECTION:
    yuchaoit.cn.        3600    IN    NS    ns1.volcengine-dns.com.
    yuchaoit.cn.        3600    IN    NS    ns2.volcengine-dns.com.
    
    ;; Query time: 76 msec
    ;; SERVER: 119.29.29.29#53(119.29.29.29) (UDP)
    ;; WHEN: Sat Mar 01 19:00:38 CST 2025
    ;; MSG SIZE  rcvd: 106
    
    root@ansible-01:~#
    
    • 正常情况:应返回域名注册商或 DNS 服务商提供的权威服务器(如阿里云的 ns1.alidns.com)。
    • 异常情况:如果返回根服务器(如 c.root-servers.net),说明配置错误。
  2. 直接查询权威服务器
    假设权威服务器为 ns1.alidns.com,执行:

    dig @ns1.alidns.com www.yuchaoit.cn
    
    • 若返回正确 IP,说明域名解析正常,根服务器直接响应的结果是异常的。
  3. 更换 DNS 解析器
    使用其他公共 DNS(如 8.8.8.8)测试:

    dig +trace @8.8.8.8 www.yuchaoit.cn
    

总结

  • 结论:你的 DNS 解析流程异常,可能是域名配置错误或缓存污染导致。
  • 建议
    1. 联系域名注册商或 DNS 服务商,检查 yuchaoit.cn 的 NS 记录配置。
    2. 确保权威服务器指向正确的 DNS 服务商(如阿里云、Cloudflare 等)。
    3. 清理本地 DNS 缓存(如重启服务器或刷新 DNS 缓存)。

5.可以看一看云解析DNS的手册

https://help.aliyun.com/document_detail/102237.html

6.阿里云DNS解析

https://help.aliyun.com/document_detail/29716.html

7.腾讯云DNS解析

https://cloud.tencent.com/document/product/302/3446

各记录类型使用目的

具体说明文档

https://cloud.tencent.com/document/product/302/38661
记录类型 使用目的
A 记录 将域名指向一个 IP 地址(外网地址)。
CNAME 记录 将域名指向另一个域名,再由另一个域名提供 IP 地址(外网地址)。
MX 记录 设置邮箱,让邮箱能收到邮件。
NS 记录 将子域名交给其他 DNS 服务商解析。
AAAA 记录 将域名指向一个 IPv6 地址。
SRV 记录 用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。
TXT 记录 对域名进行标识和说明,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。
隐、显性 URL 记录 将一个域名指向另外一个已经存在的站点。

工作中经常需要加的记录类型

主机记录指的就是,主域名的前缀,通常会添加如下记录类型

  • www,如解析为www.yuchaoit.cn,或者www.taobao.com
  • @,直接解析主域名,如yuchaoit.cn,或taobao.com
  • ,泛解析,匹配其他所有子域名,如`.yuchaoit.cn`
    • 一般适用于给域名绑定证书,一张证书,绑定*.yuchaoit.cn,也就可以处理如
    • www.yuchaoit.cn
    • api.yuchaoit.cn
    • blog.yuchaoit.cn
    • ...
  • mail,mail.yuchaoit.cn,一般用于邮件服务器的绑定
  • 移动端网址,如https://m.huya.com/

8.实践添加腾讯云dns解析

https://console.cloud.tencent.com/cns

最常用的就是添加A记录

➜  ~ dig +trace  .yuchaoit.cn

image-20220501213143061

9.域名需要备案

https://beian.aliyun.com/ 阿里云
https://cloud.tencent.com/product/ba  腾讯云

2.DNS服务搭建

主流的dns服务器部署,有两种工具

  • bind(大型公司需要自建复杂的域名解析系统,存储解析记录,包括了设置根域、顶级域、二级域等区域功能)
  • dnsmasq(轻量级域名系统,提供域名、ip的对应解析关系,需要提供上游权威dns服务器地址)

1. bind服务部署

  • DNS 的==域名解析==都是 ==udp/53== ;主从之间的==数据传输==默认使用==tcp/53==

  • DNS软件:

    ==Bind==是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley(伯克利)分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。

    BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。

2.机器准备

172.16.1.61  dns服务端
172.16.1.7   dns客户端   web-server
172.16.1.8   dns客户端   web-server

3.部署bind(61机器)

yum install bind bind-utils -y

解释
bind-utils:bind客户端程序集,例如dig, host, nslookup等;

bind:提供的dns server程序、以及几个常用的测试程序;

bind-libs:被bind和bind-utils包中的程序共同用到的库文件;

操作全流程

1.关闭防火墙
[root@dns-server ~]# systemctl stop firewalld
[root@dns-server ~]#
[root@dns-server ~]# iptables -F
[root@dns-server ~]#
[root@dns-server ~]# getenforce
Disabled

2.配置yum源,用于安装bind软件。
[root@dns-server ~]# ls /etc/yum.repos.d/

3.安装bind
[root@dns-server ~]# yum install bind -y

4.查看软件
[root@dns-server ~]# rpm -qi bind


5.查看dns配置文件
[root@dns-server ~]# rpm -ql bind

# 日志轮转文件
/etc/logrotate.d/named
# 配置文件目录
/etc/named
# 主配置文件
/etc/named.conf
# zone文件,定义域
/etc/named.rfc1912.zones
# 服务管理脚本
/usr/lib/systemd/system/named.service
# 二进制程序文件
/usr/sbin/named
# 检测配置文件
/usr/sbin/named-checkconf
# 检测域文件
/usr/sbin/named-checkzone
# 根域服务器
/var/named/named.ca
# 正向解析区域文件模板
/var/named/named.localhost
# 反向解析区域文件模板
/var/named/named.loopback
# dns服务器下载文件的默认路径
/var/named/slaves
# 进程pid
/var/rum/named

4.配置文件修改设置dns区域文件

named.conf修改

1.备份原有文件
[root@dns-server ~]# cp /etc/named.conf /etc/named.conf.bak
[root@dns-server ~]#
[root@dns-server ~]#
[root@dns-server ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak

2.修改主配置文件

# 定义监听端口、监听方式、允许查询来源

options {
        // 定义监听方式  any代表全网监听
        // 监听的地址和端口,localhost表示监听在本机所有地址上;
        listen-on port 53 { 127.0.0.1;any; };
        listen-on-v6 port 53 { ::1; };
        // 区域数据库文件存放的目录,存放解析记录的目录
        directory       "/var/named";
        // dns解析过内容的缓存文件
        dump-file       "/var/named/data/cache_dump.db";
        // 静态解析文件(几乎不用)
        statistics-file "/var/named/data/named_stats.txt";
        // 内存的统计信息
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        // 允许谁向本台DNS发起查询请求(localhost|ip|any);
        allow-query     { localhost;any; };
        ..
        ...
        ...
        省略

 // 控制日志输出级别,路径
 logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

// 区域设置,这是根域。
zone "." IN {
        type hint;
        file "named.ca";
};


 59 include "/etc/named.rfc1912.zones";  // 这里include表示,载入一个子配置文件
 60 include "/etc/named.root.key";



配置文件解析
主配置文件组成部分::

options {} :全局选项(监听端口、数据文件存储位置、缓存位置、权限等)
logging {} :服务日志选项
zone . {} :自定义区域配置
include :包含其他的文件


主配置文件注意事项

语法非常严格;
文件权限属主 root ,属组 named ,文件权限 640;

[root@dns-server ~]# ll /etc/named.conf
-rw-r----- 1 root named 1812 Feb 19 17:10 /etc/named.conf

/etc/named.rfc1912.zones 修改

在named.conf中写入全局设置;

在include的配置文件中写入具体的dns解析设置,域名解析记录;

3.修改子配置文件,自定义区域配置文件

配置解析
zone "example.com" IN { 
    type master|slave; 
    #自定义区域类型 
    file /path/to/zonefile; 
    #绝对路径和相对路径 
    allow-update {ip|none}; 
    #允许哪个ip可以使用nsupdate动态更新 区域文件 
};

添加如下配置,注意格式,这里就是添加你的域名了。 一定不要落下分号
[root@dns-server ~]# tail -5  /etc/named.rfc1912.zones
zone "yuchaoit.cn" IN {
        type master;
        file "yuchaoit.cn.zone";
        allow-update { none; };
};


4.创建zone区域文件 yuchaoit.cn.zone,先去复制一个模板,区域文件放在了/var/named
[root@dns-server ~]# cp -p /var/named/named.localhost /var/named/yuchaoit.cn.zone


5.修改区域文件
让这个域名和你要的IP地址对应起来,以及添加一个三级域名www.yuchaoit.cn。
[root@dns-server ~]# cat  /var/named/yuchaoit.cn.zone
$TTL 1D
@    IN SOA    @ rname.invalid. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    NS    @
    A    192.168.0.105
    AAAA    ::1

www A 192.168.0.105


6.修改完了后,务必修改zone文件的权限
[root@dns-server ~]# chmod 640 yuchaoit.cn.zone
[root@dns-server ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Nov 25 00:38 data
drwxrwx--- 2 named named    6 Nov 25 00:38 dynamic
-rw-r----- 1 root  named 2253 Apr  5  2018 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Nov 25 00:38 slaves
-rw-r----- 1 root  named  173 Feb 19 17:58 yuchaoit.cn.zone


7.检查配置文件语法,不要有任何错误
[root@dns-server ~]# named-checkconf /etc/named.conf
[root@dns-server ~]# named-checkconf /etc/named.rfc1912.zones
[root@dns-server ~]#


8.启动named域名解析服务,注意名字是这个。
[root@dns-server ~]# netstat -tnlp|grep named
[root@dns-server ~]#
[root@dns-server ~]# systemctl start named
[root@dns-server ~]# netstat -tnlp|grep named
tcp        0      0 10.96.0.177:53          0.0.0.0:*               LISTEN      8051/named
tcp        0      0 192.168.0.104:53        0.0.0.0:*               LISTEN      8051/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      8051/named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      8051/named
tcp6       0      0 ::1:53                  :::*                    LISTEN      8051/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      8051/named
[root@dns-server ~]#

备注:关于zone file区域档案的参数解释

http://dns-learning.twnic.net.tw/bind/intro6.html#cb

关于zone文件语法解析

time to live(TTL),ttl值主要是控制域名指向的ip地址在dns服务器上的缓存时间

@ 指的就是yuchaoit.cn

$TTL 1D                      //定义一个TTL默认值为1天,下面数据直接引用此值.
@                            [TTL]    IN   SOA  主DNS服务器FQDN 管理员邮箱  (


                                        0       ; 序列号
                                        1D      ; 更新间隔
                                        1H      ; 更新失败后重试间隔
                                        1W      ; 过期时长
                                        3H )    ; 否定记录保存时长

资源类型:A(IPv4), AAAA(IPv6):定义FQDN的IP
          NS :   定义DNS服务器的FQDN
          SOA :   起始授权(每个zone首先要定义此值)
          MX:    定义邮件记录,有优先级概念(0-99),值越小优先级越高。
          CNAME:  定义别名
          PTR:   反向记录

5.客户端设置dns服务器地址

测试域名

1.客户端配置我们自己部署的dns服务器地址,写入配置文件,这个192.168.0.104是超哥部署的dns服务器IP。

[root@web-server ~]# cat  /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.0.104


2.检查解析关系
[root@web-server ~]# nslookup www.yuchaoit.cn
Server:        192.168.0.104
Address:    192.168.0.104#53

Name:    www.yuchaoit.cn
Address: 192.168.0.105

3.修改dns服务器地址试试,看看解析关系

3.作业,添加dns记录

现在你有2台web-7,web-8机器,分别需要购买新域名,请在dns服务器上添加如下域名

二级域名
 web7.cn 172.16.1.7
 web8.cn 172.16.1.8

三级域名
www. web7.cn 172.16.1.7
www. web8.cn 172.16.1.8

提示

1./etc/named.rfc1912.zones
2. web7.cn.zone
3.systemctl reload named

4.轻量级dnsmasq服务

1、dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能。

2、dnsmasq可以解决小范围的dns查询问题,如果业务是跨机房、跨地区的话不建议使用dnsmasq做为dns解析服务器。

1.部署dnsmasq

1.安装
yum install dnsmasq -y

2.修改配置文件
[root@master-61 ~]#ll /etc/dnsmasq.conf 
-rw-r--r-- 1 root root 26832 Jul 21  2021 /etc/dnsmasq.conf

修改为如下
[root@master-61 ~]#grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
#定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取
resolv-file=/etc/resolv.dnsmasq.conf

#定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址
listen-address=172.16.1.61
# 本地域名配置文件(不支持泛域名),添加内部需要解析的地址和域名(重新加载即可生效)
# 默认读取/etc/hosts
addn-hosts=/etc/dnsmasq.hosts
#记录dns查询日志服务器
log-queries
log-facility=/var/log/dnsmasq.log
#包含其他文件夹下所有配置文件
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

2.添加上游dns服务器

[root@master-61 ~]#cat  /etc/resolv.dnsmasq.conf
nameserver 223.5.5.5
nameserver 223.6.6.6

3.添加dns解析记录

[root@master-61 ~]#cat /etc/dnsmasq.hosts 

172.16.1.8  web8.cn
172.16.1.9  web9.cn

4.启动dnsmasq

[root@master-61 ~]#systemctl start dnsmasq

5.测试局域dns记录

1.使用公网dns查询记录
[root@web-8 ~]#nslookup  web9.cn 223.5.5.5



Server:        223.5.5.5
Address:    223.5.5.5#53

** server can't find  web9.cn: NXDOMAIN


2.使用本地dns服务器查询
[root@web-8 ~]#nslookup  web9.cn 
Server:        172.16.1.61
Address:    172.16.1.61#53

Name:     web9.cn
Address: 172.16.1.9

6.小结

  • 部署dns服务器,添加dns解析记录(ip、域名对应关系)
  • 客户端需要指定dns服务器,方可使用这些记录
  • dns查询流程,还有上游服务器提供公网dns记录。
Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2025-03-01 19:40:04

results matching ""

    No results matching ""