目录
一.故事背景
在学习脚本之后,每天都在思考脚本的编写过程,将每次博客内容写成脚本运行,比想象中的难道大一些,不仅仅是把命令按顺序写下来,还要思考会发生的各种情况,并把问题解决,再运行纠错,最终达到想要的结果,就像在解一道谜题,很有意思,进入今天的内容。
二.DNS概述
概念
Domain Name Service,一套分布式的域名服务系统,即有多个DNS服务器遍布于世界。每个DNS服务器上存放着大量的机器域名和IP地址的映射,并且是动态更新。众多网络客户端程序都使用DNS协议来向DNS服务器查询目标主机的IP地址。
作用
正向解析:将已知的域名解析为IP地址 反向解析:将已知的IP地址解析为域名
监听端口
53/udp | 53/TCP
默认运行用户
named
三. 完全限定域名
FQDN(Fully Qualified Domain Name)
域名缩写 | 机构类型 |
com | 商业系统 |
edu | 教育系统 |
gov | 政府机关 |
mil | 军队系统 |
net | 网管部门 |
org | 非盈利性组织 |
firm | 商业或公司 |
store | 提供购买商业的业务部门 |
arts | 以文化为主的实体 |
web | 主要活动与www有关的实体 |
rec | 以消遣娱乐活动为主的实体 |
inf | 提供信息服务的实体 |
组成
主机名.三级域.二级域名.顶级域名.
案例:www.baidu.com.
域类型
类型 | 举例 |
---|---|
根域 | . |
顶级域 | cn、hk、uk、org、edu、com、mil、gov、net |
二级域 | baidu、163、sina、sohu |
四.DNS解析过程
客户端如何解析域名
-
本地DNS缓存
-
本地hosts文件,在DNS服务器诞生之前,所有的主机之间都是通过hosts文件进行的。
-
指向的DNS服务器IP:
递归查询:直接给出解析结果,客户机与本地DNS服务器之间的查询。(所答即所问) 迭代查询:没有给出解析结果,本地DNS服务器与根等其他DNS服务器之间的查询。(所答非所问)
五.域名服务器的分类
根据作用
1.根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道 所有的顶级域名服务器的域名和IP地址。
2.顶级域名服务器:负责管理该顶级域名注册的二级域名。
3.权限域名服务器:负责一个“区”的域名服务器。
4.本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。 当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务 器。
根据应用场景
主服务器(Primary Name server) 为客户端提供域名解析的主要区域,主DNS服务器宕机,会启 用从DNS服务器提供服务。
辅助服务器(Second Name Server) 主服务器DNS长期无应答,从服务器也会停止提供服务,主 从区域治安的同步采用周期性检查+通知的机制,从服务器周 期性地检查主服务器上地记录情况,一旦发现修改就会同步, 另外主服务器上如果又数据被修改了,会立即通知从服务器更 新记录。
高速缓存服务器(Cache-only server) 缓存服务器是一种不负责域名数据维护,也不负责域名解析 地DNS服务类型。它将用户经常使用到的域名与IP地址解析 记录保存在主机本地中,来提升下次解析的效率。
六.DNS服务器部署
安装bind包
查看安装生成的核心文件
/etc/named.conf #服务主配置文件
/etc/named.rfc1912.zones #服务主配置的额外配置文件
/var/named #区域文件数据目录
/var/named/named.ca #可信的根域名服务器,不要擅自更改
/var/named/named.empty #区域文件的模版文件
/var/named/named.localhost #区域文件的本地接口模版文件
/var/named/named.loopback #区域文件回环接口的模版文件
/var/named/slaves #从服务器的区域数据存储目录
/var/log/named.log #服务日志文件
七.配置主服务器单点架构
先将防火墙等关闭
进入/etc/named.conf中,先修改监听端口号,ipv6不使用可以注释掉,允许访问改成任意
再打开named.rfc1912.zones文件,将全部案例注释掉
选择复制正向解析文件和反向解析文件
定义一个域名和路径,反写地址段
再去/var/named 中复制两个模板(将权限也一起复制)
进入正向解析文件,内容如下:
将第二个@改成域名 ,后面是邮件地址写一个,中间五排不改动,NS指定域名服务器,A是ipv4地址解析记录,AAAA则是ipv6(用不上删除即可),在A前写主机名A后写IP,之后可以再加一个别名记录,邮件解析记录(当你解析mail时,会指向设置的ip地址,但不保证能通)
解析记录说明:
正向解析文件中:
A:IPv4正向解析记录
AAAA:IPV6正向解析记录
NS:DNS服务器解析记录
MX:邮件解析记录
CNAME:别名解析记录
反向解析文件中:
PTR:反向解析记录
反向解析记录先为空,然后将/etc/named.rfc1912.zones反向解析部分注释掉
成功运行named
打开另一台主机,打开/etc/resolv.conf修改内容
成功修改本机DNS
解析地址
再打开反向解析,并对应修改内容
重启服务后,监听53口,全部解析成功
当主机停止named服务时,就无法完成解析
八.配置主从服务器架构
从属服务器不需要修改域文件,先修改主文件
从服务器先下载bind,然后编辑/etc/named.conf和named.rfc1912.zones
主服务器重启named服务,然后从服务器打开服务
此时报错,发现之前文件不让更新,将这两行去掉更改结束
成功激活后,去第二台的/etc/resolv.conf加入从属的地址
此时监控会出现从属地址,关闭主服务器named服务,再次解析
依然可以解析。
九.使用脚本配置服务器
主服务器脚本配置
#!/bin/bash
#关闭防火墙
systemctl disable --now firewalld
if [ $(getenforce) != "disabled" ];then
sed -i 's/=$(getenforce)/=disabled/g' /etc/selinux/config
fi
yum install -y bind
if [ $? -ne 0 ];then
echo "请检查网络或者检查安装包名称是否正确"
fi
read -p "请输入监听端口的ip地址:" ip
sed -i "13s/.* /listen-on port 53 { ${ip}; /g" /etc/named.conf
sed -i "21s/.* /allow-query { any; /g" /etc/named.conf
read -p "请书写一个域名(xxx.com):" zones
read -p "请书写ip地址的反写(例如ip为192.168.100.1,则书写100.168.192)" pi
echo "zone \"${zones}\" IN {
type master;
file \"${zones}.zones\";
allow-update { none; };
};
zone \"${pi}.in-addr.arpa\" IN {
type master;
file \"${pi}.zones\";
allow-update { none; };
};">/etc/named.rfc1912.zones
cp -p /var/named/named.empty /var/named/${zones}.zones
cp -p /var/named/named.empty /var/named/${pi}.zones
echo "\$TTL 3H
@ IN SOA ${zones}. admin.${zones}. (
0 ; serial
1D ; refresh
1H ; retry1W ; expire
3H ) ; minimum
NS dns1.${zones}.
dns1 A ${ip}">/var/named/${zones}.zones
a=`echo ${ip} | cut -d"." -f4`
echo "\$TTL 3H
@ IN SOA ${zones}. admin.${zones}. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns1.${zones}.
$a PTR ${ip}">/var/named/${pi}.zones
while :;
do
read -p "请输入想要起的域名的别名(输入0退出):" othername
if [ "$othername" == "0" ];then
echo "别名命名结束"
break
else
echo "$othername CNAME dns1.${zones}. ">>/var/named/${zones}.zones
echo "$a PTR ${othername}.${zones}.">>/var/named/${pi}.zones
fi
done
systemctl start named
运行结果和过程
在验证的服务器上编写一个修改resolv.conf文件的脚本,然后进行验证
十.总结
配置DNS内容相对简单,上次脚本运行屡屡出错,这次虽然坎坷,但是最终达成结果,继续努力对脚本的练习。