DNS(Domain Name System,域名系统)是互联网上最核心的带层级的分布式系统,它负责把域名转换到IP地址、反查从IP到域名的解析以及宣告邮件路由等信息,使得基于域名提供服务成为可能,例
如网站访问、邮件服务等。
BIND(Berkeley Internet Name Domain,伯克利互联网名称域)是Linux、UNIX系统上部署最广泛的域名服务器,是域名解析协议的事实标准。可以通过BIND构建各种满足不同业务需求的DNS。
一、BIND域名服务基础
1、DNS系统组成
- 域名服务器(Name Server)。提供域名解析服务的软件,一般监听UDP、TCP的53端口。例如Linux系统中常见的BIND、Windows Server中集成的DNS服务器组件等。
- 解析器(Resolver)。访问域名服务器的客户端,它负责解析从域名服务器获取的响应,向调用它的应用返回IP地址或者别名等信息,例如Linux系统中的gethostbyname()函数、Windows系统中的nslookup等。
2、DNS系统的作用及类型
- 正向解析:根据域名查旧地址,即将指定的域名解析为相对应的旧地址。
- 反向解析:根据IP地址查域名,即将指定的旧地址解析为相对应的域名。
常见的几种类型
- 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。
- 主域名服务器:维护某一个特定DNS区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。
- 从域名服务器:与主域名服务器提供完全相同的DNS解析服务,通常用于DNS服务器的热备份。
二、BIND的安装和控制
1、安装BIND软件
# yum -y install bind bind-chroot
2、BIND服务的配置文件
1、配置主配置文件
对于权威域名服务器,打开了递归查询功能,相当于把它配置成了开放的DNS服务器,会造成大量的数据流量,影响正常业务提供。因此,在权威域名服
务器上,需要禁用递归查询。
# vim /etc/named.conf
options {
listen-on-v6 port 53 { ::1; }; # 监听地址和端口
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
recursion no; # 禁用递归查询
......
zone "." IN {
type hint;
file "named.ca";
};
#正向"web1.com"区域
zone "web1.com" IN {
#类型为主区域
type master;
#区域数据文件为web1.com.zone
file "web1.com.zone";
};
#反向"192.168.1.0/24"区域
zone "1.168.192.in-addr.arpr" IN {
type master;
#区域数据文件为192.168.1.zone
file "192.168.1.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
2、配置区域数据文件
正向数据文件
# vim /var/named/web1.com.zone
#有效解析记录的生存周期
$ttl 86400
#SOA标记、域名、管理邮箱
@ in soa web1.com. admin.web1.com. (
#更新序列号,可以是10位以内的整数
20200601
#刷新时间,重新下载地址数据的间隔(H:时)
3h
#重试延时,下载失败后的重试间隔(M:分)
15m
#失效时间,超过该时间仍无法下载则放弃(W:周)
1w
#无效解析记录的生存周期(D:天)
1d
)
in ns ns1.web1.com.
ns1 in a 192.168.1.10
www in a 192.168.1.10
ftp in cname www
服务器名称 | 说明 |
---|---|
NS | (Name Server,域名服务器),记录当前区域的DNS服务器的主机地址 |
MX | Mail Exchange,邮件交换),记录当前区域的邮件服务器的主机地址,数字10表示(当有多个MX记录时)选择邮件服务器的优先级,数字越大,优先级越低 |
A | (Address,地址),记录正向解析条目 |
CNAME | (Canonical Name,别名),记录某一个正向解析条目的其他名称 |
反向数据文件
# vim /var/named/192.168.1.zone
$ttl 86400
@ in soa web1.com. admin.web1.com. (
20200601
3h
15m
1w
1d
)
in ns ns1.web1.com.
10 in ptr ns1.web1.com.
10 in ptr www.web1.com.
3、从-DNS配置
配置主配置文件
# vim /etc/named.conf
options {
listen-on-v6 port 53 { ::1; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
......
zone "." IN {
type hint;
file "named.ca";
};
zone "benet.com" {
type slave;
masters { 192.168.1.10; };
file "slaves/benet.com.zone";
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
验证
4、相同IP不同域名
安装BIND软件
# yum -y install bind bind-chroot
配置主配置文件
# vim /etc/named.conf
添加正向区域
options {
listen-on-v6 port 53 { ::1; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
zone "." IN {
type hint;
file "named.ca";
};
zone "benet.com" IN {
type master;
file "benet.com.zone";
};
zone "accp.com" IN {
type master;
file "accp.com.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
添加benet.com正向区域数据文件
# vim /var/named/benet.com.zone
$ttl 86400
@ in soa benet.com. admin.benet.com. (
20200212
3h
15m
1W
1d
)
in ns ns1.benet.com
10 in ptr ns1.benet.com
10 in ptr www.benet.com
添加accp.com正向区域数据文件
# vim /var/named/accp.com.zone
$ttl 86400
@ in soa accp.com. admin.accp.com. (
20200212
3h
15m
1W
1d
)
in ns ns1.accp.com
ns1 in a 192.168.1.10
www in a 192.168.1.10
ftp in cname www
启动服务
systemctl restart named
验证
5、配置文件排错命令
# named-checkconf -z /etc/named.conf
三、域名解析缓存服务
在部署服务器时,很多应用程序需要调用域名解析服务,一般通过配置/etc/resolv.conf来指定DNS服务器的IP。但如果程序发起的请求量较大,那么服务器就容易被这些DNS服务器禁止访问;同时每次都去访问外部DNS服务器,会导致延时增大,遇到网络问题时,还会发生解析不成功的情况。在这种情况下,需要配置一个透明的DNS解析缓存服务。
NSCD(Name Service Caching Daemon,名称服务缓存进程)不需要对应用程序或者解析器做任何修改,/etc/resovl.conf也不需要做任何变化,对于系统部署的影响最小。因此,NSCD成为Linux环境中得到最广泛的使用的域名缓存软件。
1、安装NSCD软件
# yum -y install nscd
# systemctl start nscd
# systemctl enable nscd
2、NSCD服务的配置文件
# vim /etc/nscd.conf
enable-cache hosts yes
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
参数 | 说明 |
---|---|
enable-cache | 对DNS解析进行缓存 |
positive-time-to-live | 对解析成功的DNS结果进行缓存的时间 |
negative-time-to-live | 对解析失败的DNS结果进行缓存的时间 |
suggested-size | NSCD内部的哈希表的大小,如果缓存条目数量远大于默认的211(如10倍以上),则修改此值 |
check-files | 是否检查/etc/hosts文件的变化 |
persistent | 是否在重启NSCD进程时保留已缓存的条目 |
shared | 是否允许客户端直接查询NSCD的内存镜像以获得结果 |
max-db-size | 指DNS的缓存大小,以字节为单位 |
3、清除DNS缓存
nscd -i hosts
四、chroot加固BIND服务
1、创建named用户
groupadd -g 25 named
useradd -g 25 -u 25 -d /chroot/named -s /sbin/nologin named
2、创建目录结构、修改权限
mkdir -p /chroot/named/{dev,etc,var}
chown named.named /chroot/named/var
3、创建设备
mknod /chroot/named/dev/null c 1 3
mknod /chroot/named/dev/zero c 1 5
mknod /chroot/named/dev/random c 1 8
4、复制需要的文件
# cp /etc/localtime /chroot/named/etc
5、修改配置文件
# vim /chroot/named/etc/named.conf
options {
directory "/etc"; # 此处实际上对应系统的/chroot/named/etc
dump-file "/var/cache_dump.db"; # 此处实际上对应系统的/chroot/named/var/cache_dump.db
statistics-file "/var/named_stats.txt"; # 此处实际上对应系统的/chroot/named/var/named_stats.txt
zone-statistics yes;
allow-query { any; };
recursion yes;
};
logging {
channel query_log {
file "/var/query.log" versions 5 size 20m; # 此处实际上对应系统的/chroot/named/var/query.log
severity info;
print-time yes;
print-category yes;
};
category queries{
query_log;
};
};
6、启动named进程
named -t /chroot/named -u named -c /etc/named.conf
named以普通用户权限运行,运行环境被限定到/chroot/named目录下
评论区