DNS and Bind

DNS and Bind

     DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作。为什么需要将主
机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名。而网
络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解
析,DNS服务器便充当了地址解析的重要角色。

    域名严格意义上的称呼为FQDN(Full Qualified Domain Name)。域名按分类形式大概分为组织域,国家域名,顶级域,二级域等,如下:

组织域:.com, .net, .org, .gov, .edu, .mil

国家域:.iq, .tw, .hk, .jp, .cn

    举个例子:163.com就是一个顶级域名,而www.163.com却不是顶级域名,他是在163.com 这个域里的一叫做www的主机。

    一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的。

####IP与域名转换的机制:

IP—->域名;依靠调用`getipbyhostname`库来实现;

IP—->域名;依靠调用`gethostnamebyip`库来实现;

注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;

  

#####DNS解析的大概流程#####

http://s2.51cto.com/wyfs02/M00/79/6F/wKiom1aQzAGQmHaHAAKELDwbJvY466.png

域:magedu.com.
www.magedu.com. 1.1.1.1
ftp.magedu.com.     2.2.2.2
bbs.magedu.com.   3.3.3.3
cloud.magedu.com. 4.4.4.4

DNS服务器类型:
负责解析至少一个域:
主名称服务器;
辅助名称服务器;
不负责解析:
缓存名称服务器;

一次完整的查询请求经过的流程:
Client –> hosts文件 –> DNS Local Cache –> DNS  Server (recursion) –> 
自己负责解析的域:直接查询数据库并返回答案;
不是自己负责解析域:Server Cache –> iteration(迭代)

解析答案:
肯定答案:
否定答案:不存在查询的键,因此,不存在与其查询键对应的值;

权威答案:由直接负责的DNS服务器返回的答案;
非权威答案:

主-辅DNS服务器:
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
否定答案的缓存时长:

主服务器”通知“从服务器随时更新数据;

区域传送:
全量传送:axfr, 传送整个数据库;
增量传送:ixfr, 仅传送变量的数据;

区域(zone)和域(domain):
magedu.com域:
FQDN –> IP
正向解析库;区域
IP –> FQDN
反向解析库;区域

区域数据库文件:
资源记录:Resource Record, 简称rr;
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN –> IPv4;
AAAA:地址记录, FQDN –> IPv6;
CNAME:Canonical Name,别名记录;
PTR:Pointer,IP –> FQDN
MX:Mail eXchanger,邮件交换器;
优先级:0-99,数字越小优先级越高;

资源记录的定义格式:
语法: name   [TTL] IN RR_TYPE value

SOA:
name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)

例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com.  (
2017010801 ; serial
2H ; refresh
10M ; retry
1W ; expire
1D ; negative answer ttl 
)

NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录; 

例如:
magedu.com. 86400 IN NS   ns1.magedu.com.
magedu.com. 86400 IN NS   ns2.magedu.com.

MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;

例如:
magedu.com. IN MX 10   mx1.magedu.com.
magedu.com. IN MX 20   mx2.magedu.com.

A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;

例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
bbs.magedu.com. IN A 1.1.1.1

AAAA:
name:FQDN
value: IPv6

PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQND

例如:
4.3.2.1.in-addr.arpa.   IN  PTR www.magedu.com.

CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;

例如:
web.magedu.com.   IN   CNAME  www.magedu.com.

注意:
(1) TTL可以从全局继承;
(2) @表示当前区域的名称;
(3) 相邻的两条记录其name相同时,后面的可省略;
(4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

DNS协议 –> BIND, PowerDNS
http://www.isc.org

程序环境:
主程序:/usr/sbin/named
Unit File:/usr/lib/systemd/system/named.service
配置文件:/etc/named.conf
区域解析库文件:/var/named

关闭dnssec功能:
/etc/named.conf

dnssec-enable no;
dnssec-validation no;

解析一个区域:
定义:/etc/named.rfc1912.conf
zone “ilinux.io” IN {
type master;
file “ZONE_FILE”;
}

定义解析库文件示例:
$TTL 600
ilinux.io.      IN      SOA     ilinux.io.      nsadmin.ilinux.io. (
2017052301
1H
5M
1W
6H )
IN      NS      dns1.ilinux.io.
IN      NS      dns2.ilinux.io.
dns1.ilinux.io. IN      A       172.16.0.67
dns2.ilinux.io. IN      A       172.16.0.68
www.ilinux.io.  IN      A       172.16.0.1
web             IN      CNAME   www

回顾:
DNS:Domain Name Server, 53/tcp, 53/udp 

Domain: zone
数据文件:区域解析库文件

资源记录:
name TTL IN RR_TYPE VALUE 

RR_TYPE:
SOA:
name: DN, value: 
NS:
name: DN, value: DN Server hostname
MX:
name: DN, value: MX Server Hostname
A,AAAA: 
name: FQDN, value: IPv4 OR IPv6
PTR:
name: IPv4, value: FQDN
CNAME:
name: FQDN, value: FQDN

DNS and Bind(2)

BIND的安装配置:
BIND: Berkeley Internet Name Domain,  ISC.org
dns: 协议
bind: dns协议的一种实现
named:bind程序的运行的进程名

程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;

bind:提供的dns server程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail模式下;

bind:
主配置文件:/etc/named.conf 
或包含进来其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/var/named/目录下;
一般名字为:ZONE_NAME.zone

注意:(1) 一台DNS服务器可同时为多个区域提供解析;
  (2) 必须要有根区域解析库文件: named.ca;
  (3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:named.localhost
反向:named.loopback
         
         yum  clean  all  清除缓存

rndc:remote name domain contoller
953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;

bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS 6: service  named  start
CentOS 7: systemctl  start  named.service

主配置文件格式:/etc/named.conf

全局配置段:
options {  …;  };
日志配置段:
logging {   …;   };
区域定义段:
zone {  …;   };
那些由本机负责解析的区域,或转发的区域;

注意:每个配置语句必须以分号结尾;花括号里必须有空格;

缓存名称服务器的配置:
监听能与外部主机通信的地址;
listen-on port 53;
listen-on port 53 { 172.16.100.67; };

学习时,建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;

关闭仅允许本地查询:
//allow-query  { localhost; };

检查配置文件语法错误:
named-checkconf   [/etc/named.conf]

测试工具:
dig, host, nslookup等

dig命令:
dig  [-t RR_TYPE]  name  [@SERVER]  [query options]

用于测试dns系统,因此其不会查询hosts文件;

查询选项:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析;

注意:反向解析测试
dig  -x  IP

模拟完全区域传送:
dig  -t  axfr  DOMAIN  [@server]

host命令:
host  [-t  RR_TYPE]  name  SERVER_IP

nslookup命令:
nslookup  [-options]  [name]  [server]

交互式模式:
nslookup>
server  IP:以指定的IP为DNS服务器进行查询;
set  q=RR_TYPE:要查询的资源记录类型;
name:要查询的名称;

rndc命令:named服务控制命令
rndc  status
rndc  flush

配置解析一个正向区域:

以magedu.com域为例:

(1) 定义区域
在主配置文件中(/etc/named.conf)或主配置文件辅助配置文件(/etc/named.rfc1912.conf)中实现;
zone  “ZONE_NAME”  IN  {
type  {master|slave|hint|forward};
file  “ZONE_NAME.zone”; 
};

注意:区域名字即为域名;

(2) 建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件;

文件为:/var/named/magedu.com.zone
$TTL 3600
$ORIGIN magedu.com.
@       IN      SOA     ns1.magedu.com.   dnsadmin.magedu.com. (
2017010801
1H
10M
3D
1D )
IN      NS      ns1
IN      MX   10 mx1
IN      MX   20 mx2
ns1     IN      A       172.16.100.67
mx1     IN      A       172.16.100.68
mx2     IN      A       172.16.100.69
www     IN      A       172.16.100.67
web     IN      CNAME   www
bbs     IN      A       172.16.100.70
bbs     IN      A       172.16.100.71

权限及属组修改:

chgrp  named  /var/named/magedu.com.zone

chmod  o=  /var/named/magedu.com.zone

检查语法错误:

named-checkzone  ZONE_NAME   ZONE_FILE

named-checkconf 

(3) 让服务器重载配置文件和区域数据文件

rndc  reload 或

systemctl  reload  named.service

配置解析一个反向区域
(1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone  “ZONE_NAME”  IN  {
type  {master|slave|hint|forward};
file  “ZONE_NAME.zone”; 
};

注意:反向区域的名字
反写的网段地址.in-addr.arpa 
100.16.172.in-addr.arpa

(2) 定义区域解析库文件(主要记录为PTR)

示例,区域名称为100.16.172.in-addr.arpa;

$TTL 3600
$ORIGIN 100.16.172.in-addr.arpa.
@       IN      SOA     ns1.magedu.com.  nsadmin.magedu.com. (
2017010801
1H
10M
3D
12H )
IN      NS      ns1.magedu.com.
67      IN      PTR     ns1.magedu.com.
68      IN      PTR     mx1.magedu.com.
69      IN      PTR     mx2.magedu.com.
70      IN      PTR     bbs.magedu.com.
71      IN      PTR     bbs.magedu.com.
67      IN      PTR     www.magedu.com.

权限及属组修改:

chgrp  named  /var/named/172.16.100.zone

chmod  o=  /var/named/172.16.100.zone

检查语法错误:

named-checkzone  ZONE_NAME   ZONE_FILE

named-checkconf 

(3) 让服务器重载配置文件和区域数据文件

rndc  reload 或

systemctl  reload  named.service

主从服务器:
注意:从服务器是区域级别的概念;

配置一个从区域:
On Slave 
(1) 定义区域
定义一个从区域; 
zone “ZONE_NAME”  IN {
type  slave;
file  “slaves/ZONE_NAME.zone”;
masters  { MASTER_IP; };
};

配置文件语法检查:named-checkconf

(2) 重载配置
rndc  reload 
systemctl  reload  named.service

On Master
(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;

注意:时间要同步;
ntpdate命令;

子域授权:

正向解析区域授权子域的方法:
ops.magedu.com. IN NS   ns1.ops.magedu.com.
ops.magedu.com. IN NS   ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A      IP.AD.DR.ESS
ns2.ops.magedu.com. IN A      IP.AD.DR.ESS

定义转发:
注意:被转发的服务器必须允许为当前服务做递归;

(1) 区域转发:仅转发对某特定区域的解析请求;
zone  “ZONE_NAME”  IN {
type  forward;
forward  {first|only};
forwarders  { SERVER_IP; };
};

first:首先转发;转发器不响应时,自行去迭代查询;
only:只转发;

(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
options {
… …
forward  {only|first};
forwarders  { SERVER_IP; };
.. …
};

bind中的安全相关的配置:
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;

acl  acl_name  {
ip;
net/prelen;
};

示例:
acl  mynet {
172.16.0.0/16;
127.0.0.0/8;
};

bind有四个内置的acl
none:没有一个主机;
any:任意主机;
local:本机;
localnet:本机的IP所属的网络;

访问控制指令:
allow-query  {};  允许查询的主机;白名单;
allow-transfer {};  允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求; 
allow-update {}; DDNS,允许动态更新区域数据库文件中内容;

原创文章,作者:MFX,如若转载,请注明出处:http://www.178linux.com/77358

(1)
MFXMFX
上一篇 2017-06-01
下一篇 2017-06-02

相关推荐

  • Linux网站架构系列之Apache—-进阶篇

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1320167 本篇博文为Linux网站架构系列之apache的第二篇,我将带大家一起学习apache的编译参数,目录结构和配置文件等方面的知识,实现对apac…

    Linux干货 2016-08-15
  • N25期–第十三周作业

    1、 建立samba共享,共享目录为/data,要求:(描述完整的过程)  1)共享名为shared,工作组为magedu;  2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加sam…

    Linux干货 2017-04-05
  • shell编程及rpm包

    1. shell编程    case 实现条件判断, 无论是case后面还是值后面都是没有任何标点符号的。    case支持通配符, 如果想要表示其他的话, 可以使用*放到最后。 用*表示其他。   2. 用tar打包的文件或则目录,这些文件或则目录的的ACL(访问控制列表)权限会丢失。…

    Linux干货 2016-08-18
  • Centos 7 DNS配置及理论详解

    DNS是什么及BIND讲解内容 域名系统(英文:Domain Name System,缩写:DNS)是internet的一项服务。它作为将域名和IP地址相互映射服务,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。讲解内容:    DNS名称解析方…

    Linux干货 2016-04-25
  • 进程与计划任务

    PID 进程号,用来标记各个进程;CentOS6中起始的第一个进程为init7中为systemd 进程优先级: 系统优先级:数字越小,优先级越高 0-139(4,5中) 各有140个运行队列和过期队列 0-98,99(6中) 实时优先级:99-0:值越大优先级越高 nice值:-20到19,对应系统优先级100-139或99 进程状态: 运行:running…

    2017-05-14
  • Linux中的shell脚本编程——基础篇

    概述:       shell脚本在Linux系统管理员的运维工作中非常重要。shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求。本篇将从编程基础、脚本基本格式、变量、运算、条件测试这几个方面详细介绍shell脚本编程的基础内容,也是我们必须要掌握熟练的内容。 一、…

    Linux干货 2016-08-15

评论列表(1条)

  • renjin
    renjin 2017-06-02 16:00

    主要介绍了bind配置文件的配置指令,用正向区域,与反向区域进行了说明,内容总结的很详细,排版上可以把代码或指令放入到”插入程序代码”中去,如果有标题和缩进就更好了!