shell脚本实例:创建BIND区域文件
时间:2014-12-05 02:47 来源:www.it.net.cn 作者:IT
分享一个shell脚本代码,用于创建bind的zone文件,即域文件。
首先,需要自定义配置文件如下。
示例ns.profile.it.net.cn配置文件
定义你的默认TTL,电子邮件ID和其他的东西。
此外,设置您的邮件服务器和域名服务器的IP使用bash阵列。
保存如下ns.profile.it.net.cn:
# 域名服务ns1.it.net.cn的默认配置文件
#
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.it.net.cn." "ns2.it.net.cn." "ns3.it.net.cn.")
# 域名服务器的ip列表
# 可以先留下空白,以后再添加。
NAMESERVERSIP=()
#NAMESERVERSIP=("202.54.1.10" "203.54.1.10" "204.54.1.40")
# 邮件记录
# 可以先留下空白,以后再添加。
MAILSERVERS=("mail.it.net.cn.")
#MAILSERVERS=("smtp1.it.net.cn." "smtp2.it.net.cn.")
#-------添加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 it.net.cn 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.it.net.cn"
[ "$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.jbxue.com
即可生成一个可用的zone文件,如下所示:
$ORIGIN cyberciti.com.
$TTL 3h
@ IN SOA ns1.jbxue.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.it.net.cn.
@ 3600 IN NS ns2.it.net.cn.
@ 3600 IN NS ns3.it.net.cn.
; MX Records
@ 3600 IN MX 10 mail.it.net.cn.
; 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.it.net.cn > /var/named/chroot/etc/bind/master/c/cyberciti.com
(责任编辑:IT)
分享一个shell脚本代码,用于创建bind的zone文件,即域文件。 首先,需要自定义配置文件如下。 示例ns.profile.it.net.cn配置文件
定义你的默认TTL,电子邮件ID和其他的东西。
保存如下ns.profile.it.net.cn:
# 域名服务ns1.it.net.cn的默认配置文件
# 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.it.net.cn." "ns2.it.net.cn." "ns3.it.net.cn.") # 域名服务器的ip列表 # 可以先留下空白,以后再添加。 NAMESERVERSIP=() #NAMESERVERSIP=("202.54.1.10" "203.54.1.10" "204.54.1.40") # 邮件记录 # 可以先留下空白,以后再添加。 MAILSERVERS=("mail.it.net.cn.") #MAILSERVERS=("smtp1.it.net.cn." "smtp2.it.net.cn.") #-------添加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: 创建bind的zone文件
#!/bin/bash
DOMAIN="$1"
如何使用这个脚本?
$ORIGIN cyberciti.com.
$TTL 3h @ IN SOA ns1.jbxue.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.it.net.cn. @ 3600 IN NS ns2.it.net.cn. @ 3600 IN NS ns3.it.net.cn. ; MX Records @ 3600 IN MX 10 mail.it.net.cn. ; 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.it.net.cn > /var/named/chroot/etc/bind/master/c/cyberciti.com
|