Linux DNS原理及主从DNS配置

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配置具体内容,需要详细攻落请跳转

[root@dns01 ~]#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

猜你喜欢

转载自blog.csdn.net/qq_29974229/article/details/119996958
今日推荐