bind DNS服务配置
域名
当你访问网站时,你可以输入FQDN(Fully Qualified Domain Name,完全限定域名)或类似likegeeks.com或www.google.com的域名。在域名中从右到左的两个点之间的每个文本依次是顶级域组件、二级域组件和三级域组件。
所以,com是顶级域名组件; google是二级域组件; 而www是三级域名组件。
实际上,当你访问任何网站时,浏览器会默认在域的末尾添加一个不可见的点,因此该域将像www.google.com.一样。 该点被称为根域。
该点是由一大堆称为根域名服务器的特殊服务器管理的。截止这篇文章发表前,世界上有13个根域名服务器。 你可以把他们当成互联网的大脑 – 如果他们失效了,世界上就没有互联网了。
DNS服务器的类型
一共有三种DNS服务器。
主DNS服务器
这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定域名的地址。主DNS服务器知道全部在它管辖范围的主机和子域名的地址。
辅助DNS服务器
这些服务器作为主DNS服务器的备份,也承担一定负载。主服务器知道辅助DNS服务器的存在,并且会向他们推送更新。
缓存DNS服务器
这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。您也可以轻松地将自己的系统用作缓存服务器。
hosts文件
在没有DNS服务器的情况下,每个系统在本地网络上保留其主机名和相应IP地址列表的副本是合理的——特别是在没有互联网连接的小型站点上。
在Linux系统中,这个列表就是/etc/hosts文件。 即使你没有DNS服务器或DNS服务器不可用,该文件也可以使用/etc/hosts文件将IP地址转换为名称。
也许你已经有DNS服务器了,但你也会因为其它原因而想保留这个文件。例如,系统可能需要在向外部查询之前在本地查找DNS服务器的IP地址;这意味着系统在查询DNS服务器之前先检索该文件,如果查找到对应的域则无须查询任何DNS服务器直接将其转换为IP地址。
目录结构
主配置文件
/etc/named.conf
DNS数据库目录
/var/named/
DNS地址配置文件
/etc/resolv.conf
hosts文件
/etc/hosts
|hosts配置文件
/etc/host.conf
(开启关闭hosts功能)
安装
yum install bind //DNS服务端
配置
这个服务使用 /etc/named.conf 作为配置文件。
BIND 在那个文件中使用像下面这样的一些语句:
options: 用于全局 BIND 配置。
logging: 配置哪些需要记录,哪些需要忽略。我推荐你看看 Linux syslog server。
zone: 定义 DNS 区域。
include: 在 named.conf 中包含另一个文件。
在 options 语句中可以看到 BIND 的工作目录在 /var/named。
zone 语句可用于定义 DNS 区域,比如域名 google.com,它包含子域名 mail.google.com 和 analytics.google.com。
上述三个域名(主域名和子域名) 都有一个由 zone 语句定义的区域。
1、修改主配置文件/etc/named.conf,开启DNS服务的监听
vi /etc/named.conf
listen-on port 53 {any;};
//将监听的地址改为any,监听本机的所有地址。
listen-on-v6 port 53 {any;};
allow-query { any; };
//改为any,允许任意主机查询
2、定义一个主域服务器(创建正向解析区域)
可以在named.conf 中添加,也可以添加在其他辅配置文件中,然后在named.conf中包含进来
例如:
include "/etc/named.rfc1912.zones";
vi /etc/named.conf //编辑辅配置文件
zone "xx.com" IN {
type master;
file "xx.com.zone";
allow-update { none; };
};
//添加正向解析区域 xx.com
//使用file 参数指出该区域的数据库文件(默认/var/named目录下,根据主配置文件的参数决定)
3、创建正向解析数据库文件,并修改权限。
cd /var/named
cp named.localhost xx.com.zone
chmod 644 xx.com.zone //使named用户拥有读取的权限
vi xx.com.zone //编辑数据库文件,设置解析条目
NS @
A 192.168.128.133
AAAA ::1
www A 192.168.128.133
//格式如图所示。 A 对应 IPv4的解析条目 AAAA对应IPv6的解析条目。
//注意不可缺少
A 192.168.128.133
AAAA ::1
不能缺少没有主机名的这两项,否则会造成服务无法启动。逆向解析数据库也是如此。
4、修改本机DNS地址,重启named服务,测试本机DNS服务是否有效。
vi /etc/resolvconf
//修改本机的DNS地址,改为127.0.0.1或本机IP
service named restart //重启DNS服务
nslookup www.xx.com
5、创建逆向解析条目和数据库
vi /etc/named.rfc1912.zones //编辑DNS辅配置文件
//参考末尾的逆向解析条目,创建自己的逆向解析。
zone "128.168.192.in-addr.arpa" IN {
type master;
file "128.168.192.zone";
allow-update { none; };
};
//注意格式问题,比如IP地址点分十进制的格式,每个十进制为一个整体,倒着书写,且不写主机位。
//“.in-addr.arpa” 为逆向解析的固定格式 不能写错。
//数据库文件可以新建,也可以使用正向的数据库,在其中添加逆向的条目。
//注意权限问题。
cd /var/named
cp named.localhost 128.168.192.zone
chmod 644 128.168.192.zone
6、编辑逆向解析条目
vi 128.168.192.zone
133 PTR www.xx.com.
//此为逆向解析的条目格式
不能缺少没有主机名的这两项,否则会造成服务无法启动。逆向解析数据库也是如此。
7、重启服务,进行检测
service named restart
[root@conling named]# nslookup 192.168.128.133
Server: 192.168.128.133
Address: 192.168.128.133#53
133.128.168.192.in-addr.arpa name = www.alibaba.com.
DNS记录类型
数据库文件包含诸如SOA、NS、A、PTR、MX、CNAME和TXT在内的记录类型。
A和AAAA: Address Records(地址记录)
A记录用于提供从主机名到IP地址的映射support IN A 192.168.1.5。
如果你在地址为192.168.1.5上的support.example.com上有一个主机,你可以像上面的例子那样输入。
请注意,我们所写的主机并没有句号。
PTR: Pointer Records(指针记录)
PTR记录用于执行反向名称解析,允许某人指定IP地址然后找出对应的主机名。
这与A记录的功能相反:192.168.1.5 IN PTR support.example.com.
在这里,我们键入具有点号的完整主机名。
MX: Mail Exchange Records(邮件交换记录)
MX记录告诉其他站点关于你所在域的邮件服务器地址:example.com. IN MX 10 mail.
当然这个域以句号结束。数字10是邮件服务器的重要性标志,如果你拥有多个邮件服务器,其中较小的数字不太重要。
CNAME: Canonical Name Records(权威名称记录)
CNAME记录允许你为主机名创建别名。当你想提供一个易于记住的名称时,这很有用。
假设某个站点具有一个主机名为whatever-bignameis.example.com的Web服务器,并且由于系统是Web服务器,因此可以为主机创建一个名为www的CNAME记录或者别名。
你可以创建名为www.example.com的域名创建CNAME记录:
whatever-bignameis IN A 192.168.1.5
www IN CNAME whatever-bignameis
第一行通知DNS服务器关于别名的位置。第二行创建一个指向www的别名。
TXT记录
您可以将任何信息存储到TXT记录中,例如你的联系方式或者你希望人们在查询DNS服务器时可获得的任意其他信息。
你可以这样保存TXT记录:example.com. IN TXT ” YOUR INFO GOES HERE”.
此外,RP记录被创建为对host联系信息的显式容器:example.com. IN RP mail.example.com. example.com。
DNS TTL值
在/etc/named.conf文件的顶部,这里有一个$TTL条目。
该条目告诉BIND每个单独记录的TTL值(time to live,生存时间值)。
它是以秒为单位的数值,比如14,400秒(4个小时),因此DNS服务器最多缓存你的域文件4个小时,之后就会向你的DNS服务器重新查询。
你可以降低这个值,但是默认值通常是合理的。除非你知道你正在做什么。
Host命令
在你成功添加或修改记录后,可以使用host命令查看主机是否正确解析。
host命令允许你将主机名解析为IP地址:$ host example.com。
此外,你可以执行反向查找:$ host 192.168.1.5。
你可以this在此篇文章中查看更多关于host和dig命令的信息。
Whois命令
whois命令用于确定域名的所有权及其拥有者的e-mail地址和联系电话:$ whois example.com.
Rndc命令
rndc工具可用于安全地管理名称服务器,因为与服务器的所有通信均通过数字签名进行身份验证。
此工具用于控制名称服务器和调试问题。 你可以通过以下方式检查Linux DNS服务器的状态:$ rndc status。
此外,如果你更改任何域(zone)文件,您可以重新加载服务,而无须重启命名服务:$ rndc reload example.com。
在这里,我们重新加载example.com域文件。 你可以重新加载所有域:$ rndc reload。
或者你可以添加新的域或更改服务的配置。 你可以重新加载配置,如下所示:
$ rndc reconfig。
Linux DNS解析器
我们已经知道Linux DNS服务器的工作原理以及如何配置它。另一部分当然是与DNS服务器交互的(正在与DNS服务器通信以将主机名解析为IP地址的)客户端。
在Linux上,解析器位于DNS的客户端。要配置解析器,可以检查/etc/resolv.conf这个配置文件。
在基于Debian的发行版上,可以查看/etc/resolvconf/resolv.conf.d/目录。
/etc/resolv.conf文件中包含客户端用于获取其本地DNS服务器地址所需的信息。
第一个表示默认搜索域,第二个表示主机名称服务器(nameserver)的IP地址。
名称服务器行告诉解析器哪个名称服务器可使用。 只要你的BIND服务正在运行,你就可以使用自己的DNS服务器。
错误整理:
一、逆向解析条目中 指定的解析出来的名字需要带上‘.’
比如 254 PTR xx.com. // PTR是指针 ‘.’
如果不携带‘.’ 则会出现
[root@conling named]# nslookup 192.168.128.133
Server: 192.168.128.133
Address: 192.168.128.133#53
133.128.168.192.in-addr.arpa name = www.xx.com.128.168.192.in-addr.arpa.
//解析出来的域名不能正确显示(‘.’的作用)
二、逆向解析区域条目名错误
zone "128.168.192.in-addr.arpa" IN {
type master;
file "xx.com.zone";
allow-update { none; };
};
//上面为正确的格式
//将第一行改为
zone "128.168.192.in-addr-arpa" IN {
//‘.’改为‘-’ 在查询的时候就无法匹配到该条目
[root@conling named]# nslookup 192.168.128.133
Server: 192.168.128.133
Address: 192.168.128.133#53
** server can't find 133.128.168.192.in-addr.arpa.: NXDOMAIN
三、修改了默认端口号
主配置文件/etc/named.conf中可以修改监听的端口号,将53修改为其他端口会导致无法解析。
nslookup 192.168.128.133
;; connection timed out; trying next origin
;; connection timed out; no servers could be reached
//连接超时
四、对数据库文件没有读取的权限
1、数据库文件的权限:
-rw-r--r--. 1 root root 201 6月 14 12:09 xx.com.zone
2、查询验证无误
[root@conling named]# nslookup www.xx.com
Server: 192.168.128.133
Address: 192.168.128.133#53
Name: www.xx.com
Address: 192.168.128.133
3、修改权限,取消named的读取
-rw-------. 1 root root 201 6月 14 12:09 xx.com.zone
4、查询验证
[root@conling named]# nslookup www.xx.com
Server: 192.168.128.133
Address: 192.168.128.133#53
** server can't find www.xx.com: NXDOMAIN
五、解析的条目不存在
//在数据库中不存在匹配的条目时:
[root@conling named]# nslookup 192.168.128.13
Server: 192.168.128.133
Address: 192.168.128.133#53
** server can't find 13.128.168.192.in-addr.arpa.: NXDOMAIN