大家好,我是宁静知行者,一个安静写代码,勤奋写文章的技术人. 点击"关注",每天为你分享【技术文章】、【问题总结】
在计算机的世界里,计算机的沟通都是通过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 的目标结构图可知,每种后缀类型的域名,都有不同的服务器进行管理的,当要进行对一个域名进行查询时,都是从顶级开始往下进行查询,每一个服务器只记录底下那一层的主要域名的信息,如查询 demo.com.cn 时,大致流程如下:
那是不是每次都是要经过这样的流程呢?每次查到后,都在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服务
测试,出现以下的内容,说明配置成功
通过 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