DNS and BIND
-
综述
DNS: Domain Name Service,协议(C/S, 53/udp, 53/tcp);应用层协议;
BIND:Bekerley Internat Name Domain, ISC (www.isc.org)
TCP: 面向连接的协议;在dns的tcp有其它用处
UDP: User Datagram Protocol,无连接协议,不需要确认对方是否在线,速度快,省略很多流程,节约资源。
-
本地名称解析配置文件:hosts,起初IANA创建个host文件,然后提供下载,主机到IANA上更新host文件。当主机太多后,ip地址与解析越来越多,IANA不与允许主机从IANA下载了,找个服务器来提供查询。多了一步,用udp比较节约时间。Hash化提取特征码,保存在内存中,hash桶保存。桶还缩小范围,两级就够了。当解析规模到了100,0000级别了,服务器这是也拖不住了。
Linux:/etc/hosts
Windows:%WINDOWS%/system32/drivers/etc/hosts
1.1.1.1 www.magedu.com
1.2.2.2 www.apple.com
-
DNS Domain:
-
FQDN: Full Qualified Domain Name : www.magedu.com.(最后一格个点不能省略) 各需要一个解析库来分别负责本地域名的正向和反向解析
-
Top Level Domain: tld,直接位于根下。
顶级域:com, edu, mil, gov, net, org, int
-
三类:组织域、国家域(.cn, .iq, .hk, .tw)、反向域
-
DNS查询
-
类型:
-
递归查询:发一次请求得到最终答案
-
迭代查询:发多次请求得到答案
-
-
互联网的根、.com主机这些都不支持递归查询,运营商提供一台主机做递归查询,而用户主机只能做迭代查询。
-
一次完整的查询请求经过的流程:
Client –> hosts文件 –> DNS Service
Local Cache –> DNS Server (recursion) –> Server Cache –> iteration(迭代) –>
-
解析类型:正向区域、反向区域,注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;需要像不同的上级注册,而反向解析对于邮件服务器很重要。
Name –> IP
IP –> Name
正向:FQDN –> IP
反向: IP –> FQDN
-
解析答案:
-
肯定答案:请求条目存在返回结果
-
否定答案:请求的条目不存在等原因导致无法返回结果;否定答应也缓存,所有否定答案都统一缓存,本地没有的都缓存下来。
-
权威答案:权威负责这个域的就叫权威回答
-
非权威答案:缓存返回的
-
-
DNS服务器的类型:
-
主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理维护;
-
辅助DNS服务器:从主DNS服务器或其它的从DNS服务器那里”复制”(区域传递)一份解析库;
-
都会接受用户请求,在上级dns数据库,写两条轮询,最简单的发负载均衡,很多负载均衡都没有考虑到。当一台down机了,都丢给第二台
-
问第一个解析某个地址解析不到了,由于都是找根问的,如果第一台解析不出结果了,它是不会找第二台。
-
如果第一台down 机了才会找第二台。
-
-
缓存DNS服务器:运营商提供给用户提供递归dns服务的,本身不进行dns解析的。通过在把地址hash在内存中,保留一段时间,不用再次请求查询。在缓存失效期,用的一定就是缓存查询的结果。最差生效,两个小时。客户端缓存是主机缓存,专门拿来的太主机做缓存服务器就是缓存服务器。
-
转发器:暂时先不考虑
-
名称服务器:域内负责解析本域内的名称的主机;通常较ns
-
根服务器:13组服务器(异地多活动主机)绝大多数在美国。
-
-
-
测试命令:
-
dig的使用
dig [-t type] name [@SERVER] [query options]
dig用于测试dns系统,因此,不会查询hosts文件进行解析;
-
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
-
测试反向解析:
dig -x IP @SERVER
-
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
例如:dig -t axfr magedu.com @172.16.100.11
-
host命令:
host [-t type] name [SERVER]
-
nslookup命令:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME: 要查询的名称;
-
rndc:
rndc –> rndc (953/tcp)
rndc COMMAND
COMMAND:
reload: 重载主配置文件和区域解析库文件
reload zone: 重载区域解析库文件
retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;
notify zone: 重新对区域传送发通知;
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志;
trace: 递增debug级别;
trace LEVEL: 指定使用的级别;
-
named-checkzone
[root@repo named]# named-checkzone “31.16.172.in-addr.arpa” /var/named/31.16.172.zone
zone 31.16.172.in-addr.arpa/IN: loaded serial 2016021601
OK
-
named-checkconf
[root@repo named]# named-checkconf
没有消息说明主配置文件正常
区域解析库:由众多RR组成:
-
资源记录:Resource Record, RR
-
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
-
Soa:起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
-
A:internet Address,作用,FQDN –> IP
-
AAAA: FQDN –> IPv6
-
PTR: PoinTeR,IP –> FQDN
-
NS: Name Server,专用于标明当前区域的DNS服务器
-
CNAME:Canonical Name,别名记录
-
MX: Mail eXchanger,邮件交换器
-
-
资源记录定义的格式:
-
语法:name [TTL] IN rr_type value
-
注意:
-
TTL可从全局继承;
-
@可用于引用当前区域的名字;
-
同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
-
同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;
-
-
-
SOA:Start Of Authority,
-
语法:name [TTL] IN rr_type value
-
例如:
-
-
magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. (
2015042201 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
IN:关键字
NAME:解析的名称。
TTL:缓存的时间(全局定义后可省略)
rr_type: 记录的类型,主要为前面7种
VALUE:解析出来的地址。
-
ttl可以从全局继承
-
@可以引用当前区域的名字相邻的两个资源记录的name相同时,后续的可省略;
-
相邻的两个资源记录的name相同时,后续的可省略;
-
同一名字可能有多个不同的主机,这时会轮询。
-
同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已
-
SOA概述:
-
name: 当前区域的名字,例如”magedu.com.”;
-
value: 有多部分组成
-
当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;这个要求并不严格
-
-
录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
-
(主从服务协调属性的定义以及否定的答案的统一的TTL)
-
序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增;
-
区域传送:
-
全量传送:传送整个解析库
-
增量传送:传递解析库变化的那部分内容
-
-
-
刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔;
-
重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;
-
过期时长:从服务器始终联系不到主服务器时,多久多后放弃从服务器角度,停止提供服务;
-
“通知”机制:当主服务器自己发生变化,立即告诉从服务器,这样就避免的从服务器数据落后主服务器。
-
-
-
NS:
-
语法:name [TTL] IN rr_type value
-
-
name: 当前区域的名字
-
value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.;注意:一个区域可以有多个NS记录;
-
例如:
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
-
注意:
-
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
-
MX:
-
语法:name [TTL] IN rr_type value
-
-
name: 当前区域的名字
-
value: 当前区域的某邮件服务器(smtp服务器)的主机名;
-
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
-
例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
-
注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
-
A:
-
语法:name [TTL] IN rr_type value
-
-
name: 某主机的FQDN,例如www.magedu.com.
-
value: 主机名对应主机的IP地址;
-
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
mx1.magedu.com. IN A 1.1.1.3
mx2.magedu.com. IN A 1.1.1.3
-
注意:避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;
*.magedu.com. IN A 1.1.1.4
magedu.com. IN A 1.1.1.4
-
AAAA:
-
语法:name [TTL] IN rr_type value
-
name: FQDN
value: IPv6
-
PTR:
-
语法:name [TTL] IN rr_type value
-
-
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
-
value: FQDN
-
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com
简写成:
4 IN PTR www.magedu.com.
-
注意:网络地址及后缀可省略;主机地址依然需要反着写;
CNAME:
name: 别名的FQDN
value: 正工名字的FQDN;
例如:
web.magedu.com. IN CNAME www.magedu.com.
搭建DNS
-
子域授权:
-
每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权;
-
类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
magedu.com. 在.com的名称服务器上,解析库中添加资源记录:
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
magedu.com. IN NS ns3.magedu.com.
ns1.magedu.com. IN A 3.3.3.1
ns2.magedu.com. IN A 3.3.3.2
ns3.magedu.com. IN A 3.3.3.3
glue record:粘合记录
-
域名注册:
代理商:万网, 新网;godaddy
注册完成以后,想自己用专用服务来解析?
-
管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址;
-
BIND的安装配置:
dns服务,程序包名bind,程序名named
-
程序包:
Bind—-主程序包
bind-libs—库文件
bind-utils—测试程序包
bind-chroot.x86_64—安全沙盒 —-一般测试不建议使用
bind-chroot: /var/named/chroot/ 圈禁在一个小范围里。
bind-lite-devel.i686 –开发环境
bind-lite-devel.x86_64 –开发环境
bind-sdb.x86_64 -数据库组件 把解析库放在非文件中,数据库中
bind-sdb-chroot.x86_64 –数据库安全组件
bind-dyndb-ldap.x86_64 -数据库组件
-
bind应用程序:
-
服务脚本:/etc/rc.d/init.d/named
-
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
-
/etc/named.conf, 主配置文件—切片了—–〉/etc/named.rfc1912.zones中
-
-
rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;
-
953/tcp
主配置文件:
-
全局配置:options {}
-
日志子系统配置:logging {}
-
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;
zone “ZONE_NAME” IN {}
-
注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上;
-
缓存名称服务器的配置:监听外部地址即可;
-
dnssec: 建议测试时关闭dnssec;
-
解析库文件:/var/named/ZONE_NAME.ZONE
-
注意:
-
一台物理服务器可同时为多个区域提供解析;
-
必须要有根区域文件;named.ca
-
应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;
-
-
配置缓存DNS服务器
-
备份配置文件
-
[root@repo etc]# cp /etc/named.conf{,.bak} -av
`/etc/named.conf’ -> `/etc/named.conf.bak’
[root@repo etc]# cat /etc/named.conf.bak
-
修改配置文件
[root@repo etc]# vim /etc/named.conf
listen-on port 53 { 172.16.31.125; };
allow-query { any; };
-
[root@repo etc]# named-checkconf 检查配置文件是否正确无返回说明正确
-
重新载入配置文件
-
检查端口监听是否正常
[root@repo etc]# ss –tunl
-
测试解析正常
-
主DNS名称服务器:
-
在主配置文件中定义区域
-
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file “ZONE_NAME.zone”;
};
[root@repo etc]# vim /etc/named.rfc1912.zones
zone “cpe.com” IN {
type master;
file “cpe.com.zone“;
};
“ZONE_NAME” 区域名称(日后区域解析库@会调用它)
Type:master主服务器
file “cpe.com.zone“; 区域解析库文件
-
定义区域解析库文件
[root@repo etc]# vim /var/named/cep.com.zone
$TTL 86400
$ORIGIN cpe.com.
@ IN SOA cpe.com. admin.cpe.com (
2016021601
1H
5M
1W
1D
)
IN NS ns1
IN NS ns2
IN MX 20 mx1
IN MX 10 mx2
ns1 IN A 172.16.31.125
ns2 IN A 172.16.31.124
mx1 IN A 172.16.31.125
mx2 IN A 172.16.31.124
www IN A 172.16.31.124
www IN A 172.16.31.125
* IN A 172.16.31.124
ftp IN CNAME www
cpe.com. IN A 172.16.31.124
-
检查配置文件是否正确
[root@repo etc]# named-checkconf
[root@repo etc]# named-checkzone “cpe.com” /var/named/cep.com.zone
zone cpe.com/IN: loaded serial 2016021601
OK
-
重新载入配置文件
[root@repo etc]# service named reload
Reloading named: [ OK ]
-
测试配置
[root@repo named]# dig -t NS cpe.com @172.16.31.125
[root@repo named]# dig -t MX cpe.com
[root@repo named]# dig -t axfr cpe.com
-
出现的内容:
-
宏定义;$TTL 86400 $ORIGIN cpe.com.
-
资源记录;
-
示例:
$TTL 86400
$ORIGIN magedu.com.
@ IN SOA ns1.magedu.com. admin.magedu.com (
2015042201
1H
5M
7D
1D )
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 172.16.100.11
ns2 IN A 172.16.100.12
mx1 IN A 172.16.100.13
mx2 IN A 172.16.100.14
www IN A 172.16.100.11
www IN A 172.16.100.12
ftp IN CNAME www
-
反向区域:
区域名称:网络地址反写.in-addr.arpa.172.16.100. –> 100.16.172.in-addr.arpa.
-
定义区域
zone “ZONE_NAME” IN {
type {master|slave|forward};
file “网络地址.zone”
};
[root@repo named]# vim /etc/named.rfc1912.zones
zone “31.16.172.in-addr.arpa” IN {
type master;
file “31.16.172.zone”;
};
-
区域解析库文件
注意:不需要MX和A,以及AAAA记录;以PTR记录为主;
示例:
$TTL 86400
$ORIGIN 100.16.172.in-addr.arpa.
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2015042201
1H
5M
7D
1D )
IN NS ns1.magedu.com.
IN NS ns2.magedu.com.
11 IN PTR ns1.magedu.com.
11 IN PTR www.magedu.com.
12 IN PTR mx1.magedu.com.
12 IN PTR www.magedu.com.
13 IN PTR mx2.magedu.com.
[root@repo named]# vim /var/named/31.16.172.zone
$TTL 86400
$ORIGIN 31.16.172.in-addr.arpa.
@ IN SOA cpe.com. admin.cpe.com (
2016021601
1H
5M
1W
1D
)
IN NS ns1.cpe.com.
IN NS ns2.cpe.com.
125 IN PTR ns1.cpe.com.
124 IN PTR ns2.cpe.com.
125 IN PTR mx1.cpe.com.
124 IN PTR mx2.cpe.com.
125 IN PTR www.cpe.com.
125 IN PTR www.cpe.com.
-
测试配置文件
-
[root@repo named]# named-checkconf
没有反馈说明配置文件正确
-
[root@repo ~]# named-checkzone “31.16.172.in-addr.arpa.” /var/named/31.16.172.zone
-
zone 31.16.172.in-addr.arpa/IN: loaded serial 2016021601
-
OK
-
-
重载配置文件
[root@repo ~]# rndc reload
server reload successful
[root@repo ~]# rnds status
-bash: rnds: command not found
[root@repo ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@repo ~]# service named restart
Stopping named: . [ OK ]
Starting named: [ OK ]
[root@repo ~]# service named reload
Reloading named: [ OK ]
-
测试解析
[root@repo ~]# dig -x 172.16.31.124 @172.16.31.125
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -x 172.16.31.124 @172.16.31.125
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2753
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;124.31.16.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
124.31.16.172.in-addr.arpa. 86400 IN PTR ns2.cpe.com.
124.31.16.172.in-addr.arpa. 86400 IN PTR mx2.cpe.com.
;; AUTHORITY SECTION:
31.16.172.in-addr.arpa. 86400 IN NS ns2.cpe.com.
;; ADDITIONAL SECTION:
ns2.cpe.com. 86400 IN A 172.16.31.124
;; Query time: 0 msec
;; SERVER: 172.16.31.125#53(172.16.31.125)
;; WHEN: Fri Feb 17 10:55:44 2017
;; MSG SIZE rcvd: 117
[root@repo ~]# host -t ptr 172.16.31.125
125.31.16.172.in-addr.arpa domain name pointer ns1.cpe.com.
125.31.16.172.in-addr.arpa domain name pointer mx1.cpe.com.
125.31.16.172.in-addr.arpa domain name pointer www.cpe.com.
-
修改区域库文件权限,安全考虑
[root@repo named]#chmod 640 cpe.zone 31.16.172.zone
[root@repo named]#chown :named cpe.zone 31.16.172.zone
[root@repo named]# ls /var/named/ -l
total 36
-rw-r—– 1 root named 310 Feb 17 10:59 31.16.172.zone
-rw-r—– 1 root named 364 Feb 17 10:28 cpe.zone
drwxrwx— 2 named named 4096 May 11 2016 data
drwxrwx— 2 named named 4096 May 11 2016 dynamic
-rw-r—– 1 root named 3171 Jan 11 2016 named.ca
-rw-r—– 1 root named 152 Dec 15 2009 named.empty
-rw-r—– 1 root named 152 Jun 21 2007 named.localhost
-rw-r—– 1 root named 168 Dec 15 2009 named.loopback
drwxrwx— 2 named named 4096 May 11 2016 slaves
-
主从复制:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低;
定义从区域的方法:
zone “ZONE_NAME” IN {
type slave;
masters { MASTER_IP; };
file “slaves/ZONE_NAME.zone”;
};
-
打开缓存解析服务
-
检查dns端口是否监听
[root@centos72 named]# ss -tunl | grep 172.16.31.124
-
增加zone
[root@centos72 named]# vim /etc/named.rfc1912.zones
zone “cpe.com” IN {
type slave;
masters { 172.16.31.125; };
file “slaves/cpe.zone”;
};
zone “31.16.172.in-addr.arpa” IN {
type slave;
masters { 172.16.31.125; };
file “/var/named/slaves/31.16.172.zone”;
};
-
测试ns同主服务器。
Feb 17 08:08:52 centos72 named[6866]: managed-keys-zone: sync_keyzone:dns_journal_open -> unexpected error
Feb 17 08:08:52 centos72 named[6866]: managed-keys-zone: unable to synchronize managed keys: unexpected error
Feb 17 08:08:52 centos72 named[6866]: reloading zones succeeded
Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: Transfer started.
Feb 17 08:08:52 centos72 named[6866]: transfer of ‘31.16.172.in-addr.arpa/IN’ from 172.16.31.125#53: connected using 172.16.31.124#58706
Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: transferred serial 2016021601
Feb 17 08:08:52 centos72 named[6866]: all zones loaded
Feb 17 08:08:52 centos72 named[6866]: transfer of ‘31.16.172.in-addr.arpa/IN’ from 172.16.31.125#53: Transfer completed: 1 messages, 9 records, 259 bytes, 0.001 secs (259000 bytes/sec)
Feb 17 08:08:52 centos72 named[6866]: running
Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: sending notifies (serial 2016021601)
-
创建子域
-
子域授权:分布式数据库
-
正向解析区域子域方法:
-
定义一个子区域:
ops.magedu.com. IN NS ns1.ops.magedu.com.
ops.magedu.com. IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A 1.1.1.1
ns2.ops.magedu.com. IN A 1.1.1.2
fin.magedu.com. IN NS ns1.fin.magedu.com.
fin.magedu.com. IN NS ns2.fin.magedu.com.
ns1.fin.magedu.com. IN A 3.1.1.1
ns2.fin.magedu.com. IN A 3.1.1.2
-
在父域转发库中添加子域名授权:
[root@repo ~]# vim /var/named/cpe.zone
ops.cpe.com. IN NS ns1.ops.cpe.com.
ops.cpe.com. IN NS ns2.ops.cpe.com.
ns1.ops.cpe.com. IN A 11.100.40.125
ns2.ops.cpe.com. IN A 11.100.40.14
-
配置子域服务器
同主dns服务器配置
注意:标白的是坑。
注意:关闭dnssec功能:dnssec-enable no; dnssec-validation no;
-
定义转发服务器:
注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;
-
全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;
Options {
forward {first|only}
fowwarders
}
-
区域转发:仅转发对特定的区域的请求至某服务器;
zone “ZONE_NAME” IN {
type forward;
forward {first|only}
forwarders
}
-
例如:
[root@localhost ~]# vim /etc/named.conf
forward first;
forwarders { 172.16.31.125; };
-
创建子域查询库
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone “ops.cpe.com” IN {
type master;
file “ops.cpe.com.zone”;
};
-
配置子域查询库
[root@localhost ~]# vim /var/named/ops.cpe.com.zone
$TTL 86400
$ORIGIN ops.cpe.com.
@ IN SOA ops.cpe.com. admin.ops.cpe.com (
2017021701
1H
5M
1W
1D )
IN NS ns1
IN NS ns2
IN MX 10 mx1
mx1 IN A 11.100.40.14
ns1 IN A 11.100.40.125
ns2 IN A 11.100.40.14
www IN CNAME ns1
* IN CNAME www
ops.cpe.com. IN A 11.100.40.14
-
bind中基础的安全相关的配置:
-
acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;
-
acl acl_name {
ip;
ip;
net/prelen;
};
-
示例:
acl mynet {
172.16.0.0/16;
}
-
bind有四个内置的acl:
-
none: 没有一个主机;
-
any: 任意主机;
-
local: 本机;
-
localnet: 本机的IP同掩码运算后得到的网络地址;
-
-
注意:只能先定义,后使用;因此,其一般定义在配置文件中options的前面;
访问控制的指令:
allow-query {}: 允许查询的主机;白名单;
allow-transfer {}:允许区域传送的主机;白名单;
allow-recursion {}: 允许递归的主机;
allow-update {}: 允许更新区域数据库中的内容;
-
例如:
zone “zmjchina.cn” IN {
type master;
file “zmjchina.zone”;
allow-query { “jiazitext”; };
allow-transfer { “jiazitext”; };
allow-update { “jiazi1”; };
// allow-recursion { 192.168.3.17; }; 无法使用
};
zone “3.168.192.in-addr.arpa” IN {
type master;
file “3.168.192.zone”;
allow-query { none; };
};
acl “jiazitext” {
10.0.0.1; 192.168.3.17;
};
acl “jiazi” {
192.168.3.0/24;
};
acl “jiazi1” {
192.168.3.17;
};
-
控制递归在named.conf中完成
[root@localhost ~]# vim /etc/named.conf
acl “jiazi111” {
192.168.3.0/24;
};
recursion yes;
allow-recursion { “jiazi111”; };
-
bind view:
-
视图:
-
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
-
每个view用一来匹配一组客户端;
-
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
-
-
view VIEW_NAME {
match-clients { };
-
[root@localhost ~]# vim /etc/named.rfc1912.zones
}
view jia {
match-clients { “mynet”; };
allow-recursion { “mynet”; };
zone….
};
-
[root@localhost ~]# vim /etc/named.conf
acl “mynet” {
192.168.3.10/32;
};
-
注意:
-
一旦启用了view,所有的zone都只能定义在view中;
-
仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
-
客户端请求到达时,是自上而下检查每个view所服务的客户端列表;
-
-
CDN: Content Delivery Network
-
智能DNS:
dnspod
dns.la
手动编译安装bind
-
安装开发库组包文件
[root@centos68 ~]# yum grouplist | grep “Dev”
[root@centos68 ~]# yum groupinstall “Development tools” “Desktop Platform Development” –y
-
下载bind
[root@centos68 ~]# wget https://www.isc.org/downloads/file/bind-9-11-0-p3/?version=tar-gz
-
解压文件
[root@centos68 ~]# tar zxf bind-9.11.0-P3.tar.gz
-
进入目录
[root@centos68 ~]# cd bind-9.11.0-P3
-
创建用户与组
[root@centos68 bind-9.11.0-P3]# groupadd -r -g 53 named
[root@centos68 bind-9.11.0-P3]# useradd -r -u 53 -g 53 -M named
-
./configure –prefix=/usr/local/bind9 –sysconfdir=/etc/named/ –disable-ipv6 –disable-chroot –enable-threads –without-openssl
不取消openssl编译无法完成
Make
make install
-
增加环境变量
[root@centos68 named]# vim /etc/profile.d/named.sh
export PATH=$PATH:/usr/local/bind9/bin:/usr/local/bind9/sbin
重读配置文件
[root@centos68 ~]# . /etc/profile.d/named.sh
-
导入bind9用到的库文件
[root@centos68 ~]# vim /etc/ld.so.conf.d/named.conf
/usr/local/bind9/lib
重读库
[root@centos68 ~]# ldconfig –v
-
导入头文件
[root@centos68 ~]# ln -sv /usr/local/bind9/include/ /usr/local/named
`/usr/local/named’ -> `/usr/local/bind9/include/’
[root@centos68 ~]# ls /usr/local/named/
bind9 dns dst irs isc isccc isccfg lwres pk11 pkcs11
-
增加man文件
[root@centos68 ~]# vim /etc/man.config
MANPATH /usr/local/bind9/share/man/
-
创建配置文件
[root@centos68 ~]# vim /etc/named/named.conf
options {
directory “/var/named”;
};
zone “.” IN {
type hint;
file “named.ca”;
};
zone “localhost” IN {
type master;
file “localhost.zone”;
allow-update { none; };
};
zone “0.0.127.ip-addr.arpa” IN {
type master;
file “named.local”;
allow-update { none; };
};
~
-
创建name.ca
dig -t NS . @61.139.2.69 > /var/named/named.ca
-
修改权限
[root@centos68 named]# chown :named /etc/named/named.conf
[root@centos68 named]# chmod 640 /etc/named/named.conf
[root@centos68 named]#
[root@centos68 named]#
[root@centos68 named]# ls -l /etc/named/named.conf
-rw-r—–. 1 root named 275 Feb 12 01:37 /etc/named/named.conf
[root@centos68 named]# chown root:named *
[root@centos68 named]# chmod 640 *
[root@centos68 named]# ls
localhost.zone named.ca name.local
[root@centos68 named]# ls -l
total 12
-rw-r—–. 1 root named 145 Feb 12 01:40 localhost.zone
-rw-r—–. 1 root named 1518 Feb 12 01:38 named.ca
-rw-r—–. 1 root named 142 Feb 12 01:43 name.local
-
调试启动程序不报错就成功了
[root@centos68 named]# named -u named -f -g -d 3
-
正式启动程序
[root@centos68 named]# named -u named
-
Rndc配置
[root@centos68 named]# rndc-confgen -r /dev/urandom
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “FiOahb04PrywbxjfR5qyAQ==”;
};
options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key “rndc-key” {
# algorithm hmac-md5;
# secret “FiOahb04PrywbxjfR5qyAQ==”;
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { “rndc-key”; };
# };
# End of named.conf
-
测试rndc是否启动
[root@centos68 named]# rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
[root@centos68 named]# cat /etc/named/rndc.conf | sed ‘/# key “rndc-key” {$/,$ p’ -n | sed ‘1,$ s/#//g’ | sed ‘$d’ >> /etc/named/named.conf
[root@centos68 named]# killall -SIGHUP named
[root@centos68 named]# named -u named
[root@centos68 named]# rndc status
version: BIND 9.11.0-P3 <id:4801fbc>
running on centos68.zmjchina.cn: Linux x86_64 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016
boot time: Sun, 12 Feb 2017 06:50:09 GMT
last configured: Sun, 12 Feb 2017 07:13:06 GMT
configuration file: /etc/named/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 101 (98 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 0/150
server is up and running
压力测试
-
进入目录
[root@centos68 queryperf]# cd /root/bind-9.11.0-P3/contrib/queryperf
-
./configure
-
[root@centos68 queryperf]# make
-
复制到/usr/local/bind9/bin/
[root@centos68 queryperf]# cp queryperf /usr/local/bind9/bin/
-
创建测试文件
[root@centos68 queryperf]# vim test
www.magedu.com A
www.163.com A
-
测试压力
[root@centos68 queryperf]# queryperf -d test -c 192.168.3.14
DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $
[Status] Processing input data
[Status] Sending queries (beginning with 127.0.0.1)
[Timeout] Query timed out: msg id 1
[Status] Testing complete
Statistics:
Parse input file: once
Ended due to: reaching end of file
Queries sent: 2 queries
Queries completed: 2 queries
Queries lost: 0 queries
Queries delayed(?): 0 queries
RTT max: 0.411310 sec
RTT min: 0.411310 sec
RTT average: 0.411310 sec
RTT std deviation: 0.000040 sec
RTT out of range: 0 queries
Returned NOERROR: 1 queries
Percentage completed: 100.00%
Percentage lost: 0.00%
Started at: Sun Feb 12 02:25:55 2017
Finished at: Sun Feb 12 02:26:00 2017
Ran for: 5.000049 seconds
Queries per second: 0.399996 qps