1、DNS概述

DNS(Domain Name Service,域名服务)是一种应用层协议,客户端和DNS服务器是C/S架构模式,监听在TCP的53号端口和UDP的53号端口上。tld(Top Level Domain)顶层域分为组织域(.com, .net, .org, .gov, .edu, .mil)和国家域(.iq, .tw, .hk, .jp, .cn, …)。类似于www.magedu.com,是FQDN(Full Qualified Domain Name)全量域名。

2、DNS原理

(1)DNS查询类型分为递归查询和迭代查询。
DNS名称解析方式分为正向解析(名称 --> IP)和反向解析(IP --> 名称)。
注意:二者的名称空间,非为同一个空间,即非为同一棵树,因此,也不是同一个解析库。
(2)DNS服务器类型
1)负责解析至少一个域的DNS服务器分为主名称服务器和辅助名称服务器;
2)不负责名称解析的DNS服务器为缓存名称服务器。
(3)一次完整的查询请求经过的流程
Client --> hosts文件 --> DNS Local Cache --> DNS Server (recursion) -->
自己负责解析的域:直接查询数据库并返回答案;
不是自己负责解析域:Server Cache --> iteration(迭代);
解析答案分为肯定答案(查询到了域的键对应的值)和否定答案(不存在查询的键,因此,不存在与其查询键对应的值);
权威答案:由直接负责的DNS服务器返回的答案;
非权威答案:通过查询DNS缓存获取的答案。
(4)主-辅DNS服务器
主DNS服务器:维护所负责解析的域数据库的那台服务器,读写操作均可进行;
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库,但只能进行读操作;
“复制”操作的实施方式:
序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
否定答案的缓存时长:查询不到键对应的值的答案的缓存时长;
主服务器”通知“从服务器随时更新数据;
(5)区域传送
全量传送:axfr,传送整个数据库;
增量传送:ixfr,仅传送变量的数据;
区域(zone)和域(domain):
FQDN --> IP:正向解析库(区域);
IP --> FQDN:反向解析库(区域);
而域名是一个域。
(6)区域数据库文件
资源记录: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,数字越小优先级越高;
(7)资源记录的定义格式
语法: name [TTL] IN RR_TYPE value
SOA:
name: 当前区域的名字,例如”magedu.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成;
1)当前区域的区域名称(也可以使用主DNS服务器名称);
2)当前区域管理员的邮箱地址,但地址中不能使用@符号,一般使用点号来替代;
3)(主从服务协调属性的定义以及否定答案的TTL)
例如:

magedu.com.  86400   IN      SOA     magedu.com.     admin.magedu.com.  (2017010801  ; serial2H      ; refresh10M        ; retry1W       ; expire1D      ; 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记录;

3、Bind

(1)BIND概述
BIND(Berkeley Internet Name Domain)由ISC.org开源组织维护。
dns是域名解析协议,而bind是dns协议的一种实现,named是bind程序的运行的进程名。
(2)Bind的组成
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。
(3)rndc
rndc(remote name domain contoller),远程域名控制器,监听于TCP的953端口,但默认监听于127.0.0.1地址,因此仅允许本地使用。
(4)Bind的启动和关闭
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS 6: service named start
CentOS 7: systemctl start named.service
(5)主配置文件格式:
全局配置段:options { … }
日志配置段:logging { … }
区域配置段:zone { … },配置那些由本机负责解析的区域或转发的区域;
注意:每个配置语句必须以分号结尾;
(6)缓存名称服务器的配置
监听能与外部主机通信的地址:
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
(7)学习时,建议关闭dnssec

dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;

(8)关闭仅允许本地查询:
//allow-query { localhost; };
(9)检查配置文件语法错误:
named-checkconf [/etc/named.conf]
(10)测试工具:dig, host, nslookup等
1)dig命令:用于测试dns系统,因此其不会查询hosts文件;
dig [-t RR_TYPE] name [@SERVER] [query options]
查询选项:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析;
注意:反向解析测试:dig -x IP
模拟完全区域传送:dig -t axfr DOMAIN [@server]
2)host命令:host [-t RR_TYPE] name SERVER_IP
3)nslookup命令:nslookup [-options] [name] [server]
交互式模式:
nslookup>
server IP:以指定的IP为DNS服务器进行查询;
set q=RR_TYPE:要查询的资源记录类型;
name:要查询的名称;
4)rndc命令:named服务控制命令
rndc status
rndc flush

4、区域解析配置

(1)配置解析一个正向区域(以magedu.com域为例)
1)定义区域,在主配置文件中或主配置文件辅助配置文件中实现;

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. (20170108011H10M3D1D )IN      NS      ns1IN      MX   10 mx1IN      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

3)权限及属组修改:
# chgrp named /var/named/magedu.com.zone
# chmod o= /var/named/magedu.com.zone
4)检查语法错误:
# named-checkzone ZONE_NAME ZONE_FILE
# named-checkconf
5)让服务器重载配置文件和区域数据文件
# rndc reload# systemctl reload named.service
(2)配置解析一个反向区域
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. (20170108011H10M3D12H )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.

3)权限及属组修改:
# chgrp named /var/named/172.16.100.zone
# chmod o= /var/named/172.16.100.zone
4)检查语法错误:
# named-checkzone ZONE_NAME ZONE_FILE
# named-checkconf
5)让服务器重载配置文件和区域数据文件
# rndc reload# systemctl reload named.service
(3)主从服务器配置
注意:从服务器是区域级别的概念;
1)配置一个从区域(On Slave):
定义一个从区域:

zone "ZONE_NAME"  IN {type  slave;file  "slaves/ZONE_NAME.zone";masters  { MASTER_IP; };
};

配置文件语法检查:named-checkconf
重载配置:
rndc reload
systemctl reload named.service
2)配置主区域(On Master):
确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
时间同步:ntpdate命令;
(4)子域授权
正向解析区域授权子域的方法:

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; };.. ...
};

(5)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,允许动态更新区域数据库文件中内容;
(6)bind view
语法:

view  VIEW_NAME {zonezonezone
}

示例:

view internal  {match-clients { 172.16.0.0/8; };zone "magedu.com"  IN {type master;file  "magedu.com/internal";};
};
view external {match-clients { any; };zone "magecdu.com" IN {type master;file "magedu.com/external";};
};

DNS域名服务协议和其实现Bind应用相关推荐

  1. 网络服务-DNS 域名系统服务

    所有坑全部踩过,跟着步骤类所有命令正常运行 文章目录 一.DNS介绍 1.1什么是域名? 1.2什么是 DNS? 1.3域名的组成和分类 二.域名解析过程 分布式 DNS 服务器 三.DNS软件信息 ...

  2. 给DNS划重点:分析ISC BIND必知必会

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 0x01 最近一直在分析dns协议的漏洞,分析过程中明显感到对所分析协议的理解程度 ...

  3. Android中DNS域名劫持问题-解决方案

    前言 在客户端进行业务接口请求时,往往会在线上出现解析JSON响应内容失败而导致的应用崩溃,但是在实际开发测试过程中却没有遇到此问题.解决办法就是对JSON解析进行异常捕获,然后将实际响应内容上报到服 ...

  4. Linux家常便饭——DNS域名的解析

    Linux家常便饭--DNS域名的解析 一.了解DNS DNS域名解析方式 DNS服务器类型 二.构建DNS域名解析服务步骤 安装BIND软件 配置正向解析 配置反向解析 一.了解DNS 定义:将域名 ...

  5. Linux网络中的DNS域名正向与反向解析实操

    一.DNS系统 (一).DNS概述 在日常生活中人们习惯使用域名访问服务器,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个Ip地址不一定只对应一个域名,且一个域名只可以对应一个Ip地 ...

  6. Kubernetes--Pod的DNS域名和相关特性

    一.Pod的DNS域名 Pod作为集群中提供具体服务的实体,也可以像Service一样设置DNS域名.另外,系统为客户端应用Pod提供需要使用的DNS策略提供多种选择. 对Pod来说,Kubernet ...

  7. 网络DNS域名转换成IP地址

    网络DNS域名转换成IP地址(完整代码,测试通过) using System; using System.Collections.Generic; using System.Linq; using S ...

  8. 如何使用OpenDNS有效解决DNS域名劫持?

    如何使用OpenDNS解决DNS域名劫持?很多用户都有遇到过DNS域名被劫持的情况,遇到域名被劫持,最好的解决办法就是使用国外更为安全可靠的DNS服务器,这里小编推荐大家使用OpenDNS提供的DNS ...

  9. 网络安全:、dns被劫持怎么解决DNS域名劫持的几种解决方法

    dns的快慢与稳定与否,关系着浏览时的正常;更有甚者,dns的健康与否,更会直接影响各个拨号客户端的健康. 现在国内上网的用户,大多家用的都是用的网通或者电信的adsl,这中间还分各省地区的拨号服务器 ...

最新文章

  1. 中的 隐藏鼠标菜单_如何移动隐藏删除mac菜单栏图标——macw教程
  2. Xilinx的FPGA命名规则
  3. boost::system模块实现新类别错误代码的创建和使用的测试程序
  4. 细说C#多线程那些事 - 线程同步和多线程优先级
  5. Lumen中启用session
  6. MySQL下使用Inplace和Online方式创建索引的教程
  7. 吐槽今年一级计算机,吐槽大会#辽宁省考#当一个没有情感的计算机器
  8. 我的第一个python web开发框架(11)——工具函数包说明(二)
  9. 英特尔助力金山云带你畅游云端的游戏世界
  10. 交通安全与智能控制专业学计算机吗,交通安全与智能控制专业主要做什么
  11. CentOS 开机自启动配置方法
  12. OpenGL基础5:第一个正方形
  13. 使用HTML通过POST方法来登录到PHPChina中文开发者社区
  14. 线程间操作无效: 从不是创建控件“listBox1”的线程访问它
  15. 十大验证码解决方案服务比较
  16. OpenCV怎么下载?OpenCV下载后怎么配置?
  17. 医院计算机,医院计算机
  18. python计算公司销售额的同比增长率
  19. 【数据结构】(森林)求以孩子兄弟表示法存储的森林叶子结点数
  20. 计算机图形图像处理应用教程,计算机图形图像处理应用教程

热门文章

  1. “范跑跑”被取消从教资格 拟起诉发文单位[转]
  2. 如何建造一个虚拟帝国?感官世界与人机交互需完美配合
  3. 【读书笔记】Linux内核完全注释第二章:微型计算机组成结构
  4. 十大iOS动作冒险游戏评点
  5. python小欢喜(一)写一个python程序如此简单
  6. 已解决ValueError: 4 columns passed, passed data had 2 columns
  7. Exchange用户邮件状态跟踪
  8. html 微信语音聊天,layaBOX实时语音聊天与微信登陆接口分享
  9. 下载和安装Raspberry Pi OS(以前称为Raspbian)
  10. c语言中的sfr16,Keil C51对C语言的关键词扩展之十六:sfr16