DNS(域名系统)即domain name server, 将主机名与IP简历关联,使用户可以通过主机名(域名)访问网络中的主机.对于服务器主机,即使服务器的IP地址改变了,只要将新的IP地址与域名关联,而不是通知用户新的域名.
DNS 通常采用一个或多个为某些域认证的集中服务器部署。客户端主机请求来自名称服务器的信息时,通常会连接到端口 53。然后名称服务器会解析请求的名称。如果将名称服务器配置为递归名称服务器,并没有授权回答,或者没有为之前的查询缓存的回答,它会查询其他名称服务器(即 root 名称服务器),决定哪个是这个 要查询名称的授权名称服务器,然后查询以获取请求的名称。仅作为授权配置的名称服务器若禁用递归功能,则不会代表客户端进行查询。
2.DNS服务器的区域和类型
DNS服务器中,所有信息都保存在基本数据元素中(资源记录,RR).RFC1034定义了资源记录.DNS服务采用树状结构管理域名,每层都使用(.)分隔.例如:在root域中, . 表示DNS的root,即层0.域名com指的是顶级域(TLD),即root域的下一层,层级结构的第一层.域名example.com是层级结构的第二层.
资源记录示例:
example.com. 86400 IN A 192.0.3.1
域名example.com是RR的所有者.值86400是生存时间(TTL).字母IN的含义是“互联网系统”,代表RR的分类.字母A代表RR的类型(主机地址).主机地址192.0.3.1,即RR记录域名example.com的IP指向.区域是通过文件在授权DNS服务器中定义,该文件包含每个区域中资源记录的定义.Zone文件保存了主名称服务器及辅名称服务器.
DNS服务器提供的服务有两种:1.授权服务 授权DNS服务器响应属于本区域的资源记录.包括主(master)和从属(slave)DNS.2.递归 递归DNS提供解析服务,但不为任何区域授权.在固定的时间段内响应客户端内存中缓存的解析,该时间段查询的资源记录指定.虽然DNS服务器可以既授权又递归,但是一般不合并两种配置.递归服务器查询RR,比授权响应要耗费更长的时间,因此递归服务器仅适用于有限的客户端.
3.BIND
BIND(berkeley Internet Name Domain)是RHEL中自带的DNS服务器.它包含一组与DNS相关的程序,named的名称服务器、管理程序rndc、debug工具dig.BIND中配置了大量的“空白区域”,防止递归查询服务器向未被授权的区域发送不必要的请求,引起服务阻塞.这些空白区域保证返回即时且授权的NXDOMAIN响应.named.conf中的配置选项empty-zones-enable 控制是否生成空白区域,还可以同时使用disable-empty-zone 选项在其使用的默认前缀列表中禁用一个或多个空白区域.BIND中已增加为RFC1918前缀生成的空白 区域数.在BIND9.9中,即使未指定empty-zones-enable(默认为yes),用户也可以看到RFC1918的空白区域.
4.BIND与bind-chroot
在安装bind-chroot软件包后,BIND会在chroot环境中运行.此时,初始化脚本将使用mount --bind命令挂载named的配置文件named.conf,以便在chroot环境外管理该配置.不需要向/var/named/chroot/目录复制任何内容,chroot会自动挂载该目录.
如果/var/named/chroot/中的对应挂载点为空,则以下目录会自动挂载到/var/named/chroot/目录:
/etc/named
/etc/pki/dnssec-kyes
/run/named
/var/named
/usr/lib64/bind或/usr/lib/bind
如果在/var/named/chroot/中不存在以下文件,也会将其挂载到目标文件中:
/
/etc/rndc.conf
/etc/rndc.key
/etc/named.rfc1912.zones
/etc/named.dnssec.keys
/etc/named.iscdlv.key
/etc/named.root.key
最好为每个挂载到chroot中的文件做备份.
5.BIND的配置named.conf
(1)ACL
ACL (访问控制列表)语句可以使管理员定义主机组,这样可以允许或者拒绝对该名称服务器的访问.格式如下:
acl acl-name { match-element; ... };
acl-name是访问控制列表名称, match-element选项通常是独立的IP地址.
关键字 | 描述 |
any | 与所有IP地址匹配 |
localhost | 与本地系统使用的IP地址匹配 |
localnets | 与所有本地系统连接的网络中的IP地址匹配 |
none | 不匹配任何IP地址 |
acl 与option联合使用:
acl blacklist {
192.168.0.0/24;
172.16.12.0/24;
124.204.46.73;
};
acl whitelist {
172.25.0.0/24;
};
options {
blackhole {blacklist;};
allow-query {whitelist;};
allow-query-cache {whitelist;};
};
(2)include include选项可以使/etc/named.conf 加载额外的配置文件,可以使重要数据保存在有严格权限的独立文件中.
例如:
include "/etc/named.rfc1912.zone";
(3)options options定义DNS服务器的全局配置.
options 常用配置选项如下:
选项 | 描述 |
diretory | 指定named服务的工作目录.默认为/var/named/ |
disable-empty-zone | 在使用默认前缀列表中禁用一个或多个空白区域.在options或view中指定,可多次使用. |
dnssec-enable |
指定是否返回与dnssec关联的资源记录.默认为yes. |
dnssec-validation | 指定是否提供使用dnssec认证的资源记录.默认为yes. |
empty-zones-enable | 控制是否生成空白区域.只能在options中使用. |
forwarders | 为DNS服务器指定有效的IP地址列表,所有申请都会转发到此地址进行解析. |
forward |
指定forwarders的工作方式. first BIND将向forwarders列表中指定的DNS查询,如果查询失败,则尝试使用本地zone配置查询; only BIND只向forwarders中的DNS服务器做转发查询,不会自己解析. |
listen-on | 指定侦听IPv4网络接口中的DNS请求. |
listen-on-v6 | 侦听来自IPv6接口的DNS请求. |
max-cache-size | 指定DNS服务器可使用的最大内存,默认为32M. |
notify |
定义主DNS更新zone后,是否通知从属DNS. yes 主DNS会通知所有的从属DNS; no 主DNS不会通知从属DNS; master-only 该DNS只通知本区域的其它主DNS; explicit 该DNS服务器只通知在zone语句的also-notify列表中指定的从属DNS. |
pid-file | 指定named服务生成的进程ID文件位置. |
recursion | 是否作为递归DNS,默认为yes. |
statistics-file | 指定统计文件备选位置,默认使用/var/named/named.stats. |
options配置示例:
options {
allow-query { localhost; };
listen-on port 53 {127.0.0.1;};
listen-on-v6 port 53 {::1;};
max-cache-size 256M;
directory "/var/named";
statistics-file "/var/named/data/named_stats.txt";
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
(4)zone zone定义DNS解析区域.zone中的配置可以覆盖options中的配置.
zone配置示例:
zone "example.com" IN {
type master;
file "example.com.zone";
};
zone常用选项:
选项 | 描述 |
allow-query | 指定哪些客户端可以请求查询这个区域的信息.该选项会覆盖options中的全局allow-query配置.默认允许所有查询请求. |
allow-transfer | 指定哪些从属DNS可以请求传递区域信息,默认允许所有. |
allow-update | 指定哪些主机可在其区域中动态更新信息.默认拒绝所有. |
file | 指定named的工作目录.包含区域配置文件(zone的配置文件). |
masters | 指定可以请求授权zone信息的IP地址.只有在区域被定义为"type slave“时,该选项才会被named正确识别,否则报错,named无法启动. |
notify |
定义主DNS更新zone后,是否通知从属DNS.zone中的notify会覆盖options中的notify配置. yes 主DNS会通知所有的从属DNS; no 主DNS不会通知从属DNS; master-only 该DNS只通知本区域的其它主DNS; explicit 该DNS服务器只通知在zone语句的also-notify列表中指定的从属DNS. |
type |
定义区域类型. delegation-only 加强基础区域授权状态,比如COM、NET、ORG.任何没有附加信息的授权响应都被认为是NXDOMAIN.该选项只可用于递归或缓存DNS中的部署的TLD(顶级域,top-level domain)或者root区域文件. forward 将所有本区域的DNS请求转发到其它DNS服务器. hint 指向rootDNS的特殊区域类型.hint指向的rootDNS是用来解析其它次级DNS无法解析的zone. master zone授权的本地专用DNS,通常是主DNS. slave zone授权的本地从属DNS,需要在masters选项中指定主DNS. |
主从DNS的Zone配置示例:
master的Zone配置:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-transfer {192.168.0.4;};
};
slave的Zone配置:
zone "example" {
type slave;
file "slave/example.com.zone";
masters {192.168.0.1;};
};
(5)named.conf中的其它语句配置:
语句 | 描述 |
controls | 定义rndc管理named服务的安全选项 |
key |
dnssec或rndc中使用的密钥.key有两个选项: algorithm 指定密钥使用的算法,例如 hmac0md5. secret “key-value" 加密密钥. |
logging | 自定义named的日志,包括文件名、大小、版本号等.默认情况下,named向rsyslog守护进程发送标准信息,并保存在/var/log/messages文件中. |
server | 指定named响应远程DNS的方式.使用transfer-format控制每条信息附带的资源记录数.根据具体环境,可以是one-answer,也可以是many-answers. |
trusted-keys | 指定安全dnssec的分类公钥. |
view | 使DNS服务器根据所在网络生成特殊视图.控制不同区域中的DNS请求.view中的配置会覆盖options中配置. |
6.rndc管理named
rndc是BIND提供的管理named的组件工具,其配置文件为/etc/rndc.conf. rndc的密钥文件是/etc/rndc.key.
通常为安全考虑,应该修改named的默认侦听端口(默认为953),以及限制rndc.key的访问权限.
~]#chmod o-rwx /etc/rndc.key
rndc常用命令:
命令 | 描述 |
rndc status | 检查named当前状态. |
rndc reload | 重新加载配置文件及zone. |
rndc sign localhost | 更新dnssec密钥并注册该区域. |
rndc validation on/off | 启用/禁用dnssec验证. |
rndc querylog | 启用或禁用查询日志. |
7.dig
dig常用命令:
命令 | 描述 |
dig example.com NS | 查询名称服务器.(查询DNS服务器) |
dig example.com A | 查询IP地址. |
dig -x 192.100.101.102 | 查询主机名(域名). |
BIND还有一些其它高级功能,例如:多视图匹配、增量区域传送(IXFR)、事务处理签名(TSIG)、DNS安全扩展(DNSSEC),有时间可以仔细研究.