BIND简介
DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析:
正向解析:根据主机名(域名)查找对应的IP地址
反向解析:根据IP地址查找对应的主机名(域名)
工作形式上又分主服务器、从服务器和缓存服务器。
主服务器:在特定区域内具有唯一性、负责维护该区域内的域名与IP地址对应关系
从服务器:从主服务器中获得域名与IP地址对应关系并维护,以防主服务器宕机等情况
缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址对应关系,提高重复查询时的效率
bind是一款代码的DNS服务器软件,它是由伯克利大学编写,全名(Berkeley Internet Name Domain)伯克利英特网域名,是目前世界上使用最为广泛的DNS服务器软件
bind相关
- 包名: bind
- 进程: named
- 协议: DNS
- 使用端口: 53/tcp , 53/upd
named程序
- 主程序文件 /usr/sbin/named
- 主配置文 /etc/named.conf
- 区域配置文件 /etc/named.rfc1912.zones
bind相关的安装包
- bind : 主程序包
- bind-chroot : 将named进程的活动范围限定在chroot目录,保证安全性
- bind-devel : 与开发相关的头文件和库文件(编译安装bind时所需)
- bind-libs : bind服务器端和客户端都使用到的公共库文件
- bind-utils : bind客户端工具 bind的客户端
bind客户端
~]# rpm -ql bind-utils
/etc/trusted-key.key
/usr/bin/dig #最常用的DNS服务器测试工具
/usr/bin/host #一款轻量级DNS测试工具
/usr/bin/nslookup #DNS查询工具,在众多平台上都有实现(windows上也有),可交互式查询
/usr/bin/nsupdate #更新工具
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz
dig命令
dig [-t type] name [@SERVER] [query options]
query options:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
Tips:(1)dig用于测试dns系统,因此,不会查询hosts文件进行解析
(2)不加”@server-ip”,根据/etc/resolv.conf配置的解析文件来查询
(3)dig命令不会查缓存,而是直接查服务器
eg:
解析百度的地址
反向解析114DNS的域名
追踪www.qq.com的过程
host命令
host [-t type] name [SERVER]
eg:
nslookup命令
nslookup domain [dns-server]
nslookup -qt=type domain [dns-server]
也可以用交互式模式
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
eg:
bind服务器配置
- 配置正向解析的bind
- 配置反向解析的bind
- 配置辅助bind
- 实现主辅DNS之间的区域传送
实验环境:2台CentOS 7.4 x64虚拟机(selinux和firewall已关闭)
Domain Name: example.com. 10.0.0.0/24
主DNS服务器: mster.example.com. 10.0.0.10
辅DNS服务器: slave.example.com. 10.0.0.11
WEB服务器: www.example.com. 10.0.0.10,10.0.0.11
FTP服务器: ftp.example.com. CNAME www.example.com
MX服务器: mx.example.com. 10.0.0.10
具体过程如下:
两台虚拟机都通过yum安装bind
~]# yum install bind bind-libs bind-utils -y
两台虚拟机都修改主配置文件(/etc/named.conf)
主配置文件包含以下内容
全局配置:options {}
日志子系统配置:logging {}
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;
格式为 zone "ZONE_NAME" IN {}
~]# vim /etc/named.conf
listen-on port 53 { any; }; 监听任意ip地址
allow-query { any; }; 允许任何主机查询
dnssec-enable no; 关闭dnssec功能
dnssec-validation no;
两台虚拟机都启动named服务,设置开机自启动
~]# systemctl start named.service
~]# systemctl enable named.service
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
两台虚拟机都查看named服务是否启动
~]# ss -tunl | grep :53
udp UNCONN 0 0 10.0.0.10:53 *:*
udp UNCONN 0 0 127.0.0.1:53 *:*
udp UNCONN 0 0 ::1:53 :::*
tcp LISTEN 0 10 10.0.0.10:53 *:*
tcp LISTEN 0 10 127.0.0.1:53 *:*
tcp LISTEN 0 10 ::1:53 :::*
这样,缓存DNS服务器就设置好了
1.配置主DNS服务器正向解析
(1)配置区域数据信息
[root@master ~]# vim /etc/named.rfc1912.zones
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
(2)创建区域数据文件(/var/named/ZONE_NAME.zone)
[root@master ~]# vim /var/named/example.com.zone
$TTL 86400
@ IN SOA master.example.com. admin.example.com. (
2017121001
1D
1H
1W
3H )
IN NS master
IN MX 20 mx
master IN A 10.0.0.10
www IN A 10.0.0.10
IN A 10.0.0.11
mx IN A 10.0.0.10
ftp IN CNAME www
(3)更改区域解析库文件的权限为640,属主为root,属组为named
[root@master ~]# chown :named /var/named/example.com.zone
[root@master ~]# chmod 640 /var/named/example.com.zone
(4)使用named-checkconf,named-checkzone命令检测配置文件及区域文件是否存在语法错误
[root@master ~]# named-checkconf
[root@master ~]# named-checkzone "example.com" /var/named/example.com.zone
zone example.com.zone/IN: loaded serial 2017121001
OK
(5)重启或者重载named服务
[root@master ~]# systemctl reload named.service
(6)检验正向解析结果
这样bind正向解析就配置好了
2.配置主DNS服务器反向解析
(1)添加反向解析区域配置文件
[root@master ~]# vim /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" IN {
type master;
file "10.0.0.zone";
allow-update { none; };
};
(2)创建反向区域解析文件
[root@master ~]# vim /var/named/10.0.0.zone
$TTL 86400
@ IN SOA master.example.com. admin.example.com. (
2017121001
1D
1H
1W
3H )
IN NS master.example.com.
10 IN PTR master.example.com.
IN PTR mx.example.com.
IN PTR www.example.com.
11 IN PTR www.example.com.
Tips:反向解析不需要CNAME记录,MX记录不允许出现在反向解析里
(3)更改反向解析区域解析库文件的权限为640,属主为root,属组为named
[root@master ~]# chown :named /var/named/10.0.0.zone
[root@master ~]# chmod 640 /var/named/10.0.0.zone
(4)使用named-checkconf,named-checkzone命令检测配置文件及反向解析区域文件是否存在语法错误
[root@master ~]# named-checkconf
[root@master ~]# named-checkzone "10.0.0" /var/named/10.0.0.zone
zone 10.0.0.zone/IN: loaded serial 2017121001
OK
(5)重启或者重载named服务
[root@master ~]# systemctl reload named.service
(6)检验反向解析结果
这样bind反向解析就配置好了
3. 配置辅助DNS服务器并实现主从复制
(1)在slave服务器上的添加解析配置文件
[root@slave ~]# vim /etc/named.rfc1912.zones
zone "example.com" IN {
type slave;
masters { 10.0.0.10; };
file "slaves/example.com.zone";
};
zone "0.0.10.in-addr.arpa" IN {
type slave;
masters { 10.0.0.10; };
file "slaves/10.0.0.zone";
};
检查slave服务器的配置文件是否有语法错误
[root@slave ~]# named-checkconf
重载slave服务器的named服务
[root@slave ~]# systemctl reload named.service
(2)编辑master服务器的区域文件,添加slave服务器的记录(正向解析文件添加NS和A记录,反向解析文件添加NS和PTR记录)
[root@master ~]# vim /var/named/example.com.zone
[root@master ~]# vim /var/named/10.0.0.zone
检查master服务器上语法和区域文件是否有错误
[root@master ~]# named-checkconf
[root@master ~]# named-checkzone "example.com" /var/named/example.com.zone
zone example.com/IN: loaded serial 2017121001
OK
[root@master ~]# named-checkzone "10.0.0" /var/named/10.0.0.zone
zone 10.0.0.zone/IN: loaded serial 2017121001
OK
重载master服务器的named服务
[root@master ~]# systemctl reload named.service
查看master服务器的日志,检验主辅DNS之间的区域传送
slave服务器的/var/named/slaves/目录下多了example.com.zone和10.0.0.zone文件,正式从master服务器上自动复制而来的
[root@slave ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 417 Dec 10 16:31 10.0.0.zone
-rw-r--r-- 1 named named 485 Dec 10 16:31 example.com.zone
检验slave服务器的解析功能
Tips:
1.主服务器的区域解析库文件中必须有一条NS记录是指向从服务器
2.从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
3.主服务器得允许从服务器作区域传送
4.主从服务器时间应该同步,可通过chrony进行
5.bind程序的版本应该保持一致;否则,应该从高,主低
rndc命令
rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。安装bind时默认安装了rndc,rndc默认监听在953/tcp端口,只监听127.0.0.1这个地址,也就是默认只允许本机使用rndc
语法格式:rndc COMMAND
COMMAND:
reload: 重载主配置文件和区域解析库文件
reload zone: 重载区域解析库文件
retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;
notify zone: 重新对区域传送发通知;
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志;
trace: 递增debug级别;
trace LEVEL: 指定使用的级别;
~]# rndc status
version: 9.9.4-RedHat-9.9.4-51.el7_4.1 <id:8f9657aa>
CPUs found: 2
worker threads: 2
UDP listeners per interface: 2
number of zones: 103
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