DNS and Bind
·Sockets:
C/S
Client:发起应用请求的程序
Server:响应请求(提供服务)的程序
LISTEN:Socket
传输层协议:TCP ,UDP ,SCTP
TCP:Transmission Control Protocol
面向连接的协议:双方通信之前需要事先建立虚连接
UDP:User Datagram Protocol
无连接的服务:双方无须通信之前建立虚连接
DNS:Domain Name Service ,应用层协议
·C/S
53/udp ,53/tcp
udp53号端口是用来查询,tcp53号端口是用来主从复制的
·www.magedu.com :FQDN ( Full Qualified Domain Name )
·tld :Top Level Domain
组织域:.com ,.net ,.org ,.gov ,.edu ,.mil ,.int
国家域:.iq ,.tw ,.hk ,.jp ,.cn
·DNS查询类型:
递归查询:
DNS服务器与DNS服务器之间
迭代查询:
主机到DNS服务器之间
·DNS名称解析方式:
名称 –> IP:正向解析
IP –> 名称:反向解析
注意:二者的名称空间,非为同一个空间,即非为同一颗树;因此,也不是同一个解析库
·域: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 …..
自己负责解析的域:直接查询数据库并返回答案
不是自己负责解析的域:Server Cache –> iteration (迭代)
解析答案:
肯定答案:
否定答案:不存在查询的键,因此,不存在与其查询键对应的值
权威答案: 由直接负责的DNS服务器返回的答案
非权威答案:
·主-辅DNS服务器:
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行
从DNS服务器:从主DNS服务器那里或其他的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
序列号:serial,也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增
刷新时间间隔:refresh,从服务器每多久到主服务器查询序列号更新状况
重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔
过期时间:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务
否定答案的缓存时长:返回答案错误时,此错误答案在本地DNS缓存的时间
主服务器“通知”从服务器随时更新数据
区域传送:
全量传送:axfr,传送整个数据库
增量传送:lxfr,仅传送变化的<新增的>数据
·区域(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:当前区域的区域名称;例如“magedu.com.”,或者“2.3.4.in-addr.arpa.”
value:由多部分组成
(1)当前区域的区域名称(也可以使用主DNS服务器名称)
(2)当前区域管理员的邮箱地址;但地址红不能使用@符号,一般使用点来替代
(3)(主从服务器协调属性的定义以及否定答案的TTL)
例如:
gm.com. 86400 IN SOA gm.com admin.gm.com (
2017010801 ;serial
2H ;refresh
10M ;retry
1W ;erpire
1D ;negative answer ttl
)
·NS:
name:当前区域的区域名称
value:当前区域的某DNS服务器名称,例如:ns.magedu.com.
注意:一个区域可以有多个ns记录
例如:
gm.com. 86400 IN NS ns1.gm.com.
gm.com. 86400 IN NS ns2.gm.com.
·MX:
name:当前区域的区域名称
value:当前区域某邮件交换器的主机名
注意:MX记录可以有多个,但是每个记录的value之前应该有一个数字表示其优先级
例如:
gm.com. IN MX 10 mx1.gm.com.
gm.com. IN MX 20 mx2.gm.com.
·A:
name:某FQDN,例如:www.magedu.com.
value:某IPv4地址
例如:
www.gm.com. IN A 1.1.1.1
www.gm.com. IN A 1.1.1.2
bbs.gm.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:FQDN
例如:
4.3.2.1.in-appr.arpa. IN PTR www.magedu.com.
·CNAME:
name:FQDN格式的别名
value:FQDN格式的正式名字
例如:
web.gm.com. IN CNAME www.gm.com.
·注意:
(1)TTL可以从全局继承
(2)@表示当前区域的名称
(3)相邻的两条记录其name相同时,后面的可省略
(4)MS,NS等类型的记录的value为一个FQDN,此FQDN应该有一个对应的A记录
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
可以使用include包含进其他文件
·解析库文件:
/var/named/目录下:<也是bind工作目录>
一般名字为:ZONE_NAME.zone
注意:
(1)一台DNS服务器可同时为多个区域提供解析
(2)必须要有跟区域解析库文件:named.ca
(3)还必须有两个区域解析库文件:localhost和127.0.0.1的正反向解析库
正向:named.localhost
反向:named.loopback
·rndc:remote name domain contoller
953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用
·bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务
CentOS 6:service named start
CentOS 7:systemctl start named.service
·主配置文件格式:
全局配置段:
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; };
允许某机器进行区域传送<应设置为只对从服务器进行区域传送>
allow-transfer { IP; }
·检查配置文件语法错误:
named-checkconf [/etc/named.conf]
·检查配置区域文件语法错误:
named-checkzone ZONE_NAME /var/named/ZONE_NAME.zone
·测试工具:
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 :要查询的名称
·配置解析一个正向区域:
以gm.com域为例:
(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone"
};
注意:区域名字即为域名
(2)建立区域数据文件<主要记录为A或AAAA记录>
在/var/named目录下建立区域数据文件
文件为:/var/named/gm.com.zone
$TTL 3600
$ORIGIN magedu.com.
@ IN SOA ns1.gm.com. admin.gm.com. (
2017092301
1H
10M
3D
1D )
IN NS ns1
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 10.1.143.2
mx1 IN A 10.1.143.2
mx2 IN A 10.1.143.2
www IN A 10.1.143.2
web IN CNAME www
bbs IN A 10.1.143.3
bbs IN A 10.1.143.4
权限及属组修改:
# chgrp named /var/named/gm.com.zone
# chmod o= /var/named/gm.com.zone
检测语法错误:
# named-checkconf [/etc/named/named.conf]
# named-checkzone ZONE_NAME ZONE_NAME_FILE
(3)让服务器重载配置文件和区域数据文件
# rndc reload 或
# systemctl reload named.service
·配置解析一个反向区域:
(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现
zone "ZONE_NAME" IN {
type {master|slave|hint|forword};
file "ZONE_NAME.zone"
};
注意:
区域名
反向区域的名字
反写的网段地址.in-addr.arpa
143.1.10.in-addr.arpa
(2)建立区域数据文件<主要记录为PTR>
在/var/named目录下建立区域数据文件
注意:在反向解析区域数据文件中,不能有MX的记录
文件为:/var/named/10.1.143.zone
$TTL 3600
$ORIGIN 143.1.10.in-addr.arpa.
@ IN SOA ns1.gm.com. admin.gm.com. (
2016092301
1H
10M
3D
1D )
IN NS ns1
2 IN A ns1.gm.com.
2 IN A mx1.gm.com.
2 IN A mx2.gm.com.
3 IN A bbs.gm.com.
4 IN A bbs.gm.com.
2 IN A www.gm.com.
权限及属组修改:
# chgrp named /var/named/10.1.143.zone
# chmod o= /var/named/10.1.143.zone
检测语法错误:
# named-checkconf [/etc/named/named.conf]
# named-checkzone ZONE_NAME ZONE_NAME_FILE
(3)让服务器重载配置文件和区域数据文件
# rndc reload 或
# systemctl reload named.service
·主从服务器:
注意:从服务器是区域级别的概念
1、应该为一台独立的名称服务器
2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
4、主服务器得允许从服务器作区域传送
5、主从服务器时间应该同步,可通过ntp进行:ntpdate命令
6、bind 程序的版本应该保持一致;否则,应该从高,主低
配置一个从区域
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,从服务器才能同步数据>
(1)在主服务器上的正向区域解析文件中追加2条记录
从服务器的NS记录:
magedu.com. IN NS ns2.magedu.com.
从服务器NS记录的A记录
ns2 IN A SLAVE_IP<从服务器的IP>
·rndc命令:named服务器控制命令
rndc –> rndc (953/tcp)
rndc COMMAND
COMMAND:
reload:重载主配置文件和区域解析库文件
reload zone:重载区域解析库文件
retransfer zone:手动启动区域传送过程,而不管序列号是否增加
notify zone:重新对区域传送发通知
reconfig:重载主配置文件
querylog:开启或关闭查询日志文件/var/log/message
trace:递增debug 一个级别
trace LEVEL:指定使用的级别
notrace:为将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
·子域授权:
注意:关闭dnssec功能:
dnssec-enable no;
dnssec-validation no;
正向解析区域授权子域的方法:<添加在正向区域解析文件中的数据>
ops.gm.com. IN NS ns1.ops.gm.com.
ops.gm.com. IN NS ns2.ops.gm.com.
ns1.ops.gm.com. IN NS IP.AD.DR.ESS
ns2.ops.gm.com. IN NS IP.AD.DR.ESS
在子域服务器上在配置/etc/named.conf文件和/var/named/目录下的区域文件,格式大致同主服务器
提醒:此时的子域的域名是ops.gm.com
·转发服务器:
注意:关闭dnssec功能:
dnssec-enable no;
dnssec-validation no;
定义转发:
注意:被转发的服务器必须允许为当前服务做递归,否则转发请求不予进行
(1)区域转发:仅转发对某些特定区域的解析请求
zone "ZONE_NAME" IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
}
first:首先转发;转发器不响应时,自行去迭代查询
only:只转发;转发器不响应时,就放弃查询
(2)全局查询:针对凡本地没有通过zone定义的区域查询请求,通通转发给某转发器
options {
…..
forward {first|only};
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所属的网络
注意:只能先定义,后使用 ;因此一般 定义在 配置文件中,处于options的前面
访问控制指令:
allow-query {}; 允许查询的主机;白名单
allow-transfer {}; 允许向那些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器可以传送
allow-recursion {}; 允许那些主机向当前DNS服务器发起递归查询请求
allow-update {}; DDNS,运行动态更新区域数据库文件中内容
·bind view:<视图>
一个bind服务器可定义多个view,每个view中可定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
view VIEW_NAME {
match-clients { };
zone …
zone …
….
};
例如:
view internal {
match-clients { 172.16.0.0/8; };
zone "gm.com" IN {
type "master";
file "gm.com/internal.zone";
};
};
view external {
match-clients { any; };
zone "gm.com" IN {
type "master";
file "gm.com/external.zone";
};
};
注意:
(1)一旦启用了view,所有的zone都只能定义在view中
(2)仅在允许递归请求的客户端所在view中定义根区域
(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表
原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/49107