目录
1、DNS简介
DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使用的是53端口,在/etc/services(搜索domain)这个文件中能看到。通常DNS是以UDP这个较快速的数据传输协议来查询的,但是没有查询到完整的信息时,就会再次以TCP这个协议来重新查询。所以启动DNS时,会同时启动TCP以及UDP的port53。
(1)因特网的域名结构由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。“域”(domain)是名字空间中一个可被管理的划分。域名只是逻辑概念,并不代表计算机所在的物理地点。域名可分为三大类:
- 国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码contry-code)。
- 通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
- 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。
(2)域名服务器的类型划分
- 根据域名服务器起的作用,可以把域名服务器划分为以下类型:
- 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。现如今全球一共投放13个根服务器根服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
- 在与现有IPv4根服务器体系架构充分兼容基础上,由我国下一代互联网国家工程中心领衔发起的“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。
- 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
- 权限域名服务器:负责一个“区”的域名服务器。
- 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
- 主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
- 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。
2、DNS域名解析的过程
1.浏览器缓存 2.主机 3.路由缓存 4.本地dns服务(114.114.114.114)缓存服务转发服务器
DNS解析方式
- 正向解析:将FQDN----->IP
- 反向解析:将IP----->FQDN
1、在浏览器中输入www . qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理qq.com的DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。
6、如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询。114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。
3、准备工作
搭建DNS服务器前的准备,均关闭防火墙和selinux
systemctl stop firewall
setenfore 0
3.1、服务器准备
准备了三台主机,其中135为DNS本地服务器(二级服务器shuyan.com.域)
3.2、软件安装
使用本地源安装软件 yum install bind
使用rpm -ql bind 查看安装包所产生的文件
[root@Server ~] systemctl start named
# 主配置文件: /etc/named.conf
[root@Server ~] vim /etc/named.conf
# 实现效果将不必要的参数删掉
options { //里面参数是全局生效的
listen-on port 53 { 192.168.221.135; };
directory "/var/named";
allow-query { any; };
};
zone "shuyan.com" IN {
type master; --主服务器
file "named.shuyan.com"; --关于shuyan.com的区域文件放在/var/named/named.shuyan.com
};
3.3、参数介绍
正向解析文件资源记录(Resource Record,RR),常见的正解文件RR相关信息:
SOA主要是与区域有关,所以domain要写域名。而SOA后面会接七个参数,这七个参数的意义如下:
- Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思。
- 管理员的Email,发生问题可以联系这个管理员。由于@在数据库文件中有特殊含义,所以将用“.”代替@
- 序号(Serial),这个序号代表的是这个数数据库文件的新旧,序号越大代表越新。所以当你更改了数据库内容时,需要将这个数值放大。
- 更新频率(Refresh)定义slave多久向Master要求数据更新。
- 失败重新尝试时间(Retry),如果Slave无法对Master实现连接,那么在多长时间内,Slave会尝试重新连接到Master。
- 失效时间(Expire),如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续尝试连接,并且尝试删除这份下载的zone file信息。
- 缓存时间(Minumum TTL),如果这个数据库zone file中,每条记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。
时间单位:M(分钟),H(小时),D(天),W(周),默认是秒
4、实验
4.1、正向解析:
# 主配置文件: /etc/named.conf
[root@Server ~] vim /etc/named.conf
# 实现效果将不必要的参数删掉
options { //里面参数是全局生效的
listen-on port 53 { 192.168.221.135; };
directory "/var/named";
allow-query { any; };
};
zone "shuyan.com" IN {
type master; --主服务器
file "named.shuyan.com"; --关于shuyan.com的区域文件放在/var/named/named.shuyan.com
};
[root@Server ~] touch /var/named/named.shuyan.com
;主机名 TTL IN 资源记录类型 数据
$TTL 1D ; TTL全局变量设置为1天
@ IN SOA @ root.localhost. (
20240317 ; 序列号
2D ; 刷新时间 (2天)
4H ; 重试时间 (4小时)
1D ; 过期时间 (1天)
1D ; 最小TTL (1天)
)
@ IN NS dns.shuyan.com. ; 区域的权威NS记录
dns IN A 192.168.221.135 ; dns.shuyan.com. 的A记录
www IN A 192.168.221.136 ; www.shuyan.com. 的A记录(假设区域是shuyan.com.)
fpt IN A 192.168.221.137 ; fpt.shuyan.com. 的A记录
stp IN A 192.168.221.145 ; stp.shuyan.com. 的A记录
doubao IN A 192.168.221.100 ; doubao.shuyan.com. 的A记录
w3 IN CNAME www.shuyan.com. ; w3.shuyan.com. 的CNAME记录,指向www.shuyan.com.
修改客户端网卡的DNS
[root@client ~] nmcli connection modify ens160 ipv4.dns 192.168.221.135
[root@client ~] nmcli connection up ens160
使用nslookup工具(windows上也可使用)查看是否解析成功
[root@client ~] nslookup stp.shuyan.com
Server: 192.168.221.135
Address: 192.168.221.135#53
Name: stp.shuyan.com
Address: 192.168.221.145
最终效果
[root@client ~] ping doubao.shuyan.com
别名的效果
[root@client ~] ping w3.shuyan.com
4.2、工具介绍:
nslookup
查询域名DNS信息的工具
补充说明
1、nslookup命令 是常用域名查询工具,就是查DNS信息用的命令。
2、nslookup有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
3、进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)。或者输入nslookup -nameserver/ip。进入非交互模式,就直接输入nslookup 域名就可以了。
语法
nslookup(选项)(参数)
选项
-sil:不显示任何警告信息。
参数
域名:指定要查询域名。
实例
[root@localhost ~] nslookup www.jsdig.com
Server: 202.96.104.15
Address: 202.96.104.15#53
Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name: host.1.jsdig.com
Address: 100.42.212.8
dig :域名查询工具
补充说明
dig命令 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
语法
dig(选项)(参数)
选项
- @<服务器地址>:指定进行域名解析的域名服务器;
- -b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
- -f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
- -P:指定域名服务器所使用端口号;
- -t<类型>:指定要查询的DNS数据类型;
- -x<IP地址>:执行逆向域名查询;
- -4:使用IPv4;
- -6:使用IPv6;
- -h:显示指令帮助信息。
参数
主机:指定要查询域名主机;
查询类型:指定DNS查询的类型;
查询类:指定查询DNS的class;
查询选项:指定查询选项。
实例
[root@localhost ~] dig www.jsdig.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jsdig.com. IN A
;; ANSWER SECTION:
www.jsdig.com. 0 IN CNAME host.1.jsdig.com.
host.1.jsdig.com. 0 IN A 100.42.212.8
;; AUTHORITY SECTION:
jsdig.com. 8 IN NS f1g1ns2.dnspod.net.
jsdig.com. 8 IN NS f1g1ns1.dnspod.net.
;; Query time: 0 msec
;; SERVER: 202.96.104.15#53(202.96.104.15)
;; WHEN: Thu Dec 26 11:14:37 2013
;; MSG SIZE rcvd: 121
4.3、反向解析:
[root@Server ~] vim /etc/named.conf
options {
# 设置监听的IP地址和端口号
listen-on port 53 { 192.168.221.135; };
# 设置区域文件存储目录
directory "/var/named";
# 允许所有客户端进行查询
allow-query { any; };
};
# 定义主域名shuyan.com的正向解析区域
zone "shuyan.com" IN {
# 指定这是一个主区域(主域名)
type master;
# 指向包含区域数据的文件
file "named.shuyan.com";
};
# 定义反向解析区域,用于处理192.168.221.0/24网络
zone "221.168.192.in-addr.arpa" IN {
# 指定这是一个主区域(主域名)
type master;
# 指向包含区域数据的文件
file "named.192";
};
[root@Server ~] vim /var/named/named.192
# 设置默认生存时间(Time To Live)为一天
$TTL 1D
# 定义域名 "shuyan.com"
shuyan.com. IN SOA @ root.localhost. (
20240318 ; 序号
2D ; 刷新间隔(2天)
4H ; 最大更新延迟(4小时)
1D ; 授权代理缓存存活时间(1天)
1D ; 域名服务器缓存存活时间(1天)
)
# 指定权威DNS服务器
shuyan.com. IN NS dns.shuyan.com.
# 将192.168.221.135映射到dns.shuyan.com.
135 IN PTR dns.shuyan.com.
# 将192.168.221.136映射到www.shuyan.com.
136 IN PTR www.shuyan.com.
# 将192.168.221.137映射到ftp.shuyan.com.
137 IN PTR ftp.shuyan.com.
# 将192.168.221.145映射到stp.shuyan.com.
145 IN PTR stp.shuyan.com.
# 将192.168.221.100映射到doubao.shuyan.com.
100 IN PTR doubao.shuyan.com.
在客户端上使用nslookup尝试反向解析是否成功
[root@client ~] nslookup
> server 192.168.221.135
Default server: 192.168.221.135
Address: 192.168.221.135#53
> 192.168.221.100
100.221.168.192.in-addr.arpa name = doubao.shuyan.com.
> 192.168.221.135
135.221.168.192.in-addr.arpa name = dns.shuyan.com.
4.4、扩展
4.4.1、主服务器配置
# 编辑主服务器的配置文件
[root@Server ~] vim /etc/named.conf
# 设置监听端口为53,并只允许来自本地网络的查询请求
options {
listen-on port 53 { 192.168.221.135; };
directory "/var/named";
allow-query { any; };
allow-transfer { 192.168.221.145; }; # 允许从服务器进行区域传输
};
# 添加正向解析区域定义
zone "shuyan.com" IN {
type master;
file "named.shuyan.com";
};
# 添加反向解析区域定义
zone "221.168.192.in-addr.arpa" IN {
type master;
file "named.192";
};
# 编辑正向解析文件
[root@Server ~] vim /var/named/named.shuyan.com
# 设置默认生存时间(Time To Live)为一天
$TTL 1D
# 定义域名 "shuyan.com"
@ IN SOA @ root.localhost. (
2024031704
2D
4H
1D
1D )
# 指定权威DNS服务器
shuyan.com. IN NS dns.shuyan.com.
shuyan.com. IN NS ns.shuyan.com. # 对从服务器一个命名
# 将192.168.221.135映射到dns.shuyan.com.
dns IN A 192.168.221.135
# 将192.168.221.136映射到www.shuyan.com.
www IN A 192.168.221.136
# 将192.168.221.137映射到ftp.shuyan.com.
fpt IN A 192.168.221.137
# 将192.168.221.100映射到doubao.shuyan.com.
doubao IN A 192.168.221.100
# 将w3映射到www
w3 IN CNAME www
# 重启主服务器的 DNS 服务
[root@Server ~] systemctl restart named
4.4.2、从服务器配置
# 编辑从服务器的配置文件
[root@Client ~] vim /etc/named.conf
# 设置监听端口为53,并只允许来自本地网络的查询请求
options {
listen-on port 53 { 192.168.221.145; };
directory "/var/named";
allow-query { any; };
allow-transfer { 192.168.221.135; }; # 允许主服务器进行区域传输
};
# 添加正向解析区域定义
zone "shuyan.com" IN {
type slave;
masters { 192.168.221.135; };
file "named.shuyan.com";
};
# 添加反向解析区域定义
zone "221.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.221.135; };
file "named.192";
};
# 重启从服务器的 DNS 服务
[root@Client ~] systemctl restart named
开两台从服务器的会话,一台拿来检查域名解析是否正常一台拿来检查日志是否有正常加载
[root@client ~] tail -f /var/log/messages
[root@client named]# ll
可发现在/var/named 目录下将主服务器的配置文件给加载过来了,只不过里面的内容有加密
在主服务器上named.shuyan.com文件上修改起始授权记录,将末尾的03改为04并增加一个haha.shuyan.com的IP记录
[root@Server ~]# systemctl restart named
此处可发现关于192.168.221.135主机的正向解析以同步成功,版本号末尾为04
同样在反向解析的文件中去修改版本号为02,并且增加一个ns.shuyan.com的记录,增加一个 haha.shuyan.com. 反向解析的记录
[root@Server ~] vim /var/named/named.192
$TTL 1D
@ IN SOA @ root.localhost. (
2024031802
2D
4H
1D
1D
)
IN NS dns.shuyan.com.
IN NS ns.shuyan.com.
145 IN PTR ns.shuyan.com.
135 IN PTR dns.shuyan.com.
136 IN PTR www.shuyan.com.
137 IN PTR ftp.shuyan.com.
100 IN PTR doubao.shuyan.com.
222 IN PTR haha.shuyan.com.
[root@Server ~] systemctl restart named
查看从服务器的系统日志文件
在从服务器使用nslookup来进行正反向解析测试