DNS的简单实现

Posted

tags:

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

DNS的安装和主从区域的简单配置:

 环境: 

  正反向主为10.1.19.1(hostname:centos7-1) ,从服务器为10.1.19.2(hostname:centos7-2),系统为centos7.2


软件安装:

[[email protected] ~]# yum -y install bind bind-libs bind-utils #安装dns软件bind
[[email protected] ~]# vim /etc/named.conf
cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
//listen-on port 53 { any; }; #修改的地方,注释掉该行
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 no;   #关闭该项
dnssec-validation no; #关闭该项
/* 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 "hello.com" IN {         #添加一个正向zone,记得加分号
        type master;
        file "hello.com";   
};
     
zone "19.1.10.in-addr.arpa" IN {    #添加一个反向zone,记得加分号
        type master;             #反向正向的master可以不再一台主机上,也就是一个服务器可以是正向的主,同时是反向的从
        file "named.19.1.10";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
 [[email protected] named]# cat magedu.com named.19.1.10 
$TTL 600
$ORIGIN magedu.com    #可以自己重新定义zone,默认是主配置文件中定义的域名
@  IN SOA  ns1.magedu.com.  admin.magedu.com. (
 	2016110501  #serial(序列号),表示该DNS数据库文件的新老程度,序列号越大表示数据越新,主要用于主从同步,每修改一次文件,务必将序号加1
	2H          #refresh(更新频率),表示从服务器多长时间向主服务器同步一次数据,判断依据是序列号的变化,如果内容改变,序列号未改变,也不会同步
	10M         #retry(重试时间),当因为某些因素从服务器无法连接到主服务器时的重连时间,默认是同步时间的一半
	1W          #expire(失效时间),表示从服务器连接主服务器一直失败,持续时间达到这个值时,从服务器将放弃尝试,并且不再提供服务
	1D)         #否定答案的TTL值,也称快取时间
@ IN NS ns1.magedu.com.   #该区域DNS服务器的主机名
@ IN MX 10 mail.magedu.com.  #注意优先级
ns1 IN A 10.1.19.1            #每个NS和MX都有一个A记录
mail IN A 10.1.19.1 
www IN A 10.1.19.10
www IN A 10.1.19.11
ftp IN cname files

$TTL 6400
@ IN SOA ns1.magedu.com. admin.magedu.com. (
	2015110501          #反向区域文件的序列号可以不和正向的一致,只要保持反向主从的就行
	1H
	30M
	5H
	10M)     
@ IN NS ns1.magedu.com.        #MX,cname等不用定义反向解析
1 IN PTR ns1.magedu.com. 
10 IN PTR www.magedu.com.
11 IN PTR www.magedu.com.
[[email protected] named]# chown named.named magedu.com 1.10.magedu.com #修改权限

启动服务:
[[email protected] named]# systemctl start named #服务名称为named
[[email protected] named]# ss -ntl 
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN     0      50                                *:3306                                          *:*                  
LISTEN     0      10                        10.1.19.1:53          #监听在tcp53端口,是为了主从同步                                    *:*                  
LISTEN     0      10                        127.0.0.1:53                                            *:*                  
LISTEN     0      5                     192.168.122.1:53                                            *:*                  
LISTEN     0      128                               *:22                                            *:*      
[[email protected] named]# ss -nul 
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
UNCONN     0      0                                 *:162                                           *:*                  
UNCONN     0      0                                 *:33497                                         *:*                  
UNCONN     0      0                                 *:5353                                          *:*                  
UNCONN     0      0                     192.168.122.1:53     #在udp53端口,是响应查询                                       *:*                  
UNCONN     0      0                         10.1.19.1:53                                            *:*    

[[email protected] named]# named-checkconf                     #检查语法
[[email protected] named]# named-checkzone magedu.com magedu.com  #检查数据zone
zone magedu.com/IN: loaded serial 2016110501
OK
[[email protected] named]# named-checkzone 19.1.19.in-addr.arpa named.19.1.10 
zone 19.1.19.in-addr.arpa/IN: loaded serial 2015110501
OK
[[email protected] named]# rndc reload 
server reload successful

正反向测试:

[[email protected] named]# dig -x 10.1.19.10 @10.1.19.1         #检查反向解析,dig -x ip @server == dig -t PTR ip @server
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -x 10.1.19.10 @10.1.19.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9069
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.19.1.10.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
10.19.1.10.in-addr.arpa. 6400	IN	PTR	  

;; AUTHORITY SECTION: #权威回答区域
19.1.10.in-addr.arpa.	6400	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		600	IN	A	10.1.19.1

;; Query time: 1 msec
;; SERVER: 10.1.19.1#53(10.1.19.1)
;; WHEN: Sun Nov 06 11:31:51 CST 2016
;; MSG SIZE  rcvd: 114

[[email protected] named]# dig -t A www.magedu.com @10.1.19.1  #检查正向解析

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.magedu.com @10.1.19.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38899
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.com.		600	IN	A	10.1.19.11
www.magedu.com.		600	IN	A	10.1.19.10

;; AUTHORITY SECTION:
magedu.com.		600	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		600	IN	A	10.1.19.1

;; Query time: 1 msec
;; SERVER: 10.1.19.1#53(10.1.19.1)
;; WHEN: Sun Nov 06 11:32:04 CST 2016
;; MSG SIZE  rcvd: 10

主动服务器的配置:

  从服务器是某个区域的从,不一定是某个服务器的从,因为主服务器可以有多个区域,如果从服务器只同步某个区域,那么是区域的从,如果同步住上的所有区域,可以成为某个主服务器的从,同样正反解析也一样;

本次主从的实验只配置了正向;

配置主服务器:

  任务:1.定义允许同步的从服务器ip
        2.添加从服务器的ns记录
  
 a)主配置文件/etc/named.conf 需更该的部分:       
zone "magedu.com" IN {
        type master;
        file "magedu.com";
        allow-transfer { 10.1.19.2; }; 
};
 
 b) 修改zone文件
 [[email protected] named]# vim magedu.com 
 $TTL 600
@  IN SOA  ns1.magedu.com.  admin.magedu.com. (
        2016110501
        2H
        10M
        1W
        1D)
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.      #添加从服务器的ns记录
@ IN MX 10 mail.magedu.com.
ns1 IN A 10.1.19.1
ns1 IN A 10.1.19.2        #添加从服务器ns记录的A记录
mail IN A 10.1.19.1
www IN A 10.1.19.10
www IN A 10.1.19.11  

配置从服务器:
  任务:1.安装bind软件
        2,配置主配置文件,从服务器不需要定义数据文件,从主服务器同步即可
        
  a)安装
  [[email protected] ~]# yum -y install bind bind-libs bind-utils
  b)编辑主配置文件
  
 options {
        listen-on port 53 { any; };   #监听的地址
        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 no;        #关闭
        dnssec-validation no;    #关闭
 
 

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

zone "." IN {
        type hint;
        file "named.ca";
};
zone "magedu.com" IN {         #添加区域文件
        type slave;
        file "slaves/magedu.com"; #定义的目录为slaves,因为该目录的权限设置为了named可写
        masters { 10.1.19.1; };   #定义自己的主服务器IP
}


重启主从服务器的named服务,观察日志/var/log/messaages,查看从服务器的解析库文件是否进行了同步


[[email protected] named]# tail /var/log/messages
Nov  6 12:12:25 centos7-2 named[4418]: transfer of ‘magedu.com/IN‘ from 10.1.19.1#53: connected using 10.1.19.2#56438
Nov  6 12:12:25 centos7-2 named[4418]: zone magedu.com/IN: transferred serial 2016110501
Nov  6 12:12:25 centos7-2 named[4418]: transfer of ‘magedu.com/IN‘ from 10.1.19.1#53: Transfer completed: 1 messages, 9 records, 237 bytes, 0.055 secs (4309 bytes/sec)

[[email protected] named]# ls /var/named/slaves/  #从服务器上已经同步了文件
magedu.com


进行数据更改和查询的测试:

[[email protected] named]# dig -t A www.magedu.com @10.1.19.2  #注意,此处指定的是从服务器IP,表示从服务器也可进行查询了

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.magedu.com @10.1.19.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59292
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.com.		600	IN	A	10.1.19.10
www.magedu.com.		600	IN	A	10.1.19.11

;; AUTHORITY SECTION:
magedu.com.		600	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		600	IN	A	10.1.19.1


在主服务器上添加一个条目:
[[email protected] named]# vim magedu.com  
@  IN SOA  ns1.magedu.com.  admin.magedu.com. (
        2016110502   #序列号加1
        2H
        10M
        1W
        1D)
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.
@ IN MX 10 mail.magedu.com.
ns1 IN A 10.1.19.1
slave IN A 10.1.19.2
mail IN A 10.1.19.1
www IN A 10.1.19.10
www IN A 10.1.19.11
hello IN A 10.1.19.12   #添加的条目

[[email protected] named]# rndc reload  #rndc 重载
server reload successful

查看从服务上的日志,查看是否同步:
Nov  6 14:04:35 centos7-2 named[4628]: transfer of ‘magedu.com/IN‘ from 10.1.19.1#53: Transfer completed: 1 messages, 11 records, 271 bytes, 0.016 secs (16937 bytes/sec)
Nov  6 14:04:35 centos7-2 named[4628]: zone magedu.com/IN: sending notifies (serial 2016110503)

[[email protected] named]# dig -t A hello.magedu.com @10.1.19.2

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A hello.magedu.com @10.1.19.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25591
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
hello.magedu.com.	600	IN	A	10.1.19.12

;; AUTHORITY SECTION:
magedu.com.		600	IN	NS	slave.magedu.com.
magedu.com.		600	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		600	IN	A	10.1.19.1
slave.magedu.com.	600	IN	A	10.1.19.2

;; Query time: 1 msec
;; SERVER: 10.1.19.2#53(10.1.19.2)
;; WHEN: Sun Nov 06 14:05:11 CST 2016
;; MSG SIZE  rcvd: 131

 

子域授权:

 在DNS的查询过程中,我们将DNS解析请求发给我们所指定的DNS服务器后,它会以及以及的查找域名进行解析,这里的每一级都是一个域,并且每个域都为上级域的子域,当我们想要将本公司的主机添加为子域时,可以设置。

其原理就是在本域名服务器上的正向解析库文件当中定义子域对应的DNS服务器的主机名和其A记录即可

本域名服务器

主配置文件/etc/named.conf :
    allow-query     { any; };  #设置打开此项,表示允许查询递归的地址

[[email protected] named]# cat magedu.com 
$TTL 600
@  IN SOA  ns1.magedu.com.  admin.magedu.com. (
 	2016110504
	2H
	10M
	1W
	1D) 
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.
@ IN MX 10 mail.magedu.com.
ops.magedu.com. IN NS  ns1.ops.magedu.com.   #添加子域服务器的ns记录
ns1.ops.magedu.com. IN A 10.1.19.5           #添加子域服务器ns记录的A记录
ns1 IN A 10.1.19.1
slave IN A 10.1.19.2
mail IN A 10.1.19.1
www IN A 10.1.19.10
www IN A 10.1.19.11
hello IN A 10.1.19.12


子域服务器配置:
[[email protected] named]# cat /etc/named.conf 
zone "ops.magedu.com" IN {             #定义本地的zone文件
	type master; 
	file "ops.magedu.com";
};

zone "magedu.com" IN {                 #定义对自己本域的设置,把请求转发
	type forward;
	forward first;
	forwarders { 10.1.19.1; };
};

[[email protected] named]# cat ops.magedu.com 
$TTL 6400
@ IN SOA ns1.ops.magedu.com. admin.ops.magedu.com. (
	2015030210
	2H
	1H
	1D
	10M)
@ IN NS ns1.ops.magedu.com.
ns1.ops.magedu.com. IN A 10.1.19.2
fff IN A 10.1.19.20

[[email protected] named]#named-checkconf 
[[email protected] named]#named-checkzone ops.magedu.com ops.magedu.com 
[[email protected] named]#systemctl start named 
[[email protected] named]# dig -t A www.magedu.com @10.1.19.1   #解析主域的

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.magedu.com @10.1.19.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22640
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
www.magedu.com.		600	IN	A	10.1.19.10
[[email protected] named]# dig -t A fff.ops.magedu.com  @10.1.19.2  #解析子域的

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A fff.ops.magedu.com @10.1.19.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31939
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;fff.ops.magedu.com.		IN	A

;; ANSWER SECTION:
fff.ops.magedu.com.	6400	IN	A	10.1.19.20

;; AUTHORITY SECTION:
ops.magedu.com.		6400	IN	NS	ns1.ops.magedu.com.

;; ADDITIONAL SECTION:
ns1.ops.magedu.com.	6400	IN	A	10.1.19.2

批量添加

[[email protected] named]# dig -t A test24.magedu.com @10.1.19.1
 
;; ANSWER SECTION:
test24.magedu.com.	600	IN	A	10.1.19.24

;; AUTHORITY SECTION:
magedu.com.		600	IN	NS	slave.magedu.com.
magedu.com.		600	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		600	IN	A	10.1.19.1
slave.magedu.com.	600	IN	A	10.1.19.2

view视图和智能解析:

访问控制是只仅对定义的网络进行解析,视图也称为只能解析,是指根据访问者来源ip信息解析不同的结果,这个通常用来解决南北不同运行商之间网络访问缓慢的问题,如联通来源的ip的用户解析到联通服务器ip上。


访问控制是通过acl函数来实现的,acl把一个或多个地址归并为一个集合,并通过一个统一的名称调用,需要注意的是:acl函数只能先定义,后使用。

 


acl acl_name {

ip;

net/prelen;


};


示例:

acl mynet {

192.168.0.0/16;

192.0.0.0/8;

};

bind 四个内置的acl


none : 没有一个主机

any : 任意主机

local : 本机

localnet : 本机所在的ip所属的网络

访问控制指令:

allow-query {}; 允许查询的主机

allow-transfer {}; 允许向哪些主机做区域传送,默认为向所有主机,应该配置为仅允许从服务器

如果在zone内写,那么表示只允许该zone传送

可以先在主配置文件定义:

acl slaves {

10.1.2.34;

3.22.123.44;

};

然后写到zone 内

allow-transfer { slaves; };

        allow-recursion {}; 允许哪些主机向当前DNS服务器发送递归查询请求

allow-update {}; DDNS,允许动态更新区域数据库文件中内容


dns的视图(view)功能也是结合acl实现的,view也是一个函数,通常view有多个,每个view当中定义一组zone,用于实现不同的来源ip解析不同的结果。

acl mynet { 192.168.99.0/24; };

acl other { !192.168.88.0/24;any; };  感叹号便是取反




以上是关于DNS的简单实现的主要内容,如果未能解决你的问题,请参考以下文章

DNS的简单实现

IOS开发-OC学习-常用功能代码片段整理

VsCode 代码片段-提升研发效率

DNS服务器简单配置和view实现

为啥这段代码会泄露? (简单的代码片段)

Python之DNS域名轮询业务监控