shell脚本实例:创建BIND区域文件

发布时间:2019-09-09编辑:脚本学堂
本文分享一个shell脚本代码,用于创建bind的zone文件,即域文件。有需要的朋友参考下。

首先,需要自定义配置文件如下。

示例ns.profile.jb200.com配置文件

定义你的默认TTL,电子邮件ID和其他的东西。
此外,设置您的邮件服务器和域名服务器的IP使用bash阵列。

保存如下ns.profile.jb200.com:
 

复制代码 代码示例:
# 域名服务ns1.jb200.com的默认配置文件
#
TTL="3h"                      # Default TTL
ATTL="3600"        # Default TTL for each DNS rec 
EMAILID="vivek.nixcraft.in." # hostmaster email
REFRESH="3h"                  # Refresh After 3 hours
RETRY="1h"                    # Retry Retry after 1 hour
EXPIER="1w"        # Expire after 1 week
MAXNEGTIVE="1h"        # Minimum negative caching of 1 hour 
 
# name server names FQDN
NAMESERVERS=("ns1.jb200.com." "ns2.jb200.com." "ns3.jb200.com.")
 
# 域名服务器的ip列表
# 可以先留下空白,以后再添加。
NAMESERVERSIP=()
#NAMESERVERSIP=("202.54.1.10" "203.54.1.10" "204.54.1.40")
 
# 邮件记录
# 可以先留下空白,以后再添加。
MAILSERVERS=("mail.jb200.com.")
#MAILSERVERS=("smtp1.jb200.com." "smtp2.jb200.com.")
 
#-------添加A记录----------#
# 定义添加A记录的函数
function LoadCutomeARecords(){
echo >/dev/null # keep this line
# Uncomment or add A recoreds as per your requirments
# echo "ftp   $ATTL IN A 202.54.2.2"
# echo "webmail   $ATTL IN A 202.54.2.5"
# echo "ipv6host   $ATTL IN AAAA 2001:470:1f0e:c2::1"
}
 

使用LoadCutomeARecords()添加其他记录。
您可以创建多个域名服务器的配置文件,并调用它mkzone.sh。

mkzone.sh: 创建bind的zone文件
 

复制代码 代码示例:

#!/bin/bash
# A Bash shell script to create BIND ZONE FILE.
# Tested under BIND 8.x / 9.x, RHEL, DEBIAN, Fedora Linux.
# -------------------------------------------------------------------------
# Examples:
# ./mkzone.sh example.com default-www-IP-address
# ./mkzone.sh jb200.com 74.12.5.1
# -------------------------------------------------------------------------

DOMAIN="$1"
WWWIP="$2"
 
if [ $# -le 1 ]
then
 echo "Syntax: $(basename $0) domainname www.domain.ip.address [profile]"
 echo "$(basename $0) example.com 1.2.3.4"
 exit 1
fi
 
# get profile
PROFILE="ns.profile.jb200.com"
[ "$3" != "" ] && PROFILE="$3"
 
SERIAL=$(date +"%Y%m%d")01                     # Serial yyyymmddnn
 
# load profile
source "$PROFILE"
 
# set default ns1
NS1=${NAMESERVERS[0]}
 
###### start SOA ######
echo "$ORIGIN ${DOMAIN}."
echo "$TTL ${TTL}"
echo "@ IN SOA ${NS1} ${EMAILID}("
echo "   ${SERIAL} ; Serial yyyymmddnn"
echo "   ${REFRESH}  ; Refresh After 3 hours"
echo "   ${RETRY}  ; Retry Retry after 1 hour"
echo "   ${EXPIER}  ; Expire after 1 week"
echo "   ${MAXNEGTIVE})  ; Minimum negative caching of 1 hour"
echo ""
 
###### start Name servers #######
# Get length of an array
tLen=${#NAMESERVERS[@]}
 
# use for loop read all nameservers
echo "; Name servers for $DOMAIN"
for (( i=0; i<${tLen}; i++ ));
do
 echo "@   ${ATTL} IN NS ${NAMESERVERS[$i]}"
done
 
###### start MX section #######
# get length of an array
tmLen=${#MAILSERVERS[@]}
 
# use for loop read all mailservers
echo "; MX Records"
for (( i=0; i<${tmLen}; i++ ));
do
 echo "@   ${ATTL} IN  MX $(( 10*${i} + 10 )) ${MAILSERVERS[$i]}"
done
 
###### start A pointers #######
# A Records - Default IP for domain
echo '; A Records'
echo "@    ${ATTL} IN  A ${WWWIP}"
 
# Default Nameserver IPs
# get length of an array
ttLen=${#NAMESERVERSIP[@]}
 
# make sure both nameserver and their IP match
if [ $tLen -eq $ttLen ]
then
# use for loop read all nameservers IPs
for (( i=0; i<${ttLen}; i++ ));
do
   thisNs="$(echo ${NAMESERVERS[$i]} | cut -d'.' -f1)"
 
 echo "${thisNs}    ${ATTL} IN A ${NAMESERVERSIP[$i]}"
done
else
 # if we are here means, our nameserver IPs are defined else where else...  do nothing
 :
fi
 
echo "; CNAME Records"
echo "www   ${ATTL} IN CNAME @"
 

如何使用这个脚本?
例如,对域名cyberciti.com,对应IP为:202.54.1.2,输入如下语句:
# ./mkzone.sh cyberciti.com 202.54.1.2 ns.profile.jb200.com
即可生成一个可用的zone文件,如下所示:
 

复制代码 代码示例:
$ORIGIN cyberciti.com.
$TTL 3h
@ IN SOA ns1.jb200.com. vivek.nixcraft.in.(
   2009032401 ; Serial yyyymmddnn
   3h  ; Refresh After 3 hours
   1h  ; Retry Retry after 1 hour
   1w  ; Expire after 1 week
   1h)  ; Minimum negative caching of 1 hour
; Name servers for cyberciti.com
@   3600 IN NS ns1.jb200.com.
@   3600 IN NS ns2.jb200.com.
@   3600 IN NS ns3.jb200.com.
; MX Records
@   3600 IN  MX 10 mail.jb200.com.
; A Records
@    3600 IN  A 202.54.1.2
; CNAME Records
www   3600 IN CNAME @

运用重定向符号,将以上内容保存为文件: /var/named/chroot/etc/bind/master/c/cyberciti.com即可,如下:
 

复制代码 代码示例:
# ./mkzone.sh cyberciti.com 202.54.1.2 ns.profile.jb200.com > /var/named/chroot/etc/bind/master/c/cyberciti.com