DNS
域名系统DNS(Domain Name System),是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。
因特网的域名结构
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。
域名只是逻辑概念,并不代表计算机所在的物理地点。他分为三大类:
(1) 国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)
(2) 通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
(3) 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。
现如今全球一共投放13个根服务器
服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
递归查询与迭代查询
完整过程:
- 在浏览器中输入www.qq .com 域名,操作系统会先检查自己本地( 浏览器缓存,hosts,路由器缓存等 )是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理qq.com的DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。
- 如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
递归:计算机只发送一次请求 迭代:计算机发送多次请求
DNS服务类型
主DNS服务器: 数据修改(接受用户请求返回数据) master
辅助dns服务器: 定期请求数据同步 slave
缓存dns服务器: 缓存dns数据 hint
转发服务器: 缓存服务器去掉缓存功能 forward
DNS解析答案
当DNS客户端向DNS服务器发出解析请求时,不管是否能够查询到想要的结果,都会返回一个解析答案。根据是否能够查询到想要的结果,可分为肯定答案和否定答案;根据解析答案是否由直接负责的DNS服务器返回,可分为权威答案和非权威答案
根据是否能够查询到想要的结果: ①肯定答案:存在查询的键(key),并且存在与其查询键对应的值(value)。 ②否定答案:不存在查询的键(key),因此,自然不存在与其查询键(value)对应的值。
根据解析答案是否由直接负责的DNS服务器返回: ①权威答案:由直接负责的DNS服务器返回的答案。( 递归查询 ) ②非权威答案:不是由直接负责的DNS服务器返回的答案。这种情况下一般是由其他DNS服务器直接返回缓存的解析结果。( 迭代查询 )
DNS协议的一种开源实现–bind 端口:53
提供dns服务的套件叫bind但执行服务名称的是named 我们说DNS是一种协议,而对于每一种协议的实现都需要程序员开发出遵循这种协议规范的软件程序来实现,这里要介绍的BIND就是DNS协议的一种开源实现。据统计,使用bind作为DNS服务器软件的DNS服务器大约占所有DNS服务器的九成。BIND全称为Berkeley Internet Name Domain,因为当今互联网上的通信几乎都必须借助于DNS服务器来解析主机名,得到通信对方的IP地址,而在DNS服务器上最常用的软件就是bind,所以,bind这款软件几乎可以说是当今互联网上常用的软件了。
bind的相关配置文件
etc/named.conf 主配置文件
/etc/rndc.conf 相关配置文件
/var/named/zidingyi.zone 区域数据文件,需要手动创建
/usr/sbin/named-checkconf 配置检查脚本工具
/usr/sbin/named-checkzone 区域配置检查工具
/var/named/named.ca 区域文件dns数据库
解析库文件:存放于/var/named/目录下,一般名字为ZONE_NAME.zone
DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议
rndc服务默认监听在tcp的953端口,且默认监听于127.0.0.1地址,因此默认仅允许本地使用。
rndc的常见用法: rndc reload:在不重新启动DNS服务的情况下,重新加载配置文件及zone.
资源记录名称
SOA(起始授权记录) 记录提供有关dns区域工作方式的信息 -----具体负责哪个区域的解析 (指定权威服务器)
这代表着master/salve相关的认证,授权资料。不论有没有设定master/salve的架构都需要设定好。
NS 标记dns服务器 将域名最终映射到哪一台主机(标记本地 dns服务器)
CNAME 记录域别名
PTR(用于反向DNS) 指针记录 将IPV4 IPV6地址映射到主机名
A(ipv4地址记录) 资源记录,将主机名映射到ipv4地址。
AAAA(ipv6地址记录) 资源记录,将主机名映射到ipv6地址。
MX 邮件交换记录,标记邮件服务主机名
TTL
$TTL 值 :当外部DNS服务器对你的DNS这个域进行查询时,这个记录会放置在对方的DNS服务器多久
五种定义的信息 serial number: 序列号 定义当前使用的数据序列号 sn遵循“年+月+日+编号” 主和从的更新依据 refresh: 定义检查间隔时间 (上次和这次变化的时间) retry: 重试时间 < 检查时间> expire: 过期时间 (什么时候通过从服务器解析) negative answer ttl: 否定答案的缓存时长 (没有指定生存期的数据可以保存在数据中的时间及TTL值)
时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
案例一:正向解析
服务端:
[root@localhost ~]
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
options {
listen-on port 53 { 192.168.72.130; };
directory "/var/named";
};
zone "openlab.com" IN {
type master;
file "named.openlab.com";
};
[root@localhost ~]
$TTL 1D
@ IN SOA @ admin.admin.com. (
0
1D
3H
1W
3H )
NS dns.openlab.com.
dns IN A 192.168.72.130
www IN A 192.168.72.100
ftp IN A 192.168.72.101
123 IN A 192.168.72.102
wwww IN CNAME www
[root@localhost ~]
客户端:
[root@localhost ~]
search localdomain
nameserver 192.168.72.2
[root@localhost ~]
search localdomain
nameserver 192.168.72.130
[root@localhost ~]
PING www.openlab.com (192.168.72.100) 56(84) bytes of data.
64 bytes from 192.168.72.100: icmp_seq=1 ttl=64 time=0.848 ms
64 bytes from 192.168.72.100: icmp_seq=2 ttl=64 time=0.646 ms
64 bytes from 192.168.72.100: icmp_seq=3 ttl=64 time=0.564 ms
--- www.openlab.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.564/0.686/0.848/0.119 ms
[root@localhost ~]
Server: 192.168.72.130
Address: 192.168.72.130
wwww.openlab.com canonical name = www.openlab.com.
Name: www.openlab.com
Address: 192.168.72.100
[root@localhost ~]
案例二:反向解析
服务端:
[root@localhost ~]
zone "72.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.72";
};
[root@localhost ~]
$TTL 1D
@ IN SOA @ rname.invalid. (
0
1D
1H
1W
3H )
IN NS dns.openlab.com.
130 IN PTR dns.openlab.com.
100 IN PTR www.openlab.com.
101 IN PTR ftp.openlab.com.
102 IN PTR 123.openlab.com.
[root@localhost ~]
客户端:
[root@localhost ~]
> 192.168.72.130
Server: 192.168.72.130
Address: 192.168.72.130
130.72.168.192.in-addr.arpa name = dns.openlab.com.
> 192.168.72.100
Server: 192.168.72.130
Address: 192.168.72.130
100.72.168.192.in-addr.arpa name = www.openlab.com.
> 192.168.72.101
Server: 192.168.72.130
Address: 192.168.72.130
101.72.168.192.in-addr.arpa name = ftp.openlab.com.
> exit
[root@localhost ~]
案例三:配置从服务器(slave) 完全区域传送
这里把刚刚的客户端主机,用来作为从服务器
从服务端:
[root@localhost ~]
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
options {
listen-on port 53 { 192.168.72.202; };
directory "/var/named/slaves";
};
zone "openlab.com" IN {
type slave;
file "named.openlab";
masters { 192.168.72.130; };};
zone "72.168.192.in-addr.arpa" IN {
type slave;
file "name.192";
masters { 192.168.72.130; };
};
主服务端:
[root@localhost ~]
options {
listen-on port 53 { 192.168.72.130; };
directory "/var/named";
allow-transfer { 192.168.72.202 };
};
zone "openlab.com" IN {
type master;
file "named.openlab.com";
};
zone "72.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.72";
};
[root@localhost ~]
从服务端:
[root@localhost ~]
[root@localhost slaves]
[root@localhost ~]
看到有新的文件写入slaves 现在可以通过从服务机进行解析:
[root@localhost ~]
> server 192.168.72.202
Default server: 192.168.72.202
Address: 192.168.72.202
> www.openlab.com
Server: 192.168.72.202
Address: 192.168.72.202
Name: www.openlab.com
Address: 192.168.72.100
> 192.168.72.102
Server: 192.168.72.202
Address: 192.168.72.202
102.72.168.192.in-addr.arpa name = 123.openlab.com.
>
案例四:配置从服务器(slave) 增量区域传送
在主服务机:
[root@localhost ~]
[root@localhost ~]
在从服务机:
[root@localhost ~]
案例五:配置转发服务器
重新开一台虚拟机,用做转发服务机
[root@my-rhel ~]
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@my-rhel ~]
[root@my-rhel ~]
options {
listen-on port 53 { 192.168.72.138; };
forwarders { 192.168.72.130; };
forward only;
};
[root@my-rhel ~]
[root@my-rhel ~]
[root@my-rhel ~]
[root@my-rhel ~]
> server 192.168.72.202
Default server: 192.168.72.202
Address: 192.168.72.202
> www.openlab.com
Server: 192.168.72.202
Address: 192.168.72.202
Name: www.openlab.com
Address: 192.168.72.100
> server 192.168.72.130
Default server: 192.168.72.130
Address: 192.168.72.130
> ftp.openlab.com
Server: 192.168.72.130
Address: 192.168.72.130
Name: ftp.openlab.com
Address: 192.168.72.101
>
|