DomainNameSystem
目录
1.0 简介
2.0 域名
域名的分类
域名服务器的分类
3.0 解析流程
4.0 DNS小实验
文件解读
查找配置文件
主配置文件
区域配置文件
DNS映射信息文件
正向解析
服务端
客户端
反向解析
服务端
客户端
主从同步
主服务端
从服务端
客户端
主从增量
主服务端
从服务端
客户端
1.0 简介
🔭DNS基本信息
什么是DNS:Domain Name System(域名系统)
产生原因 : 因为ip太多了,记不住,所以搞一个域名跟ip进行绑定,方便记忆,随着时代发着ip慢慢拥有了商标属性,具有庞大的商业价值
连接方式:知名端口号53,通常DNS是以UDP这个较快速的数据传输协议来查询的,但是UDP没有查询到完整的信息时,就会再次以TCP这个协议来重新查询,所以启动DNS时,会同时启动TCP以及UDP的port53。
2.0 域名

域名的分类
-
国家顶级域名:采用ISO3166的规定,
cn-->中国,us-->美国,uk-->英国……;国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码country-code) -
通用顶级域名:最常见的通用顶级域名有7个,
com-->公司企业,net-->网络服务机构,org-->非营利组织,int-->国际组织,gov-->美国的政府部门,mil-->美国的军事部门 -
基础结构域名:这种顶级域名只有一个,即
arpa,用于反向域名解析,因此称为反向域名
域名服务器的分类
-
根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。他负责告诉用户那些管理顶级域名(.com .net ....)服务器的ip是在哪里
-
顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。问 顶级域名 的管理xxxx.xxx 的权威域名解析服务器地址是多少
-
权威域名服务器:负责一个“区”的域名服务器。问 权威域名服务器 具体url对应ip地址是多少
-
本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
-
主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(master),负责解析至少一个域。其他的是辅助(从)DNS服务器(slave):负责解析至少一个域,是主DNS服务器的辅助。
-
缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。
🔭
不同域只知道自己下级的域的IP地址
当主域名服务器出故障时,辅助域名服务器(从)可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性(主从服务器)
3.0 解析流程
🔭解析流程
递归查询、迭代查询

4.0 DNS小实验
🔭
这实验大部分都是改文件,命令执行很少
在这重申一下,做实验的时候防上网方式是手动(ipv4.method manual)、火墙、selinux都是关的。
正向解析:域名------------->IP
反向解析:IP---------------->域名
文件解读
查找配置文件
# 查找bind软件生成的软件[root@Server ~]# rpm -ql bind |grep /etc/etc/logrotate.d/named/etc/named/etc/named.conf # 主配置文件/etc/named.rfc1912.zones # 域配置文件/etc/named.root.key/etc/rndc.conf/etc/rndc.key/etc/rwtab.d/named/etc/sysconfig/named/usr/share/doc/bind/sample/etc/usr/share/doc/bind/sample/etc/named.conf/usr/share/doc/bind/sample/etc/named.rfc1912.zones
主配置文件
/etc/named.conf
[root@Server ~]# vim /etc/named.conf10 options {11 listen-on port 53 { 127.0.0.1; }; # DNS监听的端口和IP,如果网卡有多个IP,想全部监听可以写any12 listen-on-v6 port 53 { ::1; }; # 监听的IPv6地址13 directory "/var/named"; # 加载、保存DNS映射信息的目录文件14 dump-file "/var/named/data/cache_dump.db"; # 缓存数据库15 statistics-file "/var/named/data/named_stats.txt"; # 数据分析文件16 memstatistics-file "/var/named/data/named_mem_stats.txt"; # 内存分析文件17 secroots-file "/var/named/data/named.secroots"; # 全域根域名文件18 recursing-file "/var/named/data/named.recursing"; # 递归文件19 allow-query { localhost; }; # 允许的请求,可以是IP网段和any---------31 recursion yes; #yes:递归查询 no:迭代查询3233 dnssec-validation yes; # 加密通讯3435 managed-keys-directory "/var/named/dynamic";36 geoip-directory "/usr/share/GeoIP";3738 pid-file "/run/named/named.pid"; # 当前dns服务的进程id号39 session-keyfile "/run/named/session.key"; # 通话密钥4041 /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */42 include "/etc/crypto-policies/back-ends/bind.config";43 };# 以下部分是写区域的格式,不建议在主配置文件中写域,建议在专门配域的文件中写,不容易乱,好管理。52 zone "." IN {53 type hint;54 file "named.ca";55 };# 以下是主配置文件会加载的文件57 include "/etc/named.rfc1912.zones"; # 区域配置文件58 include "/etc/named.root.key";
区域配置文件
/etc/named.rfc1912.zones
[root@Server ~]# vim /etc/named.rfc1912.zones# 正向解析格式的模板# localhost.localdomain:写域名的,管理区域叫做localhost.localdomain# type master:服务器类型(master==主;slave==从)。# file "named.localhost":加载DNS映射信息文件的路径。# allow-update { none; }:不允许从DNS服务器更新。17 zone "localhost.localdomain" IN {18 type master;19 file "named.localhost";20 allow-update { none; };21 };# 反向解析的模板# 1.0.0.127.in-addr.arpa 写要域名解析成的IP网络位(注意是IP的网络位),IP还得倒过来写。42 zone "1.0.0.127.in-addr.arpa" IN {43 type master;44 file "named.loopback";45 allow-update { none; };46 };
DNS映射信息文件
/var/named/下的文件
[root@Server ~]# ll /var/named/# 注意用户组是属于named的,自己创建时记得改所属组,或者直接cp -a 复制模板total 16drwxrwx--- 2 named named 6 Jul 10 23:07 datadrwxrwx--- 2 named named 6 Jul 10 23:07 dynamic-rw-r----- 1 root named 2112 Jul 10 23:07 named.ca-rw-r----- 1 root named 152 Jul 10 23:07 named.empty-rw-r----- 1 root named 152 Jul 10 23:07 named.localhost # 正向解析模板-rw-r----- 1 root named 168 Jul 10 23:07 named.loopback # 反向解析模板drwxrwx--- 2 named named 6 Jul 10 23:07 slaves # 从服务器内容文件一般在这个目录下[root@Server named]# vim named.localhost# 放在修改这个文件中的域名后都加上.是没错的,不加.的话或实验可能会成功,也可能会不成功# $TTL 1D 生存时间1天。# 第一个@ 表示当前域,就是这个文件要解析那一个域(域名是在/etc/named.rfc1912.zones中定义的域名,写完域名后,后面要加上.),可以保留@,不写域名# IN Internet,互联网。# 第二个@ 指的是权威域名服务器,表示当前文件授权的DNS,也就是它会去读取下面的那个NS后的@记录。# rname.invalid. 填邮箱为了避免@与前面第一个@冲突,所以换成点,例:admin@163.com ====> admin.163.com# 0 ; serial 表示这个文件中的DNS映射信息是否有更新,有的话加一,反正比原来的数字大就可以,一遍工作中是拿日期来写的# 1D ; refresh 刷新时间,配置主从服务器时可能用得到(用手动刷新从服务器的命令更容易看到效果,不必在这里调这个时间)$TTL 1D@ IN SOA @ rname.invalid. (0 ; serial # 序号 当dns配置信息更新时 序号+11D ; refresh # 刷新时间1H ; retry # 重连时间1W ; expire # 过期时间3H ) ; minimum # 缓存时间NS @ # 声明用户名解析服务器# 在下面配域名解析,每个 解析行 间不可以空开,必须连在一起A 127.0.0.1 # ipv4格式AAAA ::1 # ipv6格式~~[root@Client named]# vim named.loopback# 和正向解析一样,不做赘述# 值得注意的是反向解析行前的IP地址也是倒过来的#$TTL 1D@ IN SOA @ rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS @A 127.0.0.1AAAA ::1PTR localhost.~~
正向解析
服务端
[root@Server ~]# dnf install bind -y > /dev/null
[root@Server named]# vim /etc/named.conf10 options {11 listen-on port 53 { any; };19 allow-query { any; };43 };# 不在这个文件中添加区域,在这个/etc/named.rfc1912.zones文件中添加区域
[root@Server named]# vim /etc/named.rfc1912.zones17 zone "localhost.localdomain" IN {18 type master;19 file "named.localhost";20 allow-update { none; };21 };2223 zone "xixi.com" IN {24 type master;25 file "xixi.com.zone";26 allow-update { none; };27 };
[root@Server ~]# cd /var/named/[root@Server named]# cp -a named.localhost xixi.com.zone[root@Server named]# vim xixi.com.zone$TTL 1Dxixi.com. IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. IN A 192.168.126.100www.xixi.com. IN A 192.168.126.110bbs.xixi.com. IN A 192.168.126.120# 可以简写成以下格式$TTL 1D@ IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns A 192.168.126.100www A 192.168.126.110bbs A 192.168.126.120
[root@Server named]# systemctl start named
客户端
[root@Client ~]# dnf install bind -y > /dev/null
# 把DNS改为从服务器的IP再nslookup一下,改DNS用nmtui和nmcli都可以,改为记得起一下会议[root@Client ~]# nmcli c mod eth0 ipv4.dns 192.168.126.100[root@Client ~]# nmcli c up eth0Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)[root@Client ~]# nmcli device show | grep -i dnsIP4.DNS[1]: 192.168.126.100
# 可以有两个命令看效果host、nslookup[root@Client ~]# host ns.xixi.comns.xixi.com has address 192.168.126.100[root@Client ~]# host www.xixi.comwww.xixi.com has address 192.168.126.110[root@Client ~]# host bbs.xixi.combbs.xixi.com has address 192.168.126.120[root@Client ~]# nslookup ns.xixi.comServer: 192.168.126.100Address: 192.168.126.100#53Name: ns.xixi.comAddress: 192.168.126.100[root@Client ~]# nslookup www.xixi.comServer: 192.168.126.100Address: 192.168.126.100#53Name: www.xixi.comAddress: 192.168.126.110[root@Client ~]# nslookup bbs.xixi.comServer: 192.168.126.100Address: 192.168.126.100#53Name: bbs.xixi.comAddress: 192.168.126.120
反向解析
服务端
[root@Server ~]# vim /etc/named.rfc1912.zones35 zone "1.0.0.127.in-addr.arpa" IN {36 type master;37 file "named.loopback";38 allow-update { none; };39 };4041 zone "126.168.192.in-addr.arpa" IN {42 type master;43 file "192.168.126.arpa";44 allow-update { none; };45 };
[root@Server ~]# cd /var/named/[root@Server named]# cp -a named.loopback 192.168.126.arpa[root@Server named]# vim 192.168.126.arpa$TTL 1D126.168.192.in-addr.arpa. IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. A 192.168.126.100110.126.168.192.in-addr.arpa. PTR www.xixi.com.120.126.168.192.in-addr.arpa. PTR bbs.xixi.com.# 也可以简写成这样$TTL 1D@ IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. A 192.168.126.100110 PTR www.xixi.com.120 PTR bbs.xixi.com.
客户端
[root@Client ~]# nslookup 192.168.126.110110.126.168.192.in-addr.arpa name = www.xixi.com.[root@Client ~]# nslookup 192.168.126.120120.126.168.192.in-addr.arpa name = bbs.xixi.com.
主从同步
主服务端
[root@Server ~]# vim /etc/named.conf10 options {11 listen-on port 53 { any; };19 allow-query { any; };43 };# 不在这个文件中添加区域,在这个/etc/named.rfc1912.zones文件中添加区域
[root@Server ~]# vim /etc/named.rfc1912.zones41 zone "1.0.0.127.in-addr.arpa" IN {42 type master;43 file "named.loopback";44 allow-update { none; };45 };4647 zone "126.168.192.in-addr.arpa" IN {48 type master;49 file "192.168.126.arpa";50 allow-update { none; };51 };
[root@Server ~]# cd /var/named/[root@Server named]# cp -a named.localhost xixi.com.zone[root@Server named]# vim xixi.com.zone$TTL 1Dxixi.com. IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. IN A 192.168.126.100www.xixi.com. IN A 192.168.126.110bbs.xixi.com. IN A 192.168.126.120slave A 192.168.126.101 # 加这个保险一点,不加好像实验也可以成功[root@Server named]# cp -a named.loopback 192.168.126.arpa[root@Server named]# vim 192.168.126.arpa$TTL 1D@ IN SOA ns.xixi.com. rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. A 192.168.126.100110 PTR www.xixi.com.120 PTR bbs.xixi.com.101 PTR slave.baidu.com.
# 等从服务端配好文件后再起服务,从服务端会自动把主服务器/var/named/下的映射文件拉(下载)到从服务器/var/named/slaves下[root@Server named]# systemctl restart named
从服务端
[root@ServerB ~]# dnf install bind -y > /dev/null
[root@Server named]# vim /etc/named.conf10 options {11 listen-on port 53 { any; };19 allow-query { any; };43 };
[root@ServerB ~]# vim /etc/named.rfc1912.zones17 zone "localhost.localdomain" IN {18 type master;19 file "named.localhost";20 allow-update { none; };21 };2223 zone "xixi.com" IN {24 type slave;25 masters { 192.168.126.100; };26 file "slaves/xixi.com.zone";27 };41 zone "1.0.0.127.in-addr.arpa" IN {42 type master;43 file "named.loopback";44 allow-update { none; };45 };4647 zone "126.168.192.in-addr.arpa" IN {48 type slave;49 masters { 192.168.126.100; };50 file "slaves/192.168.126.arpa";51 };
# 配置好后等主服务器重新加载/重启服务后再重启服务,重启后可以看到已经把主服务器的映射信息文件拉过来了[root@ServerB ~]# systemctl start named[root@ServerB ~]# ll /var/named/slaves/total 8-rw-r--r-- 1 named named 382 Nov 8 15:45 192.168.126.arpa-rw-r--r-- 1 named named 352 Nov 8 15:39 xixi.com.zone
客户端
# 把DNS改为从服务器的IP再nslookup一下,改DNS用nmtui和nmcli都可以,改为记得起一下会议[root@Client ~]# nmcli c mod eth0 ipv4.dns 192.168.126.101[root@Client ~]# nmcli c up eth0Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)[root@Client ~]# nmcli device show | grep -i dnsIP4.DNS[1]: 192.168.126.101[root@Client ~]# nslookup www.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53Name: www.xixi.comAddress: 192.168.126.110[root@Client ~]# nslookup bbs.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53Name: bbs.xixi.comAddress: 192.168.126.120[root@Client ~]# nslookup ns.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53Name: ns.xixi.comAddress: 192.168.126.100[root@Client ~]# nslookup slave.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53Name: slave.xixi.comAddress: 192.168.126.101[root@Client ~]# nslookup 192.168.126.110110.126.168.192.in-addr.arpa name = www.xixi.com.[root@Client ~]# nslookup 192.168.126.120120.126.168.192.in-addr.arpa name = bbs.xixi.com.[root@Client ~]# nslookup 192.168.126.101101.126.168.192.in-addr.arpa name = slave.baidu.com.
主从增量
这个很简单,主服务器添加映射信息后serial值增大,如果客户端没有效果,从服务器手动刷新一下,就可以了
主服务端
[root@Server named]# vim xixi.com.zone$TTL 1Dxixi.com. IN SOA ns.xixi.com. rname.invalid. (1 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. IN A 192.168.126.100www.xixi.com. IN A 192.168.126.110bbs.xixi.com. IN A 192.168.126.120slave A 192.168.126.101fanyi A 192.168.126.130[root@Server named]# vim 192.168.126.arpa$TTL 1D@ IN SOA ns.xixi.com. rname.invalid. (1 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.xixi.com.ns.xixi.com. A 192.168.126.100110 PTR www.xixi.com.120 PTR bbs.xixi.com.101 PTR slave.baidu.com.130 PTR fanyi.baidu.com.
[root@Server named]# systemctl restart named
从服务端
# 客户端没有效果,来从服务端手动更新:"rndc refresh 区域文件中定义的管理区域的名字"[root@ServerB ~]# rndc refresh xixi.comzone refresh queued[root@ServerB ~]# rndc refresh 126.168.192.in-addr.arpazone refresh queued
客户端
# 重启named服务,但是从服务端没有刷新状况[root@Client ~]# nslookup 192.168.126.130** server can't find 130.126.168.192.in-addr.arpa: NXDOMAIN[root@Client ~]# nslookup fanyi.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53** server can't find fanyi.xixi.com: NXDOMAIN
# 从服务端手动刷新后情况[root@Client ~]# nslookup 192.168.126.130130.126.168.192.in-addr.arpa name = fanyi.baidu.com.[root@Client ~]# nslookup fanyi.xixi.comServer: 192.168.126.101Address: 192.168.126.101#53Name: fanyi.xixi.comAddress: 192.168.126.130
