DNS原理及主从DNS配置
- 1. DNS原理
-
- 1.1 简介
- 1.2 DNS的域名解析过程
- 1.3 用户使用浏览器输入网址时域名解析过程:
- 1.4 解析答案
- 2. 搭建DNS主-辅助服务
-
- 2.1 服务器信息
- 2.2 准备工作
-
- 2.2.1 关闭selinux,防火墙
- 2.2.2 两台服务器互相免密
- 2.2.3 配置yum仓库
- 2.3 bind服务安装
- 3. Master DNS配置
-
- 3.1 配置文件
- 3.2 Master主配置文件(/etc/named.conf)
- 3.3 解析库文件配置(/var/named/intra.cn.zone)
- 3.4 主配置文件(/etc/named.rfc1912.zones)
- 3.5 跳转配置(/etc/lbo.zone)
- 4.Slave DNS配置
-
- 4.1 主配置文件(/etc/named.rfc1912.zones)
- 5.补充部分
-
- 5.1 从其他DNS上同步记录
- 5.2 维护脚本
-
- 5.2.1 备份脚本
- 5.2.2 同步脚本
1. DNS原理
1.1 简介
DNS(Domain Name Service的缩写)的作用就是根据域名查出IP地址。IP地址是由32位二进制数字组成,人们很难记住这些IP,相反,大家愿意使用比较容易记忆的主机名字。而电脑在处理IP数据报文时,是使用IP地址的,因为它是固定长度。
DNS查询的类型对于客户端来说是递归查询,对于DNS服务器来说,绝大多数是迭代查询的。DNS名称解析中,从名称到IP的查询叫做正向解析,而从IP到名称的查询叫做反向解析。如果DNS服务器至少解析了一个或一个以上的域叫做DNS主服务器或者DNS辅助服务器,如果不负责任何解析叫做DNS缓存服务器。
现在互联网规模很大,DNS被设计成一个分布式的数据库系统,他分布的功能就是把一个大的数据库切割成很多小的数据库,来分别提供一部分数据的处理。全球一共分布了13台DNS根服务器,名字为A至M。
1.2 DNS的域名解析过程
1.3 用户使用浏览器输入网址时域名解析过程:
客户访问时,先查自己的hosts文件,有则返回
客户hosts中没有就去查自己的缓存,有则返回
客户缓存没有就去找dns服务器
dns服务器先找根服务器获得顶级域服务器地址
dns服务器在找顶级域服务器去获得二级域服务器地址
dns服务器从二级域服务器获得最终的IP地址
客户端从dns服务器中得到IP地址
1.4 解析答案
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其它非权威服务器返回的查询答案
2. 搭建DNS主-辅助服务
2.1 服务器信息
服务器名 | IP地址 | 角色 |
---|---|---|
dns01 | 192.168.31.66 | 主DNS |
dns02 | 192.168.31.67 | 辅助DNS |
2.2 准备工作
2.2.1 关闭selinux,防火墙
setenforce 0
systemctl disable --now firewalld
2.2.2 两台服务器互相免密
## DNS1
ssh-keygen
ssh-copy-id 192.168.31.67
## DNS2
ssh-keygen
ssh-copy-id 192.168.31.66
2.2.3 配置yum仓库
此处省略yum配置具体内容,需要详细攻落请跳转
[[email protected] ~]#cat /etc/yum.repos.d/centos.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.31.200/centos7
enabled=1
gpgcheck=0
2.3 bind服务安装
yum install bind bind-utils -y
3. Master DNS配置
3.1 配置文件
作用 | 文件名 |
---|---|
BIND主程序 | /usr/sbin/named |
服务脚本和Unit名称 | /etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service |
主配置文件 | /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key |
管理工具 | /usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp |
解析库文件 | /var/named/ZONE_NAME.ZONE |
3.2 Master主配置文件(/etc/named.conf)
options {
listen-on port 53 { any; };
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";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/lbo.zone";
3.3 解析库文件配置(/var/named/intra.cn.zone)
$TTL 1d
@ IN SOA ns1.intra.cn. Q.cn.com. ( ;SOA记录
2021083002 ;序列号
1H ;刷新时间
5M ;重试时间
1W ;过期时间
1D) ;否定答案的TTL值
IN NS ns1.intra.cn. ;DNS1
IN NS ns2.intra.cn. ;DNS2
ns1 IN A 192.168.31.55
ns2 IN A 192.168.31.56
ris.intra.cn. 43200 IN A 192.168.31.217
pcnes.intra.cn. 43200 IN A 192.168.31.58
onecsm.intra.cn. 43200 IN A 192.168.31.160
cna-cifs-sh.intra.cn. 43200 IN A 192.168.31.20
attendance1.intra.cn. 43200 IN A 192.168.31.159
SSO1.intra.cn. 43200 IN A 192.168.31.64
eshop.intra.cn. 43200 IN A 192.168.31.88
attendance2.intra.cn. 43200 IN A 192.168.31.122
pehs.intra.cn. 43200 IN A 192.168.31.151
DNS区域数据库文件
资源记录(Resource Record)的类型有以下几个:
记录名 | 作用 |
---|---|
*SOA | 起始授权记录,只能有一个,必须放在第一条 |
NS | 域名服务记录,其中一个为主,可以有多个 |
A | IPv4地址记录 |
AAAA | IPv6地址记录 |
CNAME | 别名记录 |
PTR | 反向解析记录 |
MX | 邮件交换器 |
3.4 主配置文件(/etc/named.rfc1912.zones)
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "intra.cn" IN {
type master;
file "intra.cn.zone";
};
3.5 跳转配置(/etc/lbo.zone)
由于有大量需要forward跳转的条目,全部写在主配置文件/etc/named.rfc1912.zones中会使得该文件后期维护非常混乱,所以在/etc/named.conf最后添加了include “/etc/lbo.zone”,这样就可以把需要使用lbo线路进行跳转到外网的部分都在一个文件中,后期维护也会相对简单.
/etc/lbo.zone
zone "mircsoft.com" IN {
type forward;
forward only;
forwarders { 10.199.36.1;10.198.33.1; };
};
zone "aliyun.com" IN {
type forward;
forward only;
forwarders { 10.199.36.1;10.198.33.1; };
};
zone "tencent.com" IN {
type forward;
forward only;
forwarders { 10.199.36.1;10.198.33.1; };
};
4.Slave DNS配置
4.1 主配置文件(/etc/named.rfc1912.zones)
关于intra.com的配置与Master DNS服务器不同,其他相同.slaves/intra.panasonic.cn不需要额外创建会根据Master DNS的相关记录自动同步.
zone "intra.cn" IN {
type slave;
masters { 192.168.31.66; };
file "slaves/intra.panasonic.cn";
};
5.补充部分
由于intra记录是由其他分公司管理,因为申请周期非常长需要将一部分域名通过本地DNS先解析.
将对应的记录添加到本地的/root/local.txt文件中,通过脚本每天去更新intra.zone文件.
如果主DNS已经更新信息,则不再追加
5.1 从其他DNS上同步记录
dig -t axfr intra.cn @10.199.31.1
5.2 维护脚本
5.2.1 备份脚本
#!/bin/bash
FILENAME=/backup/DNS1-`date +%F`.tar.gz
[ ! -d /backup ] && mkdir /backup
/usr/bin/tar czfP $FILENAME /etc/named.conf /etc/named.rfc1912.zones /etc/lbo.zone /var/named/intra.cn.zone /root/update.txt
5.2.2 同步脚本
#/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:$PATH:$HOME/bin
# 检测10.199.31.1上关于intra.cn的行数,排除TTL SOA NS记录及注释行
dig -t axfr intra.cn @10.199.31.1 |grep -vE 'TTL|SOA|NS|;' >/root/new.zone;
# 导出现有记录
tail -n +12 /var/named/intra.cn.zone > /root/old.zone
# 设置版本号
version=`date +%Y%m%d%S`
echo $version
# 变量调试
diff /root/old.zone /root/new.zone
if [ ! $? ];then
echo -e "$version \E[1;32m记录相同,不需要更新\E[0m" >> /root/update.txt;
else
echo -e "$version \E[1;31m有记录被更新.\E[0m" >> /root/update.txt;
# 备份原intar.cn.zone配置文件
\cp /var/named/intra.cn.zone /backup/intra.cn.zone.$version;
# 拼接新配置文件,并生成版本号
cat /root/intra.head.zone /root/new.zone >/root/intra.zone;
sed -i "3c$version" /root/intra.zone;
# 如果有本地配置文件
for Dm in `grep -Eo "([0-9a-zA-Z\-]+\.){1,5}[a-zA-Z\-]+" /root/local.txt`;do
grep $Dm /root/intra.zone;
if [ $? ];then
grep $Dm /root/local.txt >> /root/intra.zone;
fi
done
# 备份新配置文件,以备问题排查
\cp /root/intra.zone /backup/intra.zone.$version;
# 配置文件替换,并重启应用
\cp /root/intra.zone /var/named/intra.cn.zone;
chmod 640 /var/named/intra.cn.zone;
chgrp named /var/named/intra.cn.zone;
if [ ! $(named-checkconf) ];then
systemctl restart named;
fi
fi