DNS & bind(2)

DNS and bind(2)


BIND的安装配置
BIND:Berkeley internet name domain,ISC.org
DNS:协议
bind:DNS协议的一种实现
named:bind程序的运行的进程名
bind程序包
bind-libs:被bind和bind-utils包中的程序共同用到的库文件
bind-utils:bind客户端程序集,例如 dig  host   nslookup等。
bind:提供的DNS server 程序,以及几个常用的测试程序
bind-chroot:选装,让named运行于jail末模式下
可以通过 yum info 查看安装包的详细信息
bind:
主配置文件:/etc/named.conf
或包含进来的其他配置文件:
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/var/named/目录下;
一般名字为: ZONE_NAME.zone
注意:
(1)一台DNS服务器同时可以有多个zone(区域)提供解析
(2)必须要有根区域解析库文件:name.ca;
(3)还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析
正向:named.localhost
反向:named.loopback

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

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

主配置文件格式:
全局配置段:
options{...}
日志配置段:
logging{...}
区域配置段:
zone{....},
那些由本机负责解析的区域,或转发的区域
注意:每个配置语句的结尾必须以分号结束,花括号前后要有空格

缓存名称服务器的配置:
监听能与外部主机通信的地址
listen-on port 53 { any; };
listen-on port 53 { 172.16.1.14; };
学习时建议关闭:
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询(否则子域不能通过父域解析):
allow-query { lovalhost; };注释掉  === 》//allow-query { lovalhost; };
或者直接将allow-query { lovalhost; };删除。

检查配置文件的语法:

测试工具
dig  host  nslookup

dig 
dig [-t RR-TYPE] name [@SERVER] [query option ]
用于测试DNS系统,因此其不会查询hosts文件;
查询选项:
+[no]trace:跟踪解析过程
+[no]recure:跟踪递归解析

正向解析

反向解析   
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 reload
rndc status
rndc flush

配置一个正向区域:
以magedu.com域为例

(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现:
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
则可以在改文件中按照下面的格式添加配置:
zone "ZONE_NAME"  IN  {
type  {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:区域名字即为域名
添加的内容如下:

(2)建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件 magedu.com.zone
这里的dnsadmin.magedu.com.为管理员邮箱,@要用点"."替代
ns1后面不加点 ,ns1.magedu.com. 后面要加点

检查配置文件语法
named-checkconf
只检查某个区域的语法:
named-checkzone magedu.com  /var/named/magedu.com.zone

(3)更改权限
chown :named  /var/named/magedu.com.zone
chmod 640   /var/named/magedu.com.zone

(4)让服务器重载配置文件和区域数据文件
rndc reload
rndc status


配置一个反向区域:
以172.16.100.0网段为例

(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现:
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
则可以在改文件中按照下面的格式添加配置:
zone "ZONE_NAME"  IN  {
type  {master|slave|hint|forward};
file "ZONE_NAME.zone";
};

注意:
反向区域的名字格式: 反写的网段地址.in-addr.arpa.
对于地址 172.16.100.12 ,应该写成: 100.16.172.in-addr.arpa.

添加的内容如下:

(2)建立区域数据文件(区域名称为1 00.16.172.in-addr-arpa
在/var/named目录下建立区域数据文件 100.16.172.zone
注意:
在反向解析区域文件中不需要定义MX的记录,因为反向解析和MX没有关系
 IN      NS      ns1.magedu.com.     中一定要写全不能写成 ns1,    否则会自动补全为  ns1. 100.16.172.in-addr.arpa. 就不对了

检查配置文件语法
named-checkconf
只检查某个区域的语法:
named-checkzone  100.16.172.in-addr.arpa.   /var/named/ 100.16.172.zone

(3)更改权限
chown :named  /var/nam ed/100.16.172.zone
chmod 640  /var/named/100.16.172.zone

(4)让服务器重载配置文件和区域数据文件
rndc reload
rndc status

(5)反向解析测试命令
dig -x 172.16.100.67


主从DNS服务器之从服务器:
注意:
从服务器是区域级别的概念(只是在某一个区域级别上从),
比如说DNS服务器A为10个区域提供正向/反向解析并且都是主的,那么从DNS服务器B只能支持其中的一个区域的从,另外9个不管。
也就是说从服务器只是相对于主DNS服务器的某一区域配置的,而不是相对于整台主服务器配置的。
如果要实现从服务器是整个主服务器所有区域的从,就要对主服务器上的所有区域分别进行配置才可以。
DNS服务器的主从还支持级联复制。

从服务器 172.16.100.68安装 bind
yum install bind -y
监听能与外部主机通信的地址
listen-on port 53 { 127.0.0.1; 172.16.100.67 };
listen-on port 53 { 172.16.1.67; };
注意:172.16.100.67是主DNS服务器的地址
学习时建议关闭:
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询(否则子域不能通过父域解析):
allow-query { lovalhost; };注释掉  === 》//allow-query { lovalhost; };
或者直接将allow-query { lovalhost; };删除。

检查配置文件的语法:
named-checkconf /etc/named.conf
重启DNS服务
/etc/init.d/named start
/etc/init.d/named status

配置一个正向区域:
On slave(在从服务器上)
(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现:
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
定义一个正向区域:
zone "ZONE_NAME"  IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
添加的内容如下:

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

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

On master(在主服务器 172.168.100.67 上)
(4) 修改在/var/named目录下的区域数据文件 magedu.com.zone
注意:
确保区域数据文件中为每个从服务配置NS记录。并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A记录后面的地址为 从服务器的真实IP地址

(5)增加序列号 
2017070801      ; serial   ===> 2017070802      ; serial

(6)在主服务器上检查语法及区域文件
检查配置文件语法
named-checkconf
只检查某个区域的语法:
named-checkzone magedu.com.   /var/named/ magedu.com.zone

(7)主DNS服务器重载
rndc reload
systemctl reload named.service
rndc status


(8) 从服务器重载
rndc reload
systemctl reload named.service
rndc status

(9)查看路径 /var/named/slave下面已经有了区域文件 magedu.com.zone(二进制的)

(10)解析测试
dig -t A www.magedu.com  @172.16.100.68

上面配置的主从DNS,在主DNS添加一条新的记录,reload后会通知从服务器同步,从服务器会自动实现同步

配置一个反向区域:
(11)定义区域
在主配置文件中或主配置文件辅助配置文件中实现:
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
定义一个反向区域:
zone "ZONE_NAME"  IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
添加的内容如下:

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

在主服务器上
(13)修改 在/var/named目录下建立区域数据文件 100.16.172.zone

(14)在主服务器上检查区域文件
named-checkzone 100.16.172.in-addr.arpa.   /var/named/ 100.16.172. zone

(15) 增加序列号 
2017070801      ; serial   ===> 2017070802      ; serial

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

从服务器上
(17)重载配置
rndc reload
systemctl reload named.service

(18)查看路径 /var/named/slave 下面已经有了区域文件 100.16.172. zone (二进制的)

(19)解析测试
dig -x 172.16.100.67 @172.16.100..68

提示:上面配置的主从DNS,在主DNS添加一条新的记录,reload后会通知从服务器同步,从服务器会自动实现同步

补充:
除了可以实现自动区域传送以外,还可以手动区域传送
在主上
dig -t axfr magedu.com
dig -t ixfr magedu.com
在从上
dig -t axfr magedu.com @172.16.100.67
dig -t axf100.16.172.in-addr.arpa. @172.16.100.67

注意:
从安全考虑,主服务器只给从服务器开放传送,其他的一概不允许。(访问控制-后面介绍)
主从DNS的时间要同步。

子域授权
开通二级域以后,就可以在公司内建立三级域并进行管理
比如已经开通的二级域是 magedu.com.
想开通的三级域是 ops.magedu.com.
下面基于此二级域进行子域(三级域的授权)

(1)在一台全新的服务器上安装bind
注意:
此台子域DNS服务器是主DNS服务器(当然可以再建它的从DNS服务器)
还要做好所有DNS服务器的时间同步

(2)正向解析区域授权子域的方法:
ops.magadu.com.             IN  NS    ns1.ops.magedu.com.
ops.magadu.com.             IN  NS    ns2.ops.magedu.com.
ns1.ops.magedu.com.      IN  A       IP of  ns1.ops.magedu.com.  
ns2.ops.magedu.com.      IN  A       IP of  ns2.ops.magedu.com.  

补充:同样,在顶级域上对二级域进行
mgedu.com.                       IN    NS   ns1.magedu.com.
ns1.magedu.com.             IN    A       IP of  ns1.magedu.com. (202.34.54.21)


(3) 在父域的主服务器上 修改 在/var/named目录下的 正向解析的区域数据文件 magedu.com.zone

(4)重载配置
rndc reload

(5) 在子域的DNS服务器上 编辑主配置文件 /etc/named.conf
listen-on port 53 { 172.16.10.80; };

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

关闭仅允许本地查询(否则子域不能通过父域解析):
将allow-query { lovalhost; };注释掉  === 》//allow-query { lovalhost; };
或者直接将allow-query { lovalhost; };删除。

(6)检查语法
named-checkconf

(7) 在子域的DNS服务器上启动DNS服务
/etc/init.d/named start
/etc/init.d/named status
netstat -lntup|grep named

(8) 在子域的DNS服务器上编辑 主配置文件中或主配置文件辅助配置文件
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
添加下面的内容:

(9) 在子域的DNS服务器上 创建子域服务器正向解析数据文件 /var/named/ops.magedu.com.zone

(10) 在子域的DNS服务器上 修改文件  /var/named/ops.magedu.com.zone 的属组和权限
chown :named /var/named/ops.magedu.com.zone
chmod 640 /var/named/ops.magedu.com.zone

(11)在子域的DNS服务器上检查语法
named-checkconf
 
(12)重载配置
rndc reload

(13)在子域DNS上解析自己(子域)测试
dig -t A www.ops.magedu.com @127.0.0.1

(14) 在父域DNS上解析子域测试
dig -t A  www.ops.magedu.com  @172.16.100.67
注意:如果解析不到的话,请查看父域的和子域的主配置文件named.conf中是否打开了云允许查询:
//allow-query { lovalhost; };
allow-query { any; };

如果此时要在子域DNS上解析父域,由于父域不是子域负责解析的区域,所以此时子域DNS就要去找根服务器了。
这时候,如果想要子域服务器在解析父域的时候,直接去找父域,而不是通过去找根服务器去一级级的迭代,那就需要定义转发域(区域)
因为默认情况下,只要不是自己负责的区域,都会去找根服务器去迭代。

(15)在子域DNS服务器上定义转发:
注意:被转发的服务器必须允许为当前服务做递归,否则转发不成功。上面说的转发给根,并不是意为者根会为此服务器做递归。

  • 区域转发:仅转发对特定区域的解析请求 

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

在子域的DNS服务器上编辑 主配置文件中或主配置文件辅助配置文件
如果主配置文件中,有次条语句: include "/etc/named.rfc1912.zones";  包含文件: /etc/named.rfc1912.zones
也可以通过include其他文件来实现
添加下面的内容,指明父域在哪里:

在子域DNS上检查语法
named-checkconf

在子域DNS上重载
rndc reload

在子域DNS上解析父域测试
dig -t A  www.magedu.com  @172.16.100.80
注意:如果解析不到的话,请查看父域的和子域的主配置文件named.conf中是否打开了云允许查询:
//allow-query { lovalhost; }; 或删除
allow-query { any; };

  • 全局转发:针对凡是本地没有通过zone定义的区域的查询请求,统统转发给某转发器。
全局转发,要在子域DNS本机修改主配置文件 /etc/named.conf
在全局段添加转发规则:


bind中的安全相关的配置

acl :访问控制列表,把一个或多个地址归并为一个命令的集合,随后通过此名称即可对此集合内的所有主机实现统一调用。

注意: acl 要先定义,后使用,并且 acl 要在 options { };  外面定义。
格式为:
acl  acl_name  {
     ip;
     net/prelen;
};
示例:


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

访问控制指令(放在options中就是全局生效,放在zone中就是区域生效):
allow-query {};   允许查询的主机,即白名单。
allow-transfer {};  允许向那些主机做区域传送,默认为向所有主机,应该配置为仅允许向从服务器传送。 如果有从DNS,要指向从DNS的IP,没有从DNS的话要设为none
allow-recursion {};  允许哪些主机向当前DNS服务器发起递归查询请求,默认是允许所有: recursion yes;
allow-update  {}; DDNS,允许动态更新区域数据库文件中的内容,进程自动更新。除非使用DDNS,否则,每个区域都应该是设置为  allow-update { none };

allow-transfer {}; 相关的配置是:
主DNS的/etc/named.conf 中:
在主DNS的 /etc/named.rfc1912.zones
在从DNS的 /etc/named.rfc1912.zones

检查语法
named.checkconf

重在配置
rndc reload

这时候,只有在 acl slaves { 172.16.100.68;  127.0.0.1;  }; 中的 172.16.100.68,以及本机的127.0.0.1上可以同步数据,其他的不可以
172.16.100.68上执行 dig -t axfr megedu.com @17216.100.67 可以成功传送数据
在其他机器上执行dig -t axfr megedu.com @17216.100.67 不可以传送数据。

allow-recursion {};   的相关配置是:
/etc/named.conf 中:

alllow-update {};的相关配置
在从服务器上编辑区域文件 /etc/named.rfc1912.zones

bind view(视图):
视图:
view VIEW_NAME {
    zone;
    zone;
    zone;
};

示例:
注意:view视图是自上向下匹配的,匹配到一条后就不在向下匹配了。

课外作业:who is命令;注册一个域名;
正向解析区域、反向解析区域、主从、子域、基本安全控制




























猜你喜欢

转载自www.cnblogs.com/shichangming/p/9590056.html