一、软件安装
BIND的安装配置:BIND是 Berkeley Internet Name Domain 简称,是开源dns协议的实现。
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
主配置文件格式
全局配置段:
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]
解析库文件:
/var/named/目录下;
一般名字为: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程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
(这种情况下可以链接网络,并为设置DNS为其地址的服务器得到递归结果,并缓存)
CentOS 6: service named start
CentOS 7: systemctl start named.service
测试工具:
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) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN { # ZONE_NAME即为域名; type {master|slave|hint|forward}; file "ZONE_NAME.zone"; # 默认在/var/named目录下 };
例如:
tail /etc/named.rfc1912.zones zone "magedu.com" IN { type master; file "magedu.com.zone"; };
(2) 建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件;
文件为:/var/named/magedu.com.zone
$TTL 3600$ORIGIN [email protected] IN SOA ns1.magedu.com.( 主DNS可以用@或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-checkzone magedu.com /etc/named/magedu.com.zone # named-checkconf
(3) 让服务器重载配置文件和区域数据文件
# rndc reload 或# systemctl reload named.service
配置一个反向区域 解析
(1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN { type {master|slave|hint|forward}; file "ZONE_NAME.zone"; }; 例如: zone "100.16.172.in-addr.arpa" IN { }
注意:反向区域的名字:反写的网段地址.in-addr.arpa,如:100.16.172.in-addr.arpa
(2) 定义区域解析库文件(主要记录为PTR,不用写MX,CNAME类型的记录)
示例,区域名称为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-checkzone 100.16.172.in-addr.arpa 172.16.100.zone # named-checkconf
(3) 让服务器重载配置文件和区域数据文件
# rndc reload 或# systemctl reload named.service
三、主从服务器:
配置一个从区域:
在从服务器上配置:
(1) 定义区域
定义一个从区域;
zone "ZONE_NAME" IN { type slave; file "slaves/ZONE_NAME.zone"; masters { MASTER_IP; };};
配置文件语法检查:named-checkconf
(2) 重载配置
rndc reloadsystemctl reload named.service
On Master在主服务器上配置:
(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录和其主机名配置的一个A记录,且此A后面的地址为真正的从服务器的IP地址;
注意:时间要同步;
ntpdate命令;# 任何基于时间同步的主从服务器都需要时间同步。
手动区域传送:dig -t axfr magedu.com @主服务器 # 得到区域传送的所有内容。# 这样有风险啊? 别人只要懂这条命令就可以得到你的所有解析条目。
四、子域授权:
正向解析区域授权子域的方法:
ops.magedu.com. IN NS ns1.ops.magedu.com. (不是个A记录)ops.magedu.com. IN NS ns2.ops.magedu.com.ns1.ops.magedu.com. IN A IP.AD.DR.ESSns2.ops.magedu.com. IN A IP.AD.DR.ESS
子域找父域的解析条目,没有负责父域的条目,只能找根了,那么怎么定义转发到父域呢?定义区域转发。
六、bind中的安全控制的相关配置:
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;
先定义后使用;
acl ACL_NAME {
ip; # 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,允许动态更新区域数据库文件中内容;一般定义为none,不允许动态更新。
vim /etc/named.conf
在zone或全局中设置传递并设置该acl
acl slaves{ 172.16.100.68; 127.0.0.1; };
这样仅仅在这些地址才能够进行传送解析信息。
vim /etc/named.conf acl mynet{ 172.18.0.0/24; 127.0.0.1; }; allow-recurse{ mynet; };
这样
仅仅在这些地址服务器才给递归。