一、Bind简介
BIND(Berkeley(美国加州大学伯克利分校) Internet Name Domain)。
BIND目前由ISC(Internet Systems Consortium,www.isc.org,互联网系统协会;DHCP服务器也由ISC维护)维护
查看当前系统下与Bind相关的软件:
查看bind提供的工具:
下图中前四个是非常常用的客户端/命令行工具,上图中bind-libs指的是bind有关的库文件,下图中的这些程序运行时可能要依赖与这些库文件,因此若要安装utils,libs得同时安装上。
安装utils和libs:
bind软件包及相关知识:
主包叫bind,即bind才是真正使用的服务器端包。
相关文件:
/etc/name.conf:主配置文件,主要用于定义bind进程的工作属性及区域的定义(作为DNS服务器需要定义区域)
/etc/rndc.key:也是与DNS相关的配置文件,是一个密钥文件。
rndc:Remote NameDomain Controller,远程名称服务控制器。rndc是让我们能够远程控制DNS服务器这个进程的启动、关闭、甚至重新装载主配置文件夹于数据文件的一个非常常用的命令。而既然远程控制工具就意味着DNS服务器可以接受任何人远程控制,那么其安全性将不复存在。因此rndc.key是能够让rndc工作的一个密钥文件,事实上Bind自身用的是/etc/rndc.conf,它与/etc/rndc.key表示的意思不完全一致,key只存放密钥,而conf还存放配置信息。
/var/named:区域数据文件(默认情况下有管理员自己手动创建区域数据文件,位于/var/named下)
/etc/rc.d/init.d/named:安装脚本
选项:{start|stop|status|restart|try-restart|reload|force-reload}
bind运行的二进制程序叫named(bind是其软件包的名字)
bind-chroot:一种加强DNS安全性的手段,但其配置较为繁琐
假设默认情况下,bind运行在/下,一旦有人劫持了DNS服务器(named进程),那么用于运行DNS服务的named用户(组)所能看到的文件,都可能被攻击,因此可通过建立一个假根提高安全性,如:
将/var/named/chroot/当做根,在其之下放置与named有关的文件
/var/named/chroot/
etc/named.conf
etc/rndc.conf
etc/rndc.key
sbin/named
var/named
此时若DNS服务器被攻破,所能活动的范围也就仅限于/var/named/chroot目录了,不会对系统造成破坏。
另外还有一个包,caching-nameserver(能够让DNS服务器成为缓存DNS服务器)
缓存DNS服务器和主服务器在配置上没有太大的区别,在配置完缓存DNS服务器后,再配置我们所需要的域就成了主DNS服务器。若配置时明确指明是slave类型的就成了从DNS服务器了。
二、DNS服务器的安装
(完全手动安装所需要的每一个依赖文件)
安装服务器端包:
/var/named下的文件简介:
/var/named/named.ca:存放互联网上根名称服务器地址
/var/named/named.localhost:定义本地回环地址(将localhost解析成127.0.0.1以及IPv6的::1)
/var/named/named.loopback:本地主机名的正反向解析,用于实现将127.0.0.1解析成localhost
启动DNS服务器:
编辑配置文件:
将原来的文件重命名,自己手动新建一个named.conf(注意:在这个文件每一条语句必须使用;结尾,并且{}的前后只要是在同一行中就得有空格即{的前后有字符时需要有空格)
编辑文件:
区域的定义:
zone "ZONE NAME(区域名称)" IN(关键字){
type(区域类型,可选项:master|slave|hint|forward)
};
主区域:
file:"区域数据文件路径";
从区域:
file "区域数据文件路径";
masters {master1_ip;(从DNS服务器地址)}
修改文件属性:
使用named-checkconf检查配置文件是否有语法错误:
named-checkcof只检查语法错误,无法检查逻辑错误;如用file指定的文件不存在时无法检测到,只有在重启服务时才能检测到
没有结果就是最好的结果(Linux哲学思想之一:没有消息就是最好的消息)
用named-checkzone按区域检查语法错误:
重启服务:
查看日志文件:(服务启动过程中的信息会记录到/var/log/messages中)
注意:
需要确保SELinux未启动,使用setenforce 0关闭即可。
临时性的关闭SELinux:
getenforce #查看SELinux的状态,状态为enforce时表示开启,当状态为Permissive或Disable时DNS不受影响
setenforce 0 #关闭
setenforce 1 #开启
永久关闭SELinux:
vim /etc/selinux/config
查看DNS是否启动:
修改resolve.conf指向自己的IP地址:
测试:
设置开机自启:
至此,DNS缓存服务器搭建完成!
三、实现自定义域名test.com.zone的解析
修改配置文件:
named-checkconf(只检查语法错误,无法检查逻辑错误;如用file指定的文件不存在时无法检测到,只有在重启服务时才能检测到)
新建数据文件:
修改文件权限:
重启服务:
测试:
三、配置反向区域
修改该配置文件:
新建区域数据文件:
测试语法:
重启服务:
测试:
四、其它说明
dig
Bind客户端工具(命令),Domain Information Gropher(到域名服务器查找相关信息)
dig -t RT NAME(NAME与RT相匹配) [@IP(指定查询的服务器IP)]
dig -x IP #根据IP查询FQDN
查询根域所有DNS服务器:
dig -t NS .
到指定的服务器上查询根服务器的信息:
dig -t NS . @a.root-servers.net
host -t RT NAME #查询名称的解析结果,不能使用@指定主机名
nslookup:交互式(Windows下也支持)、命令行模式下都可支持
nslookup > server IP #设定DNS服务器 > set q=RT #指定资源记录类型 > NAME
DNS监听的协议及端口:
53/udp:默认情况下,客户端发起查询请求都是使用UPD协议,因为UDP协议不需要三次握手,速度上快的多。
53/tcp:一般来讲,从服务器到主服务器传输数据的时候,为了保证数据的完整性、可靠传输,会使用TCP的53号端口。
953/tcp:这是rndc监听的。
SOCKET:套接字(UNIX通信编程机制,套接字编程的主要目的是让我们能够通过这么一种机制让两个位于不同主机的进程能够通信)
格式:IP:ADDR
C/S:Client/Server是如何建立通信的?
套接字就是定义客户端发起请求时,到哪去请求对方服务的。因此每一个服务器要想让位于两个不同主机的进程彼此之间能够通信,一般来讲,服务器就必须监听在某个套接字上(服务器需要在某个地址上随时等待客户端的请求,这个位置叫套接字),作为客户端的访问入口。
如:127.0.0.1(127.0.0.1是本地回环地址,客户端和服务器端指的都是本机,因此若需监听在127.0.0.1的53号端口上,意味着接受的客户端来源是本机)
172.16.100.1:53(监听在172.16.100.1:53号端口上)
0.0.0.0:53(表示所有地址的53号端口都监听了)
域名注册网址:godaddy.com(无需在国内备案)