脚本部署DNS服务

bind部署和添加解析记录为一体,一键执行脚本,这是重新写了一个脚本,之前那个不能兼容Ubuntu,现在可以了
还支持后续添加域名解析,但不支持批量
脚本下载链接

#!/bin/bash
# 
#********************************************************************
#Author:                chenjiahao
#QQ:                    1938191576
#Date:                  2022-11-06
#FileName:              install_DNS.sh
#URL:                   https://www.placjh.com
#Description:           The deploy script
#Copyright (C):         2022 All rights reserved
#********************************************************************

RECORD=www
DOMAIN_NAME=chen.com
VLUE=10.0.0.11
LOCALHOST=`hostname -I|awk '{print $1}'`
TIME=`date +%F:%T|sed -e 's/-//g' -e 's/://g'`
NUMBER=`echo ${TIME:2:10}`

color () {
	RES_COL=60
	MOVE_TO_COL="echo -en \\033[${RES_COL}G"
	SETCOLOR_SUCCESS="echo -en \\033[1;32m"
	SETCOLOR_FAILURE="echo -en \\033[1;31m"
	SETCOLOR_WARNING="echo -en \\033[1;33m"
	SETCOLOR_NORMAL="echo -en \E[0m"
	echo -n "$1" && $MOVE_TO_COL
	echo -n "["
	if [ $2 = "success" -o $2 = "0" ] ;then
		${SETCOLOR_SUCCESS}
		echo -n $"  OK  "    
	elif [ $2 = "failure" -o $2 = "1"  ] ;then 
		${SETCOLOR_FAILURE}
		echo -n $"FAILED"
	else
		${SETCOLOR_WARNING}
		echo -n $"WARNING"
	fi
	${SETCOLOR_NORMAL}
	echo -n "]"
	echo 
}

. /etc/os-release

install(){
	if [ $ID = "centos" -o $ID = "rocky" ];then
		if [ ! -f /etc/named.rfc1912.zones ];then
			echo "安装bind"
			yum -y install bind bind-utils &>/dev/null
			systemctl enable --now named &>/dev/null
			if [ $? -eq 0 ];then
				color 安装完毕 0
			else
				color 安装失败,请重试 1
			fi
		fi
	elif [ $ID = "ubuntu" ];then
		if [ ! -f /etc/bind/named.conf.default-zones ];then
			echo "安装bind"
			apt update &>/dev/null
			apt -y install bind9 bind9-utils &>/dev/null
			if [ $? -eq 0 ];then
				color 安装完毕 0
			else
				color 安装失败,请重试 1
			fi
		fi
	else
		color 不支持的OS 1
		exit
	fi
}

configuration(){
	if [ $ID = "centos" -o $ID = "rocky" ];then
		sed -i '/listen-on port 53/s/127.0.0.1/localhost/' /etc/named.conf
		sed -i '/allow-query/s/localhost/any/' /etc/named.conf
		sed -i '/dnssec/s/yes/no/' /etc/named.conf
	elif [ $ID = "ubuntu" ];then
		sed -i '/dnssec-validation/s/auto/no/' /etc/bind/named.conf.options
	fi
}

add(){
	if [ $ID = "centos" -o $ID = "rocky" ];then
		grep $DOMAIN_NAME /etc/named.rfc1912.zones &>/dev/null
		if [ ! $? -eq 0 ];then
			echo "定义区域解析库文件"
			cat >> /etc/named.rfc1912.zones <<-EOF

			zone "$DOMAIN_NAME" IN {
			    type master;
			    file "$DOMAIN_NAME.zone";
			};
			EOF
		fi
		if [ ! -f /var/named/$DOMAIN_NAME.zone ];then
			echo "创建区域数据库"
			cat > /var/named/$DOMAIN_NAME.zone <<-EOF
			\$TTL 600
			@		600			IN	  SOA			master		dns.$DOMAIN_NAME.  ( $NUMBER 3H 10M 1D 1W )
			@		600			IN	  NS			master
			master					  A				$LOCALHOST
			$RECORD	600			IN	  A				$VLUE
			EOF
			chgrp named /var/named/$DOMAIN_NAME.zone
		else
			echo "添加记录"
			cat >> /var/named/$DOMAIN_NAME.zone <<-EOF
			$RECORD	600			IN	  A				$VLUE
			EOF
			sed -i "s/`sed -n '/SOA/p' /var/named/$DOMAIN_NAME.zone|awk '{print $8}'`/$NUMBER/" /var/named/$DOMAIN_NAME.zone
		fi
	elif [ $ID = "ubuntu" ];then
		grep $DOMAIN_NAME /etc/bind/named.conf.default-zones &>/dev/null
		if [ ! $? -eq 0 ];then
			echo "定义区域解析库文件"
			cat >> /etc/bind/named.conf.default-zones <<-EOF

			zone "$DOMAIN_NAME" IN {
			    type master;
			    file "/etc/bind/$DOMAIN_NAME.zone";
			};
			EOF
		fi
		if [ ! -f /etc/bind/$DOMAIN_NAME.zone ];then
			echo "创建区域数据库"
			cat > /etc/bind/$DOMAIN_NAME.zone <<-EOF
			\$TTL 600
			@		600			IN	  SOA			master		dns.$DOMAIN_NAME.  ( $NUMBER 3H 10M 1D 1W )
			@		600			IN	  NS			master
			master					  A				$LOCALHOST
			$RECORD	600			IN	  A				$VLUE
			EOF
			chgrp bind  /etc/bind/$DOMAIN_NAME.zone
		else
			echo "添加记录"
			cat >> /etc/bind/$DOMAIN_NAME.zone <<-EOF
			$RECORD	600			IN	  A				$VLUE
			EOF
			sed -i "s/`sed -n '/SOA/p' /etc/bind/$DOMAIN_NAME.zone|awk '{print $8}'`/$NUMBER/" /etc/bind/$DOMAIN_NAME.zone
		fi
	fi
}

check(){
	echo "检查语法"
	named-checkconf &>/dev/null
	if [ $ID = "centos" -o $ID = "rocky" ];then
		named-checkzone $DOMAIN_NAME /var/named/$DOMAIN_NAME.zone &>/dev/null
	elif [ $ID = "ubuntu" ];then
		named-checkzone $DOMAIN_NAME /etc/bind/$DOMAIN_NAME.zone &>/dev/null
	fi
	if [ $? -eq 0 ];then
		color 完成 0
	else
		color 配置解析失败 1
		exit
	fi
	rndc reload &>/dev/null
}

install
configuration
add
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值