在Linux上配置DNS服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux上配置DNS服务相关的知识,希望对你有一定的参考价值。

一、DNS服务简介

DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

二、DNS安装配置

准备工作
1.配置DNS服务器所需的安装包

DNS服务程序包:bind
DNS相关库:bind-libs
DNS客户端:bind-utils
限制DNS在一个目录中:bind-chroot
关闭防火墙:iptables -F
关闭selinux: setenforce 0
2.编辑配置文件

全局配置文件/etc/named.conf

options {
        listen-on port 53 { localhost; };      #括号内改为localhost是将本机ip监听在53端口上,也可以写上本机IP,注意最后的;号
        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; };     #改为any是指允许任何人通过你的服务器来解析DNS,也可以指定IP。
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};
#上面两个就是DNS解析域名的模板,可以在下面接着写也可以写在下面的文件中/etc/named.rfc1912.zones
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

我们在/etc/named.rfc1912.zones中写入DNS解析域

zone "lpx123.com" IN {      #正向解析域名lpx123.com
        type master;      #主域名
        file "lpx123.com.zone";      #域名对应的文件
};

zone "252.18.172.in-addr.arpa" IN {     #反向解析域名
        type master;     
        file "172.18.252.zone";
};

区域数据库文件存放在/var/named/中,这个目录中也有模板文件,我们可以拷贝模板文件进行修改。

[[email protected] named]# cp -p named.localhost lpx123.com.zone
[[email protected] named]# cp -p named.localhost 172.18.252.zone

注意拷贝的时候要加上-p因为这个文件所属组是named,不加-p所属组就会变成当前用户所属组,named就无法访问。
编辑正向区域数据库配置文件

$TTL 1D
@       IN SOA   nsl.lpx123.com. root.lpx123.com. (
                                        20132702        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      nsl.lpx123.com.
nsl     IN      A       172.18.252.36
mail    IN      A       2.2.2.2

TTL:生命期,是指这条DNS在客户端上的缓存时间。br/>1D:缓存时间为1天
@:引用当前域名
IN:index记录
SOA:主从认证、授权方面的记录
nsl.lpx123.com.:主域名
root.lpx123.com.:管理员邮箱
20132702 ; serial :这是一个序列号,主从之间更新的依据。
1D ; refresh:更新时间,从服务器多久主动请求更新一次。1D代表一天
1H ; retry:重试时间,当从服务器更新失败后,多久再更新。1H代表1小时
1W ; expire:失效时间,当从服务器多长时间没有成功更新时,就不再更新。1W代表1周
3H ) ; minimum:相当于TTL值。不写默认使用全局配置。
IN NS nsl.lpx123.com.:NS记录,后面跟域名服务器名称
nsl IN A 172.18.252.36:nslA记录对应的服务器地址
编辑反向区域数据库文件

[[email protected] named]# vim 172.18.252.zone 
$TTL 1D
@       IN SOA   nsl.lpx123.com. root.lpx123.com. (
                                        20132703        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      nsl.lpx123.com.
36      PTR     nsl.lpx123.com.
100     PTR     www.lpx123.com.
~                               

反向区域数据库文件和正向区域数据库文件差不多,区别就在多了一个RPT记录
PTR的格式:前面是对应的IP地址,后面是主机名。

三、测试

重启服务
[[email protected] named]# systemctl restart named
我们在另一台机器上进行测试
首先我们要设置下DNS服务器地址:

[[email protected] ~]# vim /etc/resolv.conf 
nameserver 172.18.252.36    #把里面的内容都注释掉添加一个DNS服务器地址

[[email protected] ~]# dig nsl.lpx123.com @172.18.252.36

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> nsl.lpx123.com @172.18.252.36
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 821
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1     #aa代表的是权威,是指这个解析是通过这个域名的本身服务器解析出来的而不是通过转发解析出来的。

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nsl.lpx123.com.            IN  A

;; ANSWER SECTION:
nsl.lpx123.com.     86400   IN  A   172.18.252.36     #解析出来的A记录对应的地址

;; AUTHORITY SECTION:
lpx123.com.     86400   IN  NS  nsl.lpx123.com.

;; Query time: 1 msec
;; SERVER: 172.18.252.36#53(172.18.252.36)
;; WHEN: Wed May 23 01:50:46 CST 2018
;; MSG SIZE  rcvd: 73
[[email protected] ~]# nslookup 172.18.252.36     #反向解析
Server:     172.18.252.36
Address:    172.18.252.36#53

36.252.18.172.in-addr.arpa  name = nsl.lpx123.com.

四、泛域名名字解析

当我们需要批量添加DNS解析时就可以用通配符来写如下

[[email protected] named]# vim lpx123.com.zone
$GENERATE 1-100 server$ A       3.3.3.$     #在正向域名解析中添加一条这样的记录

这样就添加了从server1.lpx123.com到server100.lpx.com的记录,与之对应的ip分别也是从3.3.3.1到3.3.3.100

[[email protected] named]# nslookup server1.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   server1.lpx123.com
Address: 3.3.3.1

[[email protected] named]# nslookup server2.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   server2.lpx123.com
Address: 3.3.3.2

[[email protected] named]# nslookup server100.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   server100.lpx123.com
Address: 3.3.3.100

还有就是我们有的时候多输入了一个w也能访问到我们要访问的网站,或者输错了也能访问到,这就是用到了泛域名解析
写法如下
*.lpx123.com. A 4.4.4.4

[[email protected] named]# nslookup www.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   www.lpx123.com
Address: 4.4.4.4

[[email protected] named]# nslookup dns.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   dns.lpx123.com
Address: 4.4.4.4

[[email protected] named]# nslookup nsl.lpx123.com
Server:     172.18.252.36
Address:    172.18.252.36#53

Name:   nsl.lpx123.com
Address: 172.18.252.36

只要是我们没写的lpx123.com的域名全部都解析到4.4.4.4主机上,写入的不受影响。

五、DNS主从

我们已经搭建好了主DNS服务器,所以我们现在只需要再搭建一个从DNS服务器就可以了
1.我们首先准备好搭建环境,安装好软件包(同上)
2.编辑全局配置文件(同主配置文件)
3.写区域数据库文件/etc/named.conf

options {
        listen-on port 53 { localhost; };     #这里还是改为localhost
        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; };      #这里改为any

我们在模板后面添加

zone "lpx123.com" IN {
        type slave;     #代表为从域名
        file "slaves/lpx123.com.zone";     #复制主域名库文件后的存放位置
        masters { 172.18.252.36; };     #主域名的IP地址
};

启动服务,我们会看到在/var/named/slaves目录下有一个文件,这就是从域名库文件,我们用另一台机器看能否解析

[[email protected] ~]# dig nsl.lpx123.com @172.18.250.216

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> nsl.lpx123.com @172.18.250.216
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32433
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;nsl.lpx123.com.            IN  A

;; ANSWER SECTION:
nsl.lpx123.com.     86400   IN  A   172.18.252.36

;; AUTHORITY SECTION:
lpx123.com.     86400   IN  NS  nsl.lpx123.com.

;; Query time: 4 msec
;; SERVER: 172.18.250.216#53(172.18.250.216)
;; WHEN: Thu May 24 21:03:47 2018
;; MSG SIZE  rcvd: 62

解析成功
指定传输机器
我们发现搭建从服务器时主服务器并没有同意我们就当了从服务器并获取到了区域库文件,这对主DNS来说是不安全的,所以我们加个指定传输机器
在/etc/named.conf中添加一条
allow-transfer { 172.18.250.216;}; #括号内填写从服务器ip地址
测试
我们用从服务器能获取数据

[[email protected] slaves]# dig -t axfr lpx123.com @172.18.252.36

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -t axfr lpx123.com @172.18.252.36
;; global options: +cmd
lpx123.com.     86400   IN  SOA nsl.lpx123.com. root.lpx123.com. 20132702 86400 3600 604800 10800
lpx123.com.     86400   IN  NS  nsl.lpx123.com.
*.lpx123.com.       86400   IN  A   4.4.4.4
mail.lpx123.com.    86400   IN  A   2.2.2.2

用别的机器就不能抓取数据,但对与通过域名正常获取没影响

[[email protected] ~]# dig -axfr l.lpx123.com @172.18.252.36

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> -t axfr lpx123.com @172.18.252.36
;; global options: +cmd
; Transfer failed.
[[email protected] ~]# dig nsl.lpx123.com @172.18.252.36

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> nsl.lpx123.com @172.18.252.36
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12384
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;nsl.lpx123.com.            IN  A

;; ANSWER SECTION:
nsl.lpx123.com.     86400   IN  A   172.18.252.36

;; AUTHORITY SECTION:
lpx123.com.     86400   IN  NS  nsl.lpx123.com.

;; Query time: 1 msec
;; SERVER: 172.18.252.36#53(172.18.252.36)
;; WHEN: Thu May 24 21:23:47 2018
;; MSG SIZE  rcvd: 62

PS:我们对主DNS做了设置,从DNS也要做设置不然别人也可以从你的从DNS抓取数据,只不过从DNS要是没有从从DNS那括号里就可以改为none。


以上是关于在Linux上配置DNS服务的主要内容,如果未能解决你的问题,请参考以下文章

Linux之bind服务(DNS)部署配置

Linux配置智能DNS服务

linux服务器配置dns

Linux上配置DNS分离解析

linux的DNS反向解析,DNS缓存服务器,DNS主从域名服务的设置,DNS的分离解析

Linux DNS 服务器安装配置和维护