DNS正向解析+主从解析服务器脚本
1、脚本内容
主服务器脚本
#!/bin/bash
##先修改本地DNS缓存服务器
read -p "请输入主服务器ip地址:" masterIP
sed -i '/DNS/d' /etc/sysconfig/network-scripts/ifcfg-ens33
echo "DNS=$masterIP" >> /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
##安装
yum install bind bind-utils -y
##修改主配置文件
sed -i '13s/^/\/\//' /etc/named.conf
sed -i '21s/localhost/any/g' /etc/named.conf
##修改区域配置文件
read -p "请输入您需要解析的域名:" NS
sed -i '24azone "'$NS'" IN {\n type master;\n file "'$NS'.zone";\n};' /etc/named.rfc1912.zones
##修改区域数据库配置文件
cd /var/named/
cp -a named.localhost $NS.zone
sed -i '2s/@/master/2' /var/named/$NS.zone
sed -i '/NS/s/@/master/g' /var/named/$NS.zone
sed -i '9s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/'$masterIP'/' /var/named/$NS.zone
sed -i '/AAAA/d' /var/named/$NS.zone
read -p "请输入slave主机ip地址:" slaveIP
sed -i '9a \ NS slave \nslave A '$slaveIP'' /var/named/$NS.zone
sed -i '11awww A '$masterIP'\n\* A '$masterIP'' /var/named/$NS.zone
systemctl start named
从服务器脚本
#!/bin/bash
##先修改本地DNS缓存服务器
read -p "请输入主服务器ip地址:" masterIP
read -p "请输入从服务器ip地址:" slaveIP
sed -i '/DNS/d' /etc/sysconfig/network-scripts/ifcfg-ens33
echo "DNS1=$masterIP" >> /etc/sysconfig/network-scripts/ifcfg-ens33
echo "DNS2=$slaveIP" >> /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
##安装
yum install bind bind-utils -y
##修改主配置文件
sed -i '13s/^/\/\//' /etc/named.conf
sed -i '21s/localhost/any/g' /etc/named.conf
##修改区域配置文件
read -p "请输入您需要解析的域名:" NS
sed -i '24azone "'$NS'" IN {\n type slave;\n file "slaves/'$NS'.zone";\n masters { '$masterIP'; };\n};' /etc/named.rfc1912.zones
systemctl start named
2、编写脚本步骤
第一遍:先手动敲一遍,测试命令是否正确,并思考如何转化为脚本;
第二遍:用sed流编辑器,一句一句将上诉的vim替换成sed命令实现,进行记录;
第三遍:把第二遍的命令结合组合起来,进行测试;
3、语法新发现及易错点
##当脚本执行出现故障时,再次使用脚本,会在区域配置文件/etc/named.rfc1912.zones中重复添加对应关系,这是不行的,不可重复添加
解决思路:每次跑脚本前保证环境干净,卸载bind从头开始
##关于数据库文件的语法新发现
第一行其实可以不改,两个@可以并存,都表示域名本身,也可以用sed -i '2s/@/master/2'替换第二个@为master
关于NS slave,这里是NS前面必须必须有空格!!,sed -i '9a \ NS slave \nslave A '$slaveIP''中的\ 表示空格
4、知识盲区与改进方向
##该脚本缺少对交互输入的变量值进行判断,万一写错了咋办?(不会判断)
##关于数据库用sed输入的时候有个知识点
sed -i '9a \ NS slave \nslave A '$slaveIP'' /var/named/$NS.zone
为什么改为10a就不行,后来测试的原因判断是因为当时文本只有9行,从第10行的下一行写就不可以
5、实验测试