DNS服务器搭建(主、从、缓)

时间:2024-01-14 19:15:50

主dns服务器搭建

在本机上搭建一个管理hngd.com域名的域名服务器
1. 确保安装好以下bind域名服务器

[root@主人 ~]# rpm -qa |grep ^bind
bind-chroot-9.8.2-0.17.rc1.el6.x86_64
bind-libs-9.8.2-0.17.rc1.el6.x86_64
bind-9.8.2-0.17.rc1.el6.x86_64
bind-utils-9.8.2-0.17.rc1.el6.x86_64

2. 在主配置文件定义hngd.com正向区域和反向区域,定义完成后使用named-checkconf检查语法是否正确。

[root@主人 ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.100.20; }; //监听ip为192.168.100.20的网卡
listen-on-v6 port 53 { ::1; };
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 { any; }; //允许任何地址来访问
recursion yes;

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};
zone "hngd.com" IN{ //配置域名hngd.com正向解析
type master;
file "hngd.zones";
allow-update { none; }; //是否允许客户机对dns配置进行更新,none表示不允许
};

zone "100.168.192.in-addr.arpa" IN{ //配置域名hngd.com的反向解析
type master;
file "192.168.100.zone";
allow-update{ none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

[root@主人 ~]# named-checkconf /etc/named.conf //检测/etc/named.conf文件有没有语法错误
[root@主人 ~]#

3. 在/var/named目录下编辑正、反解析数据文件,要注意域名必须以‘.’结尾

[root@主人 ~]# cat /var/named/hngd.zones //hngd.com的正向解析数据文件
$ORIGIN hngd.com. //声明该文件属于哪个域名
$TTL 1D
@ IN SOA dns.hngd.com. admin.hngd.com. ( //在‘(’前需要留一个空格
2016032011
1D
1H
1W
3H
)
NS dns.hngd.com. //名字服务器
MX 5 mail.hngd.com. //邮件服务器
dns IN A 192.168.100.20
mail IN A 192.168.100.10
www IN A 192.168.100.11
bbs IN CNAME www

[root@主人 ~]# cat /var/named/192.168.100.zone //反向解析文件
$ORIGIN 100.168.192.in-addr.arpa.
$TTL 1D
@ IN SOA dns.hngd.com. admin.hngd.com. (
2016032011
1D
1H
1W
3H
)
NS dns.hngd.com.
20 IN PTR dns.hngd.com.
10 IN PTR mail.hngd.com.
11 IN PTR www.hngd.com.

4. 用named-checkzone检测正、反解析数据文件语法的正确性

[root@主人 ~]# named-checkzone hngd.com /var/named/hngd.zones
zone hngd.com/IN: loaded serial 2016032011
OK

[root@主人 ~]# named-checkzone 100.168.192.in-addr.arpa /var/named/192.168.100.zone
zone 100.168.192.in-addr.arpa/IN: loaded serial 2016032011
OK

5.做完上面这些我们还要更改/etc/resolv下面的域名服务器
[root@主人 ~]# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
#nameserver 114.114.114.114
nameserver 192.168.100.20

6. 虽然现在重启named服务不会报错,但如果我们去查看/var/log/messages文件会发现权限问题,我们需要将/var/named目录下所有文件的属主和属组改为named,selinux记得也要关闭
#/var/logmessages
Mar 20 14:20:20 主人 named[3186]: none:0: open: /etc/rndc.key: permission denied
Mar 20 14:20:20 主人 named[3186]: couldn't add command channel 127.0.0.1#953: permission denied

[root@主人 ~]# chown named:named /var/named/*

7. 现在因该没问题了,让我们来重启named服务,发现卡在Generating /etc/rndc.key:上很长时间
解决方法:
执行以下命令:rndc-confgen -r /dev/urandom -a
然后再重启DNS服务:service named start 服务正常启动

8. 查看53号端口有没有打开
[root@主人 ~]# lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 3288 named 20u IPv4 17544 0t0 TCP localhost:domain (LISTEN)
named 3288 named 21u IPv4 17546 0t0 TCP 10.0.6.77:domain (LISTEN)
named 3288 named 22u IPv4 17548 0t0 TCP dns.hngd.com:domain (LISTEN)
named 3288 named 23u IPv6 17550 0t0 TCP localhost:domain (LISTEN)
named 3288 named 512u IPv4 17543 0t0 UDP localhost:domain
named 3288 named 513u IPv4 17545 0t0 UDP 10.0.6.77:domain
named 3288 named 514u IPv4 17547 0t0 UDP dns.hngd.com:domain
named 3288 named 515u IPv6 17549 0t0 UDP localhost:domain

[root@主人 ~]# netstat -anptlu |grep named //这个命令也可以获得同样的效果

9. 用nslookup来检测dns
[root@主人 ~]# nslookup
> www.hngd.com
Server: 192.168.100.20
Address: 192.168.100.20#53

Name: www.hngd.com
Address: 192.168.100.11
> 192.168.100.20
Server: 192.168.100.20
Address: 192.168.100.20#53

20.100.168.192.in-addr.arpa name = dns.hngd.com.
> set type=MX
> 192.168.100.10
Server: 192.168.100.20
Address: 192.168.100.20#53

10.100.168.192.in-addr.arpa name = mail.hngd.com.


从DNS域名服务器的搭建

构建辅助域名服务器
辅助域名服务器也可以向客户机提供域名解析功能,但它与主域名服务器不同的是,它的数据不是直接输入的,而是从其他服务器(主域名服务器或其他辅助域名服务器)中复制过来的,只是一份副本,所以辅助服务器中的数据无法被修改

在一个区域设置多台辅助域名服务器具有以下优点:
1. 提供容错功能。当主域名服务器发生故障时,由辅助域名服务器提供服务
2. 分担主域名服务器的负担。在DNS客户端较多的情况下,通过假设辅助域名服务器完成对客户端的查询服务,可以有效的减轻主域名服务器的负担
3. 加快查询的速度

Slave端的配置
1. 辅助域名服务器的主配置文件的配置
[root@lcl ~]# cat /etc/named.conf
options {
listen-on port 53 { 192.168.100.2; };
listen-on-v6 port 53 { ::1; };
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 { any; };
recursion yes;

bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};
zone "hngd.com" IN {
type slave; //声明从域名服务器
masters { 192.168.100.20; }; //指明主服务器地址
file "slaves/hngd.zones"; //从域名服务器的区域文件存放位置
};
zone "100.168.192.in-addr.arpa" IN {

type slave;
masters { 192.168.100.20; };
file "slaves/192.168.100.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

2. 将/etc/resolv.conf的nameserver指向192.168.100.2
3. 关闭防火墙和selinux
4. 重启named服务,再查看/var/named/slaves,发现自动生成正、反解析数据文件
[root@lcl ~]# ls /var/named/slaves/
192.168.100.zone hngd.zones
5. 测试是否能进行dns解析
[root@lcl ~]# nslookup www.hngd.com
Server: 192.168.100.2
Address: 192.168.100.2#53

Name: www.hngd.com
Address: 192.168.100.11

6. 现在我再来做个测试,我将主域名服务器的正、反解数据文件进行更新,将序列号加1,并添加slave这个域名,如下所示:
[root@主人 ~]# cat /var/named/hngd.zones
$ORIGIN hngd.com.
$TTL 1D
@ IN SOA dns.hngd.com. admin.hngd.com. (
2016032012
1D
1H
1W
3H
)
NS dns.hngd.com.
NS slave.hngd.com.
MX 5 mail.hngd.com.
slave IN A 192.168.100.2
dns IN A 192.168.100.20
mail IN A 192.168.100.10
www IN A 192.168.100.11
bbs IN CNAME www
[root@主人 ~]# cat /var/named/192.168.100.zone
$ORIGIN 100.168.192.in-addr.arpa.
$TTL 1D
@ IN SOA dns.hngd.com. admin.hngd.com. (
2016032012
1D
1H
1W
3H
)
NS dns.hngd.com.
20 IN PTR dns.hngd.com.
10 IN PTR mail.hngd.com.
11 IN PTR www.hngd.com.
2 IN PTR slave.hngd.com.

7. 由于更新时间太长,所以我直接将从域名服务器下的正、反解析数据文件删除,再重启named服务,再查看发现那两个文件也进行了更新
[root@lcl ~]# cd /var/named/slaves/
[root@lcl slaves]# rm -rf *
[root@lcl slaves]# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@lcl slaves]# ls
192.168.100.zone hngd.zones
[root@lcl slaves]# cat 192.168.100.zone
$ORIGIN .
$TTL 86400 ; 1 day
100.168.192.in-addr.arpa IN SOA dns.hngd.com. admin.hngd.com. (
2016032012 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.hngd.com.
$ORIGIN 100.168.192.in-addr.arpa.
10 PTR mail.hngd.com.
11 PTR www.hngd.com.
2 PTR slave.hngd.com.
20 PTR dns.hngd.com.
[root@lcl slaves]# cat hngd.zones
$ORIGIN .
$TTL 86400 ; 1 day
hngd.com IN SOA dns.hngd.com. admin.hngd.com. (
2016032012 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.hngd.com.
NS slave.hngd.com.
MX 5 mail.hngd.com.
$ORIGIN hngd.com.
bbs CNAME www
dns A 192.168.100.20
mail A 192.168.100.10
slave A 192.168.100.2
www A 192.168.100.11


cache only DNS服务器

配置缓存Cache-only服务器

Cache-only服务器是很特殊的DNS服务器,它本身并不管理任何区域,但是DNS客户端仍然可以向它请求查询。Cache-only服务器类似于代理服务器,它没有自己的域名数据库,而是将所有查询转发到其他DNS服务器处理。当Cache-only服务器收到查询结果后,除了返回给客户机外,还会将结果保存在缓存中。当下一个DNS客户端再查询相同的域名数据时,就可以从高速缓存里查出答案,加快DNS客户端的查询速度。如果在局域网中建立一台这样的DNS服务器,就可以提高客户机DNS的查询效率并减少内部网络与外部网络的流量。

架设Cache-only服务器非常简单,只需要建立好主配置文件named.conf即可。架设Cache-only服务器的主配置文件/etc/named.conf也需要设置服务器的选项,方法与设置主要名称服务器的方法相同,这里就不再重复了。下面通过实例来讲解各项配置。

案例:将当前ip为192.168.100.254的主机配置为缓存域名服务器

1. 建立named.conf主配置文件

[root@dns ~]# cat /etc/named.conf
options {
listen-on port 53 {192.168.100.254; };
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 { any; };
recursion yes; //是否允许递归

forward only; //仅转发;forward first :首先使用转发,如果 forwarders list 中的DNS主机不应答,该主机将自己去找应答
forwarders { 192.168.100.20; }; //将收到的所有dns请求转发给192.168.100.20服务器
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};

2. 用named-checkconf检测named.conf的语法
[root@dns ~]# named-checkconf /etc/named.conf
[root@dns ~]#

3. 将/etc/resolv.conf的nameserver指向缓存域名服务器
[root@dns ~]# cat /etc/resolv.conf
nameserver 192.168.100.254

4. 重启named服务
5. 现在如果检测,会发现不能进行域名解析,会出现这个问题的原因可能是192.168.100.20域名服务器的防火墙和selinux没有关闭
6. 解决完以上问题后,我们再来检测
[root@dns ~]# nslookup
> server 192.168.100.254
Default server: 192.168.100.254
Address: 192.168.100.254#53
> www.hngd.com
Server: 192.168.100.254
Address: 192.168.100.254#53

Non-authoritative answer:
Name: www.hngd.com
Address: 192.168.100.11
>

上面的缓存域名服务器是转发所有的域名解析请求,当然我们也可以针对一个域名进行转发,如:
zone IN "qq.com" {
type master;
forwarders{ 192.168.100.20; };
}

我们知道 DNS 会同时启用 UDP/TCP 的 port 53,而且是针对所有接口,因此上面的数据并没有什么特异的部分。不过,怎么会有 port 953 且仅针对本机来监听呢?其实那是 named 的远程控制功能,称为远程名称解析服务控制功能 (remote name daemon control, rndc)。预设的情况下,仅有本机可以针对 rndc 来控制。我们会在后续的章节再来探讨这个 rndc 啦,目前我们只要知道 UDP/TCP port 53 有启动即可
(5) 测试:如果你的 DNS 伺服器具有连上因特网的功能,那么透过『 dig www.baidu.com @127.0.0.1 』这个基本指令执行看看, 如果有找到 baidu 的 IP ,并且显示『 SERVER: 127.0.0.1#53(127.0.0.1) 』的字样, 那就代表应该是成功啦!


问题:

什么时候有架设 cache-only DNS 的需求?

在某些公司行号里头,为了预防员工利用公司的网络资源作自己的事情,所以都会针对 Internet 的联机作比较严格的限制。当然啦,连 port 53 这个 DNS 会用到的 port 也可能会被挡在防火墙之外的~这个时候, 你可以在『防火墙的那部机器上面,加装一个 cache-only 的 DNS 服务!』
这是什么意思呢?很简单啊!就是你自己利用自己的防火墙主机上的 DNS 服务去帮你的 Client 端解译 hostname <--> IP 啰!因为防火墙主机可以设定放行自己的 DNS 功能,而 Client 端就设定该防火墙 IP 为 DNS 服务器的 IP 即可!哈哈!这样就可以取得主机名与 IP 的转译啦!所以,通常架设 cache only DNS 服务器大都是为了系统安全啰。
Address: 192.168.100.20#53

10.100.168.192.in-addr.arpa name = mail.hngd.com.