DNS 基础
DNS 是计算机域名系统 (Domain Name System 或 Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的 IP 地址 (IP address)转换的服务器。DNS 中保存了一张域名(domain name)和与之相对应的 IP 地址 (IP address)的表,以解析消息的域名。 域名是 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地域
基本工作流程
相关概念
-
1.域名
域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。
注意域名对大小写不敏感
-
2.FQDN
FQDN全称为Fully Qualified Domain Name,即完全合格域名。FQDN由两个部分组成:主机名和域名。因为DNS是逐级管理的,所以在不同的层级中主机名与域名也是不同的;以www.google.com为例,在第二层中,.com就是域名,google就是主机名,而到了第三层中,.google.com就成了域名,www就成了主机名。 -
3.正向解析
从FQDN转换为IP地址称为正向解析。 -
4.反向解析
从IP地址转换为FQDN称为反向解析。 -
5.区域
正向解析或反向解析中,每个域的记录就是一个区域。
DNS的解析库
DNS的主要作用是进行主机名的解析。解析:根据用户提供一种名称,去查询解析库,以得到另一种名称。 正向解析与反向解析使用不同的解析库。
资源记录:rr(resource record),有类型的概念;用于此记录解析的属性。
• A:Address地址 IPv4
• AAAA:Address地址 IPv6
• NS:Name Server域名服务器
• SOA:Start of Authority授权状态
• MX:Mail Exchanger邮件交换
• CNAME:Canonical Name规范名
• PTR:Pointer指针
DNS的查询过程
DNS采用两种查询机制:递归(Recursive Query)和迭代(Iterative Query)。
递归查询:
迭代查询:
实际应用中,即使用递归查询,又使用迭代查询:
DNS的查询顺序
DNS使用的端口号
DNS协议使用udp/tcp的53端口提供服务,客户端向DNS服务发起请求时,使用udp的53端口;DNS服务器间进行区域传送的时候使用TCP的53端口。
DNS服务器类型
-
1.主DNS服务器
为客户端提供域名解析的主要区域,主DNS服务器宕机,会启用从DNS服务器提供服务。 -
2.从DNS服务器
主服务器DNS长期无应答,从服务器也会停止提供服务。
主从区域之间的同步采用周期性检查+通知的机制,从服务器周期性的检查主服务器上的记录情况,一旦发现修改就会同步,另外主服务器上如果有数据被修改了,会立即通知从服务器更新记录。 -
3.缓存服务器
服务器本身不提供解析区域,只提供非权威应答。 -
4.转发服务器
当DNS服务器的解析区域(包括缓存)中无法为当前的请求提供权威应答时,将请求转发至其它的DNS服务器,此时本地DNS服务器就是转发服务器。
BIND简介
现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。
BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows)
BIND服务的名称称之为named
DNS默认使用UDP、TCP协议,使用端口为53(domain),953(mdc,远程控制使用)
BIND安装
本例使用的环境是CentOS 7.2的Linux操作系统(非CentOS 7 系统,安装会有所区别),所以直接采用命令:
yum install -y bind bind-utils
扩展:bind-chroot和bind-utils是bind的相关包。(我们通常不安装bind-chroot,这里只做讲解)
BIND配置
- 1.BIND配置文件保存在两个位置:
/etc/named.conf - BIND服务主配置文件 /var/named/ - zone文件(域的dns信息)
如果安装了bind-chroot(其中chroot是 change root 的缩写),BIND会被封装到一个伪根目录内,配置文件的位置变为:
/var/named/chroot/etc/named.conf - BIND服务主配置文件 /var/named/chroot/var/named/ - zone文件(域的dns信息)
chroot是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容,而不是真实的根目录
- 2.BIND安装好之后有预制的配置文件,文件为/etc/named.conf,在BIND的文档文件夹内也有可供复制的主配置文件(/usr/share/doc/bind-x.x.x),BIND为我们提供了配置文件模板,我们可以直接拷贝过来
当前版本有预制文件,所以这一步可以忽略,了解即可
cp -r /usr/share/doc/bind-9.9.4/sample/etc/* /etc/ cp -r /usr/share/doc/bind-9.9.4/sample/var/* /var/named/
- 3.配置BIND服务的主配置文件(etc/named.conf),命令:
vim /etc/named.conf
修改DNS安全认证验证:
dnssec-enable yes; --更改为 dnssec-enable no; dnssec-validation yes; --更改为 dnssec-validation no;
开发 DNSSEC 技术的目的之一是通过对数据进行数字“签名”来抵御此类攻击,从而使您确信数据有效。但是,为了从互联网中消除该漏洞,必须在从根区域到最终域名(例如, www. icann. org )的查找过程中的每一步部署该项技术。对根区域进行签名(在根区域部署 DNSSEC )是整个过程中的 必要步骤。需要说明的是,该技术并不对数据进行加密。它只是验证您所访问的站点地址是否有效。
部署DNSSEC有两种场景
1.配置安全的域名解析服务器(Resolver),该服务器可以保护使用它的用户,防止被DNS 欺骗攻击。这里只涉及数字签名的验证工作。
2.配置安全的权威域名服务器(Name Server),对权威域的资源记录进行签名,保护服务器不被域名欺骗攻击。
一般DNS都属于转发服务器,所以需要取消安全验证才可以正常使用DNS服务
修改监听IP并且注释IPV6监听(本次使用IP为192.168.2.136):
listen-on port 53 { 192.168.2.136; }; # listen-on-v6 port 53 { ::1; };
修改允许任何IP查询(该配置可限制其他设备使用DNS):
allow-query { localhost; }; --更改为 allow-query { any; };
- 4.检查配置文件并且重启bind服务
named-checkconf #无结果返回,则配置正常
重启命令
CentOS7:
systemctl restart named
CentOS6:
service named restart
- 5.测试解析域名(常用解析命令dig,nslookup 具体用法请百度,本次不做介绍)
本机dig命令 (+short参数为简短输出 @指定DNS解析)
本机nslookup命令 (使用格式:nslookup 域名 DNSIP)
Windows机器测试解析(win系统自带nslookup工具)
至此,DNS服务器搭建完毕,可正常进行服务
BIND9程序发布FTP地址:ftp://ftp.isc.org/isc/bind9/
原文链接:https://www.cnblogs.com/kepp/p/14991840.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/21899