网络世界的门牌库DNS

大家好,我是宁静知行者,一个安静写代码,勤奋写文章的技术人. 点击\”关注\”,每天为你分享【技术文章】

大家好,我是宁静知行者,一个安静写代码,勤奋写文章的技术人. 点击"关注",每天为你分享【技术文章】、【问题总结】

在计算机的世界里,计算机的沟通都是通过ip进行通信,现在的ip是32位,如类似 210.11.22.43(只是举例ip),这样的ip是很难被记住的,那有没有一个比较好的记忆方式来和这个ip进行对应呢?域名,如 www.baidu.com,那它是怎么和对应的ip进行绑定的呢?那就要通过 DNS来进行管理了。

历程

单一文件 /etc/hosts

最早是通过在本地文件中,指定主机名和IP的映射关系,但是这个无法感知主机名的ip变更,且如果ip数量大,这个文件会很大

dns 系统

单一文件 /etc/hosts 如果是在内网或是ip数量比较少时,是一个不错的选择,但如果是要进行外网连接时,就会出现ip数量大的问题了,后面就发展出 域名管理系统(DNS),通过dns ,不需要知道ip,只要知道主机名,就可以正常连接上主机了

DNS主机名与IP的查询流程

DNS目录结构

整个DNS系统最上方一定是一个点(.), 称为 root,以下是顶层域名,会有以下两种

一般顶级域名(gTLD),如.com、.gov、.org 等国家顶级域名(ccTLD),如.cn .us 等

名称

说明

com

公司、行业

org

组织、机构

edu

教育组织

gov

政府单位

net

网络、通讯

DNS的结构大概如下:

网络世界的门牌库DNS

查询

从上面的DNS 的目标结构图可知,每种后缀类型的域名,都有不同的服务器进行管理的,当要进行对一个域名进行查询时,都是从顶级开始往下进行查询,每一个服务器只记录底下那一层的主要域名的信息,如查询 demo.com.cn 时,大致流程如下:

网络世界的门牌库DNS

那是不是每次都是要经过这样的流程呢?每次查到后,都在dns系统中进行缓存,当下次进行访问时,会先确认本地缓存中是否有值,如果有的话会直接返回给客户端,同时这个缓存会有一个过期时间(TTL),超过这个时间之后,发起的流程就要重新来一遍。

示例: 查看以访问www.baidu.com为例

dig +trace www.baidu.com[root@localhost named]# dig +trace www.baidu.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> +trace www.baidu.com;; global options: +cmd. 511832 IN NS j.root-servers.net.. 511832 IN NS e.root-servers.net.# 上面的部分是请求 . 服务器;; Received 1097 bytes from 192.168.136.130#53(192.168.136.130) in 3 mscom. 172800 IN NS e.gtld-servers.net.# 上面是在请求 .com.服务器;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 219 msbaidu.com. 172800 IN NS ns2.baidu.com.# 上面是请求 .baidu.com.服务器;; Received 849 bytes from 192.33.14.30#53(b.gtld-servers.net) in 152 mswww.baidu.com. 1200 IN CNAME www.a.shifen.com.# 查询到 www.baidu.com. 是 CNAME记录 ,指向到 www.a.shifen.com. # 返回对应的ip地址;; Received 72 bytes from 180.76.76.92#53(ns7.baidu.com) in 23 ms

名词解释

正解

由主机名查询得到IP的流程即正解。通常要有如下的几种标志:

SOA ,NS, A

反解

由ip找到主机名,记录信息比较重要的是:

PTR: 后面记录的数据就是反解的主机名

hint zone

当DNS服务器,在自己的数据库找不到对应的信息时,就会去 hint类型记录的zone里进行查找,默认是查找 name.ca里记录的内容

DNS服务安装

以 demo.com 域名为例,只作测试用,在本地进行dns测试

yum install -y bind bind-chroot bind-utils

配置文件,目录在 /etc/named.conf配置cache-only DNS服务器,需要转发到其他服务器,只作缓存

options { listen-on port 53 { 127.0.0.1;192.168.136.130; }; # 可以绑定指定的ip listen-on-v6 port 53 { ::1; }; directory "/var/named"; // 数据库默认配置文件目录 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"; allow-query { any; }; // 设置谁可以对当前dns服务器进行访问 forward only; // 这个设定可以使dns服务仅进行forward,即使有 .这个zone file也不会使用 forwarders { 192.168.136.2; // 转发到哪台后端的dns服务器 }; recursion yes;};

配置 demo.com 域名的解析

options { listen-on port 53 { 127.0.0.1;192.168.136.130; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; 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"; allow-query { any; }; allow-transfer {none;}; recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key";};logging { channel default_debug { file "data/named.run"; severity dynamic; };};// hint类型的,未找到对应的zone时,会从这里来找zone "." IN { type hint; file "named.ca";};// 对应的 demo.com的配置zone "demo.com" IN { type master; file "named.demo.com";};// 对应的反解的配置zone "136.168.192.in-addr.arpa" IN { type master; file "named.192.168.136";};include "/etc/named.rfc1912.zones";include "/etc/named.root.key";

增加正解(named.demo.com)和反解配置文件(named.192.168.136)

// named.demo.com 配置文件$TTL 600;SOA 如果有多部dns 服务器管理同一个域名时,进行zone file的传输管理;参数有七个;1. 是master DNS服务器;2. 是管理员email,因为 @有特殊意义 demo@demo.com -> demo.demo.com;3. 注意前面有 ( )序列号,序号越大代表越新,当slave 要判断是否主动下载时新的数据时,就以序列号比slave上的还要新来判断,故在变更数据时,要将这个数值增大;4. 更新频率(Refresh),slave多久更新的判断,单位秒;5. 失败重试时间,如果某些因素导致失败,salve 多久时间内,需要重新联机到master上,单位秒;6. 失效时间(Expire),如果一直失败在尝试时间内,达到这个值,slave将会不再尝试,并将下载的zone file文件删除;7. 如果这个zone file中的每笔记录都没有设置 TTL,那就以这个值为主;Refresh >= Retry *2;Refresh + Retry < Expire;Expire >= Rrtry * 10;Expire >= 7Days@ IN SOA ns1.demo.com. demo.demo.com. ( 2022080404 28800 14400 3600000 86400)@ IN NS ns1.demo.com.@ IN NS ns2.demo.com.;设置邮件的email server;10 代表后面会有10台这样的服务器,以数字较小的那部优先@ IN MX 10 mail.demo.com.ns2.demo.com. IN A 192.168.136.130ns1.demo.com. IN A 192.168.136.130master.demo.com. IN A 192.168.136.130www.demo.com. IN A 192.168.136.130mail.demo.com. IN A 192.168.136.126slave.demo.com. IN A 192.168.136.127;设置p.demo.com的别名为 www.demo.comp.demo.com. IN CNAME www.demo.com.

; named.192.168.136配置文件; 以 www.demo.com 为例,越右代表网域越大,.(root)>com>demo ,因此是由小到大; 但ip 不同,如 192.168.136.2 ,192 > 168 > 136 > 2,左边的网域越大,与dns的右到左不同,为了解决该问题,需要将ip返过来,在结尾加上 .in-addr.arpa字样$TTL 600@ IN SOA ns1.demo.com. demo.demo.com. ( 2022080401 28800 14400 3600000 86400)@ IN NS ns1.demo.com.128 IN PTR master.demo.com.133 IN PTR p.demo.com.127 IN PTR slave.demo.com.

启动 named

service named start

配置 /etc/resolv.conf

# Generated by NetworkManagersearch localdomainnameserver 192.168.136.130 # 增加自建的dns服务

测试,出现以下的内容,说明配置成功网络世界的门牌库DNS

通过 dig命令查看各个类型的数据

查看 A 记录

[root@localhost etc]# dig -t A master.demo.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> -t A master.demo.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55780;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096; 发起的查询的数据;; QUESTION SECTION:;master.demo.com. IN A; 返回的数据;; ANSWER SECTION:master.demo.com. 600 IN A 192.168.136.130;; AUTHORITY SECTION:demo.com. 600 IN NS ns2.demo.com.demo.com. 600 IN NS ns1.demo.com.;; ADDITIONAL SECTION:ns1.demo.com. 600 IN A 192.168.136.130ns2.demo.com. 600 IN A 192.168.136.130

查看 SOA 数据

[root@localhost etc]# dig -t SOA demo.com;; ANSWER SECTION:demo.com. 600 IN SOA ns1.demo.com. demo.demo.com. 2022080404 28800 14400 3600000 86400

查看 NS记录

[root@localhost etc]# dig -t NS demo.com;; ANSWER SECTION:demo.com. 600 IN NS ns2.demo.com.demo.com. 600 IN NS ns1.demo.com.

查看 PTR

[root@localhost etc]# dig -x 192.168.136.133;; ANSWER SECTION:133.136.168.192.in-addr.arpa. 600 IN PTR p.demo.com.

往期回顾

Docker 容器网络篇

Docker网络这样理解会更简单(一)

Docker网络这样理解会更简单(二)

原创文章,作者:共创,如若转载,请注明出处:https://www.sudun.com/ask/96176.html

(0)
共创's avatar共创
上一篇 2024年8月13日 上午6:33
下一篇 2024年8月13日 上午11:18

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注