1 DNS工作原理概述
域名系统(DNS)是一种包含 DNS 主机名到 IP 地址映射的分布式、分层式数据库。
DNS解析程序的查询流程 :
image.png2 安装配置DNS服务端(BIND)
BIND是加州大学伯克利分校在Unix系统上完成的名称服务,全称是Berkeley Internet Name Domain,是目前互联网上使用最为广泛的DNS服务软件。
2.1 安装BIND主程序
yum install bind-*
2.2 修改BIND主配置文件
vim /etc/named.conf
options {
// 监听的IP和端口
listen-on port 53 { any; };
#listen-on-v6 port 53 { ::1; };
// dns的根目录
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// 配置转发器,当无法从本地区域解析后转发的地址
forwarders {
114.114.114.114;
8.8.8.8;
};
// 配置允许哪些客户端查询解析
allow-query { any; };
// 配置是否启用dns完整性验证功能,这样服务器只能与开启了dnssec功能的转发器发送请求
dnssec-enable no;
dnssec-validation no;
};
// 配置记录日志类型和路径
logging {
channel default_debug {
file "data/named_debug.log";
severity dynamic;
};
channel update_log {
file "data/named_update.log";
severity info;
};
category update {
update_log;
};
channel general_log {
file "data/named.log";
severity info;
};
category general {
general_log;
};
channel query_log {
file "data/named_query.log";
print-time yes;
severity dynamic;
};
category queries {
query_log;
};
};
// 加载配置文件
include "/etc/named.rfc1912.zones";
include "/etc/ops.cn.conf";
include "/etc/arpa.conf";
include "/etc/named.root.key";
2.3 DNS区域文件配置
vim /var/named/chroot/etc/ops.cn.conf
zone "ops.cn." IN {
// 区域类型
type master;
// 区域解析文件位置
file "/etc/zones/ops.cn.zone";
// 允许哪些客户端可以修改区域解析文件
allow-update { none; };
};
区域类型(type):
master:主服务器,拥有区域数据文件,并对此区域提供管理数据;
slave:从服务器,拥有主服务器区域数据文件的副本,从主服务器同步所有区域数据。
stub:与slave类似,只复制主服务器上的NS记录。
forward:forward zone是每个域的配置转发的主要部分,它会在域名称给定的域中查询。
hint:根域名服务器的初始化组指定使用的线索区域,服务启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。
2.4 DNS区域解析文件配置
mkdir /var/named/chroot/etc/zones/
正向区域
vim /var/named/chroot/etc/zones/ops.cn.zone
$ORIGIN @
$TTL 86400
@ IN SOA ops.cn root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ;expires
1D ) ; minimum
@ IN NS dns.ops.cn.
dns IN A 10.0.1.1
root IN A 10.0.1.3
反向区域
vim /var/named/chroot/etc/zones/ops.cn.arpa.zone
$TTL 3600
@ IN SOA ops.cn. root (
55 ;serial
8M ;refresh
14400 ;retry
360000 ;expire
1D ;minimum
)
@ IN NS ops.cn.
187 IN PTR ns1.ops.cn.
1 IN PTR puppet-01.ops.cn.
2 IN PTR fastdfs-tracker-01.ops.cn.
**ORIGIN .则下面的记录都必须使用FQDN。
$TTL 3600:全局选项,将覆盖minimum里面设置的值,TTL用于标识域名在slave或缓存DNS服务器中保存在本地高速缓存区的时间,这样slave或缓存服务器在TTL还没过期前不需要再将请求转发到主DNS服务器上。
@:为named.conf里面zone配置的SOA区域名称,本例为ops.cn
字段说明:
serial:这个区信息文件的版本号,它是一个整数。辅助域名服务器用它来确定这个区信息的文件是何时改变的。每次改变信息文件时都应该把这个数加1
refresh:辅助域名服务器在试图检查主域名服务器的SOA记录之前应等待的秒数。SOA记录不经常改变,因此可以把这个值设置为一天。
retry:辅助服务器在主服务器不能使用时,重试对主服务器的请求应等待的秒数。
expire:这是辅助服务器在不能与主服务器取得联系的情况下丢掉区信息之前应等待的秒数,一般应该设置成30天左右
minimum:当没有指定ttl资源记录时默认的ttl值。如果网络没有太大的变化,那么这个数可以设得很大。可以在资源记录中指定一个ttl值来代替它。
zone配置文件中的参数的默认单位是秒,可以修改为1D,表示1天,其余如:W(星期),M(分),H(时),D(天)。
2.4.1 资源记录类型
记录类型 | 描述 |
---|---|
主机(A) | 解析主机名称到 IP 地址 |
反向指针(PTR) | 解析 IP 地址到主机名称 |
起始授权机构(SOA) | 区域文件的第一条记录 |
服务(SRV) | 解析提供服务的服务器名称 |
名称服务器(NS) | 标识每个区域的 DNS 服务器 |
邮件交换器(MX) | 邮件服务器 |
别名(CNAME) | 从主机名称解析到主机名称 |
HINFO | 描述主机硬件和操作系统信息 |
TXT | 文本描述信息 |
2.4.2 特殊主机记录类型
顶级域名:
@ IN A 1.1.1.1
泛域名:
- IN A 1.1.1.5
2.5 启动BIND并加入开机自启动
/etc/init.d/named start
chkconfig named on
2.6 named.ca最新配置文件下载地址
ftp://ftp.internic.net,domain目录下的named.root
3 DNS主从复制配置
3.1 主DNS区域文件配置
vim /var/named/chroot/etc/ops.cn.conf
zone "ops.cn." IN {
// 区域类型
type master;
// 区域解析文件位置
file "/etc/zones/ops.cn.zone";
// 允许哪些客户端可以修改区域解析文件
allow-update { none; };
// 允许复制区域解析文件,从DNS使用
allow-transfer { 10.0.1.214; };
// 当区域解析文件更新时主动通知从DNS
notify yes;
// 配置通知的DNS服务器IP地址
also-notify{ 10.0.1.214; };
};
3.2 从DNS区域文件配置
mkdir /var/named/chroot/etc/slave/
zone "ops.cn." IN {
type slave; #区域类型
file "/etc/slave/ops.cn.zone"; #从主DNS服务器下载的区域解析文件存放位置
masters {1.1.1.1;}; #主DNS服务器IP地址
};
3.3 添加一条主机记录
在ops.cn.zone文件中添加一条A记录,并将serial的值加1或变大,如下:
43 ; serial (d. adams)
test IN A 10.0.11.1
DNS服务器重新载入配置
/etc/init.d/named reload
nslookup test.ops.cn 1.1.1.1
Server: 1.1.1.1
Address: 1.1.1.1#53
Name: test.ops.cn
Address: 10.0.11.1
3.4 验证从DNS是否收到通知
tail -f /var/log/message
Sep 24 09:05:38 localhost named[9476]: client 10.0.1.1#19342: received notify for zone 'ops.cn'
Sep 24 09:05:38 localhost named[9476]: transfer of 'ops.cn/IN' from 10.0.1.1#53: connected using 10.0.1.214#59201
Sep 24 09:05:38 localhost named[9476]: transfer of 'ops.cn/IN' from 10.0.1.1#53: Transfer completed: 1 messages, 21 records, 540 bytes, 0.001 secs (540000 bytes/sec)
4 BIND日志级别
示例:
logging {
channel query_log {
file "log/named_query.log";
print-time yes;
print-severity yes;
print-category yes;
severity info;
};
category queries {
query_log;
};
channel default_log {
file "log/named_error.log";
print-time yes;
print-severity yes;
print-category yes;
severity error;
};
category default {
default_log;
};
};
默认情况下,BIND把日志消息写到/var/log/messages文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息,
在日志中主要有两个概念:通道(channel)和类别(category)。通道指定了应该向哪里发送日志数据:是发送给syslog,还是写在一个文件里,或是发送给named的标准错误输出,还是发送到位存储桶(bit bucket)。类别则规定了哪些数据需要记录。下面我们主要介绍一下文件通道和类别。
在定义通道的语句中,severity是指定记录消息的级别。在bind中主要有以下几个级别(按照严重性递减的顺序):
-
critical
-
error
-
warning
-
notice
-
info
-
debug [ level ]
-
dynamic
定义了某个级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为error,则会记录critical和error 两个级别的信息。一般情况下,我们记录到info级别就可以了。print-time是设定在日志中是否需要写入时间,print-severity是设定在日志中是否需要写入消息级别,print-category是设定在日志中是否需要写入日志类别。
category语句是指定哪一种类别的数据使用哪个或者哪几个已经定义了的通道。在bind9中类别有:
-
default 匹配所有未明确指定通道的类别,但是不匹配不属于任何类别的消息。这些不属于任何类别的消息属于下面列出的这些类别。
-
general 包括所有未明确分类的BIND消息。
-
client 处理客户端请求。
-
config 配置文件分析和处理。
-
database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录。
-
dnssec 处理DNSSEC签名的响应。
-
lame-servers 发现错误授权。
-
network 网络操作
-
notify 异步区变动通知。
-
queries 查询日志
-
resolver 名字解析,包括对来自解析器的递归查询的处理。
-
security 认可/非认可的请求。
-
update 动态更新事件。
-
xfer-in 从远程名字服务器到本地名字服务器的区传送。
-
xfer-out 从本地名字服务器到远程名字服务器的区传送。
5 DNS客户端配置
DNS客户端的DNS查询服务由/etc/host.conf,/etc/resolv.conf,/etc/hosts三个配置文件组成。
5.1 /etc/host.conf
cat /etc/host.conf
# 定义解析器先查询文件/etc/hosts,如果没有则发送请求到 DNS,默认值为hosts,bind
order hosts,bind
# 允许主机拥有多个ip地址
multi on
# 禁止ip地址欺骗
nospoof on
5.2 /etc/resolv.conf
cat /etc/resolv.conf
search test.com
nameserver 1.1.1.1
nameserver 114.114.114.114
domain:声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS 查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( . )前面的内容。
search****:如果它有多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search 声明的域中分别查找。domain 和search 不能共存;如果同时存在,后面出现的将会被使用。
6 dig管理工具
7 nsupdate管理工具
更新脚本:
nsupdate << EOF
server 127.0.0.1
zone 123ths.com
update delete cachet1.123ths.com
update add cachet.123ths.com 600 A 1.1.1.1
send
quit
EOF
执行更新后named服务会暂时将更新写入域名配置文件加上.jnl的临时文件里面,可以通过以下2个命令将变更写入到文件中
/usr/sbin/rndc freeze
/usr/sbin/rndc thaw
8 rndc
重新生成key
rndc-confgen -r /dev/urandom -a
网友评论