一.什么是DNS
1.DNS是什么
DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp, 53/tcp实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。根据地址解 析的方向不同,DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区 域(包含 IP 地址到域名的解析记录)
该应用程序的端口,对应:53/udp, 53/tcp
UDP53端口用于解析(需要速度快)
TCP的53端口用于连接服务器,slave从master服务器中拉取数据(需要可靠)
2.域名
-
一级域名:Top Level Domain: tld
-
三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
-
com, edu, mil, gov, net, org, int,arpa
-
二级域名:magedu.com
-
三级域名:study.magedu.com
-
最多可达到127级域名
根域:用“.”表示
顶级域(一级域):一般代表一种类型的组织机构或国家区域,如.net,.com,.edu等
二级域:用来标明顶级域下面的的一个特定组织,国家顶级域下面的二级域名由国家安全部门统一管理,比如:.com.cn,.net.cn,.edu.cn
三级域(子域):由二级域创建的一般为子域,一般是由各个组织自己申请的
主机:如www和mail等表示主机名称
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
3.DNS服务器类型
-
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,
但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定
其他 DNS 服务器作为解析来源。
-
主域名服务器:管理和维护所负责解析的域内解析库的服务器
-
从域名服务器
从主服务器或从服务器"复制"(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
通知机制:主服务器解析库发生变化时,会主动通知从服务器
IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,英国1,瑞典1,日本1
IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从
二.DNS查询类型及原理
1.查询方式
-
递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手)
-
迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。(需要自己动手)
2.查询原理过程
正向解析查询过程:
①先查本机的缓存记录
②查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理 以上过程成为递归查询:我要一个答案你直接会给我结果
④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器 ⑦求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
windows系统查询dns缓存命令:ipconfig /displaydns windows系统清理dns缓存命令:ipconfig /flushdns
linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递 归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
C:\Users\Administrator>ipconfig/displaydns | findstr redhat
C:\Users\Administrator>ping www.redhat.com
DNS的分布式互联网解析库
大型、分布式的互联网DNS解析库
根. 根域名DNS服务器:专门负责根域名
一级DNS服务器:专门负责一级域名的解析(一般代表一种类型的组织机构或国家地区)
.com(工商 企业)
.net(网络供应商)
.edu(教育机构)
.cn(中国国家域名)
.org(团体组织)
.gov (政府部门)
二级DNS服务器:专门负责二级域名的解析
.net.cn
.edu.cn
.com.cn
子域名DNS服务器:专门负责子域名的解析 也称为三级域名
ina.com.cn
.pku.edu.cn
主机站点
tts9
tts6
www
域名代理/注册/购买服务商
-新网,云服务器_网站建站_域名注册_虚拟主机_企业邮箱_新网知名的互联网基础应用服务提供商 - 新网数码
-万网,阿里云企航_万网域名_商标注册_资质备案_软件著作权_网站建设-阿里云
-中国互联,网站建设,域名注册查询,顶级域名申请,百度爱采购,加盟星-万象互联
中国数据
域名体系结构
所有的域名必须以点结尾
根域名(.)
一级域名:.cn(中国) .us .tw .kr(韩国) .jp(日本) .hk(香港)uk(英国)
........
二级域名:.com.cn(中国商业组织) edu.cn(教育机构) .org.cn(非盈利) .net.cn(中国运营商) 三级域名:sina.com.cn nb.com.cn haixi.com.cn .........
组织域:.com .org .net .CC
国家域:.cn .tw(台湾) .hk(香港) .iq .ir .jp(日本)
反向域
114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用。
8.8.8.8是GOOGLE公司提供的DNS,该地址全球通用,相对来说,更适合国外以及访问国外网站的用户使用
223.5.5.5 和 223.6.6.6:阿里云DNS
IPV6 2400:3200::1 和 2400:3200:baba::1
江苏省南京市(中国电信)
首选DNS为:218.2.135.1 备用DNS为:61.147.37.1
3.DNS软件bind
DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns
-
bind:服务器
-
bind-libs:相关库
-
bind-utils: 客户端
-
bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/
4.SOA记录
-
当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
-
当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
- 例如:admin.kgc.com
-
主从服务区域传输相关定义以及否定的答案的统一的TTL
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源
1.TTL可从全局继承缓存时间
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
$TTL 1D(统一的ttl定义1天,不写D 是秒)
@ IN SOA master.kgc.com. admin.kgc.com. (
当前服务器的名称 邮箱地址
0 ; serial #是否有更新 版本号 更新文件 手动把 0 加1
1D ; refresh #刷新时间 拉取时间
1H ; retry #失败后一个小时 后再试一次
1W ; expire #过期时间,老是拉取不了,1周以后过期
3H ) ; minimum #老是去查错误的解析地址,3小时内的缓存下,用户再查直接返回找不到
5.NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如: ns.kgc.org.
注意:
-
相邻的两个资源记录的name相同时,后续的可省略
-
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
-
一个区域可以有多个NS记录
-
NS(Name Server):,专用于标明当前区域的DNS服务器,服务器类型为域名服务器
6.MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
-
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
-
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
MX(Mail eXchanger)邮件交换器
7.A记录
name: 某主机的域名解析,例如:www.kgc.com
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
A(internet Address):作用,域名解析成IP地址
8.PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:inaddr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
PTR(PoinTeR):反向解析,ip地址解析成域名
9.CNAME别名记录
CNAME : Canonical Name,别名记录
name: 别名的FQDN
value: 真正名字的FQDN
#固定格式
name [TTL] IN rr_type value
缓存时间 internet记录 区域解析库 值
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.kgc.com.
master A 192.168.91.100
www A 192.168.91.103
db A 192.168.91.101
IN MX 10 mail.kgc.com.
mail A 192.168.91.10
ftp CNAME www
$TTL 1D #有效解析记录的生存周期
@ in SOA benet.com. admin.benet.com. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS benet.com. #记录当前区域的DNS服务器的名称
A 192.168.80.10 #记录主机IP地址
IN MX 10 mail.benet.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.80.10 #记录正向解析www.benet.com对应的IP
mail IN A 192.168.80.11 #MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 192.168.80.100 #泛域名解析,“*"代表任意主机名
三.安装配置
[root@localhost ~]#yum list bind*
[root@localhost ~]#yum install bind bind-utils -y
#主软件 和 配置包管理软件
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl start named
#开启服务
[root@localhost ~]#netstat -ntap |grep named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 17047/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 17047/named
tcp6 0 0 ::1:53 :::* LISTEN 17047/named
tcp6 0 0 ::1:953 :::* LISTEN 17047/named
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=127.0.0.1
[root@localhost ~]#systemctl restart network
[root@localhost ~]#ping www.baidu.com
[root@localhost ~]#rpm -qc bind
#配置文件包
/etc/logrotate.d/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca #根服务器位置
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
[root@localhost ~]#vim /etc/named.conf
#可以修改配置,注释,或者删除这两行
listen-on port 53 { any; };
allow-query { any; };
# // listen-on port 53 { 127.0.0.1; };
# // allow-query { localhost; };
[root@localhost ~]#rndc reload
#重新加载DNS服务
server reload successful
[root@localhost named]#vim /etc/named.rfc1912.zones
#编写域名
zone "kgc.com" {
type master;
file "kgc.com.zone";
};
[root@localhost named]#cd /var/named/
#切换目录
[root@localhost named]#ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]#cp named.localhost ./kgc.com.zone -p
#保留权限复制
[root@localhost named]#ls
data dynamic kgc.com.zone named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]#vim kgc.com.zone
#编辑数据库文件,解析记录对应关系
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.91.100
www A 192.168.91.101
www CNAME cdn.kgc.com
cdn A 192.168.91.100
db A 192.168.91.103
IN MX 10 mail.kgc.com.
mail A 192.168.91.10
@ A 192.168.91.100 #不需要 主机名
* A 192.168.91.100 #随便写几个ww
[root@kgc ~]# cd /var/www/html/
[root@kgc html]# ls
[root@kgc html]# vim index.html
www.kgc.com
#检查启动文件格式
named-checkconf
named-checkzone kgc.com /var/named/kgc.com.zone
1.主从复制
实验环境:
主服务器:192.168.233.100
从服务器:192.168.233.101
##从服务器的配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils
##从服务器安装bind软件
[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cfab3568-efc2-48ec-9999-5a558c33ae50
DEVICE=ens33
ONBOOT=yes
NETMASK=255.255.255.0
GATEWAY=192.168.233.2
IPADDR=192.168.233.100
DNS1=192.168.233.100
DNS2=192.168.233.101
[root@localhost named]# systemctl restart network
##重启网络服务
[root@localhost etc]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
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 { localhost; };
[root@localhost etc]# vim /etc/named.rfc1912.zones
#添加从服务器的配置文件
zone "kgc.com" IN {
type slave;
#类型从
file "slaves/kgc.com.zone";
#文件地址在/var/named/slaves/ 下
masters { 192.168.91.100; };
#申明主服务器的地址
};
[root@localhost etc]# ls /var/named/slaves
kgc.com.zone
[root@localhost etc]# systemctl start named
#主服务器配置好后再启动
##主服务器配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind
##同样先安装bind软件
[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cfab3568-efc2-48ec-9999-5a558c33ae50
DEVICE=ens33
ONBOOT=yes
NETMASK=255.255.255.0
GATEWAY=192.168.233.2
IPADDR=192.168.233.100
DNS1=192.168.233.100
[root@localhost named]# systemctl restart network
##重启网络服务
[root@localhost etc]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
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 { localhost; };
[root@localhost etc]# vim /etc/named.rfc1912.zones
#添加主服务器的配置文件
zone "kgc.com" IN {
type master;
#类型
file "kgc.com.zone";
#文件地址在/var/named/ 下
};
[root@localhost etc]# systemctl start named
#主服务器配置好后启动
2.分离解析
实验环境:
将linux服务器配置两块网卡,都仅主机模式
ens33:192.168.100.1
ens37:12.0.0.1
win7做为外网: 12.0.0.12 255.0.0.0
win10 作为内网:192.168.100.100
[root@test5 ~]# vim /etc/named.conf
#修改配置文件
listen-on port 53 { any; };
allow-query { any; };
#等会需要使用的 根配置文件
zone "." IN {
type hint;
file "named.ca";
};
[root@test5 named]# vim /etc/named.rfc1912.zones
#编写配置文件
view "lan" {
match-clients { 192.168.100.0/24; };
#匹配网段
zone "kgc.com" IN {
type master;
file "kgc.com.lan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
view "wan" {
match-clients { 12.0.0.0/24; };
zone "kgc.com" IN {
type master;
file "kgc.com.wan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
[root@test5 named]# vim kgc.com.lan
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.100.1
www A 192.168.100.88
sftp A 192.168.100.99
[root@test5 named]# vim kgc.com.wan
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 12.0.0.1
www A 12.0.0.1
sftp A 12.0.0.1
~
~
3.开启centos的缓存
CentOS 默认没有启用DNS客户端缓存,安装nscd(Name Service Cache Daemon,名称服务缓存守护进
程)包可以支持DNS缓存功能减少DNS服务器压力,提高DNS查询速度
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd
#查看缓存统计信息
[root@centos7 ~]#nscd -g
#清除DNS客户端缓存
[root@centos7 ~]#nscd -i hosts
rndc flush
#清除缓存
解析工具
dig
[root@localhost ~]#dig www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13083
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 581 IN CNAME www.a.shifen.com.
www.a.shifen.com. 84 IN A 36.152.44.95
www.a.shifen.com. 84 IN A 36.152.44.96
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 四 10月 13 00:21:33 CST 2022
;; MSG SIZE rcvd: 101
host
host www.baid.com
www.baid.com is an alias for tybf.cjlhdns.com.
tybf.cjlhdns.com has address 172.83.159.98
nslookup
[root@localhost ~]#nslookup
> www.baiud.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.baiud.com
Address: 103.51.144.90