搭建DNS服务器
前提知识
- 1、什么是DNS及其作用?
- 2、域名空间结构?
- 3、域名解析过程?
前提解答
1、DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
2、域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机和域名。DNS数据库中的名称形成一个分层的树状结构;域名在拼装时,是沿着这颗树的最下面往树根上走的;例如:www.baidu.com,其实改余名的完整写法应该是:www.baidu.com. 注意域名最后面有一个 “.”;
3、假设我们第一次通过浏览器访问www.baidu.com这个域名。DNS如何查找到www.baidu.com这台主机呢?如下
- 第一步:当我们在浏览器中输入www.baidu.com后我们的个人电脑首先在本机查找hosts文件中是否有www.baidu.com的指向,如果有则直接访问www.baidu.com所对应的主机;如果没有在查找本DNS缓存中是否有之前的查询记录。如果都没有则将请求交给本地首先DNS指向的本地DNS服务器为我们查询。进入第二步;
- 第二步:本地DNS接收到查询请求后首先看www.baidu.com是否是自己负责解析的域,如果是则将结果返回给用户主机,如果不是自己负责的区域,则查看DNS服务器数据库缓存中是否有之前的解析记录;如果有则将查询结果返回给用户主机;如果没有则由本地DNS服务器向根DNS服务器查询;进入第三步;
- 第三步:本地DNS服务器向 “.” 根DNS服务器查询www.baidu.com域名,根收到请求后查看该域名由哪个顶级域负责授权,根本身不负责,于是将.com所在服务器的IP地址返回一个给本地DNS服务器;说你去找.com吧这个事它负责;进入第四步;
- 第四步:本地DNS服务器拿到.com域的地址后就去找.com,.com收到请求后发现它也不知道www.baidu.com在哪,但是它知道baidu.com;于是.com将baidu.com这个域所在服务器的地址返回给本地DNS服务器,说你去找baidu.com吧,这个事它负责;进入第五步;
- 第五步:本地DNS拿到地址后,向baidu.com发起请求,baidu.com收到请求后发现正是自己负责的区域,于是将www.baidu.com所在服务器的地址返回给本地DNS服务器;进入第6步;
- 第六步:本地DNS收到返回的请求后,将结果返回给用户主机并且缓存到本地一份;于是本地用户主机就拿着地址找到了www.baidu.com;
DNS查询类型
正向查询和反向查询
正向查询:根据域名查询IP
反向查询:根据IP查询域名
递归查询和迭代查询
递归查询:本地主机向本地DNS服务器查询的阶段;第一步到第二步属于递归查询;
迭代查询:本地DNS服务器向根域、顶级域、二级域查询的阶段,第三步到第五步就属于迭代查询;
如图所示:
bind安装
# 可以笼统的安装bind相关的包
[root@dnsmaster ~]# yum install -y bind*
# 可以精准安装
[root@dnsmaster ~]# yum install -y bind bind-chroot bind-utils bind-libs
# 说明
bind //提供了域名服务的主要程序及相关文件
bind-chroot //提供了对DNS服务器的测试工具程序(如nslookup、dig等)
bind-utils //为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”目录作为BIND的根目录)
bind-libs //被bind和bind-utils包中的程序共同用到的库文件
bind配置文件
# 主要的配置文件:
[root@dnsmaster ~]# vim /etc/named.conf
options {} - 整个Bind的使用的全局选项(全局配置段)
logging {} - 服务日志选项(日志配置段)
zone . {} - DNS域解析(区域配置段)
文件配置说明:
options {
listen-on port 53 { 127.0.0.1; }; # 指定域名服务监听的网络端口,建议写本机IP,减少服务器消耗
listen-on-v6 port 53 { ::1; };
directory "/var/named"; # 指定named从/var/named目录下读取DNS数据文件
dump-file "/var/named/data/cache_dump.db"; # # 当执行导出命令时将DNS服务器的缓存数据存储到指定的文件中
statistics-file "/var/named/data/named_stats.txt"; # 指定named服务的统计文件,当执行统计命令时会将内存中的统计信息追加到该文件中
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; }; # 允许哪些客户端访问DNS服务,此处改为“any”,表示任意主机
recursion yes; # 开启递归查询
dnssec-enable yes; # 开启加密
dnssec-validation yes; # 在递归查询服务器上开启DNSSEC验证
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging { # named服务的日志文件信息
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
# 每一个zone就是定义一个域的相关信息以及指定了named服务从哪些文件中获得DNS各个域名的数据文件
zone "." IN { # 根(.)域的配置及信息(配置缓存域名服务器,可以自己去了解)
type hint; # 服务器类型
file "named.ca"; # 文件路径位置
};
include "/etc/named.rfc1912.zones"; # include代表该文件是子配置文件
include "/etc/named.root.key";
开启服务:
[root@dnsmaster ~]# systemctl start named.service --启动DNS服务
[root@dnsmaster ~]# systemctl enable named.service --设置为开机启动
[root@dnsmaster ~]# netstat -anlp | grep named --查看监听端口为53
named作为标准的系统服务脚本,通过“systemctl start/restart/stop named.service”的形式可以实现对服务器程序的控制。
named默认监听TCP、UDP协议的53端口,以及TCP的953端口;
其中UDP 53端口一般对所有客户机开放,以提供解析服务;
TCP 53端口一般只对特定从域名服务器开放,提高解析记录传输通道;TCP 953端口默认只对本机(127.0.0.1)开放,用于为rndc远程管理工具提供控制通道。
配置文件的目录:
没有安装bind-chroot软件包
配置文件为/etc/named.conf
数据文件在/var/named目录下
安装了bind-chroot软件包
配置文件为/var/named/chroot/etc/named.conf --默认没有
数据文件在/var/named/chroot/var/named目录
从上面看到装了bind-chroot,笼环境为/var/named/chroot/
简单例子
建立一个基本的正向解析记录,反向解析多用在邮件服务上。
[root@dnsmaster ~]# vim /etc/named.conf
options{
directory "/var/named"; # 设置zone解析记录文件空间保存的位置
};
zone "imooc.com" {
type master; # 服务类型可以有三种:hint(根区域)、master(主区域)、slave(辅助区域)
file "imooc.com.zone"; # 域名与IP地址解析规则保存的文件位置
allow-update { none; }; # 允许哪些客户机动态更新解析信息
};
zone "iaskjob.com" {
type master;
file "iaskjob.com.zone";
allow-update { none; };
};
编辑imooc.com.zone规则文件:
# A记录:
$TTL 7200
@ IN SOA imooc.com. admin.imooc.com. (222 1H 15M 1W 1D)
imooc.com. IN NS dns1.imooc.com.
dns1 IN A 192.168.116.100
www IN A 115.182.41.180
# CNAME记录
$TTL 7200
iaskjob.com. IN SOA iaskjob.com. iaskjob.163.com. (4012100 1H 15M 1W 1D)
iaskjob.com. IN NS dns1.iaskjobs.com.
dns1.iaskjob.com. IN A 192.168.116.100
imooc.iaskjob.com. IN CNAME www.imooc.com.
配置参数:
递归查询
参数 | 选项 | 作用 |
---|---|---|
recursion | yes/no | 是否允许递归请求 |
allow-recursion | {address_match_list/any/none;}; | 允许递归请求的范围 |
recursive-clients | number | 客户端执行递归请求数量 |
DNS转发
参数 | 选项 | 作用 |
---|---|---|
forwarders | {address_list}; | 转发的服务器列表 |
forwarder only | 无 | 只由目的服务器权威解析 |
forwarder first | 无 | 优先转发查询 |