DNS(Domain name server,域名服务器)
是进行域名和与之对应的IP地址转换的服务器。
我们平时上网都是输入主机名来访问网站的,例如:www.baidu.com,这是一个主机名;
俩主机间通信要使用 IP+端口 的方式,因为IP地址不容易被人记忆,所以就使用方便人记忆的主机名,而电脑更容易接受IP地址的方式,所以我们就需要一个‘翻译官’——域名服务器。它可以把IP转换为主机名,也可以将主机名转换为IP地址;
早期,为了提供主机名与IP地址对应的应用,在本地引入了一个hosts文件,里面记录了每个主机名字和IP地址的对应关系;一个主机名还可以有多个别名。
随着互联网内的主机的增多,hosts文件也越来越大,而且还要不断更新,这种方法就不适用了;
这时,DNS服务器应运而生;
DNS协议采用分层的倒置的树状结构机制管理主机名,把大范围分成多个小范围。例如:你要申请一个域名baidu.con,在这个域名范围内添加3个主机:
一个是www,这个域名就是www.baidu.com;
一个主机作为bbs论坛使用,这个域名就是bbs.baidu.com;
一个主机作为blog博客使用,这个域名就是blog.baidu.com;
就是基于这种机制管理主机名的,因此,最顶级的叫根域.(点号)表示,即所有主机名都在根域下;
一级域:按照组织的类型的不同分为:
.com 表示商业机构
.org 表示非盈利性组织
.gov 表示政府机构
.mil 表示军事机构
.net 表示网络服务机构
.edu 表示教育机构
.name 表示个人网站
.info 表示信息提供
DNS查询类型:
递归查询:本地客户端向本地的DNS服务器查询,只发出去一次请求,就给它返回答案;就像你找人问路,那个人虽然不知道你的目的地,但他会问朋友或者别人,直到问到答案人后交给你。
迭代查询:要发出去多次请求,需要自己查询不同的域名,最后才返回答案。再说上面问路的事,这次是你问A,A说B知道,你去问B吧;你问B,B说C知道,你问C去吧,就这样,直到你问出答案。
全球有13台根服务器
域名空间:父域只知道自己直属子域的地址,子域不知道父域的地址,所有DNS都知道13台根域的地址;
DNS服务器角色
主DNS:存放区域文件,管理域资源;
辅DNS:没有自己的区域文件,区域数据是从主DNS复制而来;
缓存服务器:(cache-only):提供高速缓存;
域资源类型
SOA:起始授权机构,定义DNS区域中的权威服务器;
NS:定义DNS区域正在提供DNS服务的主机;
A记录:主机记录(正向区域);
PTR指针:反向记录;
MX:邮件交换记录;
*:泛域名
CNAME:别名
DNS服务器端口
TCP:53(负责主/辅DNS数据复制)
UDP:53(负责DNS解析)
DNS主配置文件
options { #选项
listen-on port 53 { 192.168.100.136; }; #服务监听端口为53
listen-on-v6 port 53 { ::1; }; #服务监听端口为53(ipv6)
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 { localhost; }; #允许连接的客户机
recursion yes; #递归查找
dnssec-enable yes; #DNS加密
dnssec-validation yes; #DNS加密高级算法
dnssec-lookaside auto; #DNS加密的相关东西
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key"; #加密用的key(私钥公钥的加密,很强)
};
logging { #日志
channel default_debug {
file "data/named.run"; #运行状态文件
severity dynamic; #静态服务器地址(根域)
};
};
zone "." IN { #根域解析
type hint;
file "named.ca"; #根域配置文件
};
include "/etc/named.rfc1912.zones"; #扩展配置文件(新开域名)
/etc/named.rfc1912.zones 文件分析
zone "localhost.localdomain" IN { #本地主机全名解析
type master; #类型为主域
file "named.localhost"; #域配置文件(文件存放在/var/named目录中)
allow-update { none; }; #不允许客户端更新
};
zone "localhost" IN { #本地主机名解析
type master;
file "named.localhost";
allow-update { none; };
};