245 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						||
 | 
						||
set -Eeuo pipefail
 | 
						||
trap cleanup SIGINT SIGTERM ERR EXIT
 | 
						||
 | 
						||
# cree les fichiers de configuration bind9 
 | 
						||
#  - ficher de zone directe
 | 
						||
#  - ficher de zone inverse
 | 
						||
#
 | 
						||
 | 
						||
version="1.1a"
 | 
						||
zone="domaine.lan"
 | 
						||
slave=0
 | 
						||
 | 
						||
 | 
						||
cleanup() {
 | 
						||
  trap - SIGINT SIGTERM ERR EXIT
 | 
						||
  # script cleanup here
 | 
						||
}
 | 
						||
 | 
						||
initialize () {
 | 
						||
readonly zonenet="192.168.56"
 | 
						||
readonly zonerev="56.168.192.in-addr.arpa"
 | 
						||
 | 
						||
# NS1
 | 
						||
readonly nsname="srv1"
 | 
						||
readonly nsip="${zonenet}.10"
 | 
						||
readonly nsiprev=$(echo ${nsip}|cut -d. -f4) # dernier octet pour classe C
 | 
						||
 | 
						||
# NS2 
 | 
						||
readonly nsname2="srv2"
 | 
						||
readonly nsip2="${zonenet}.11"
 | 
						||
readonly nsiprev2=$(echo ${nsip2}|cut -d. -f4)
 | 
						||
readonly ttl="86400"
 | 
						||
 | 
						||
# Global
 | 
						||
readonly nsfqdn="${nsname}.${zone}"
 | 
						||
readonly nsfqdnp="${nsfqdn}."
 | 
						||
readonly zonep="${zone}."
 | 
						||
readonly date=$(date +%Y%m%d00)
 | 
						||
}
 | 
						||
 | 
						||
mkconflocal () {
 | 
						||
if [[ "${slave}" != 1 ]] ; then
 | 
						||
echo "Generation fichier named.conf.local ..."
 | 
						||
cat <<EOT > "named.conf.local"
 | 
						||
# fichier zone ${zone}
 | 
						||
# le $(date)
 | 
						||
 | 
						||
zone "${zone}" {
 | 
						||
    type master;
 | 
						||
    file "/etc/bind/db.${zone}"; # zone directe
 | 
						||
};
 | 
						||
 | 
						||
zone "${zonerev}" {
 | 
						||
    type master;
 | 
						||
    file "/etc/bind/db.${zone}.rev"; # zone directe
 | 
						||
};
 | 
						||
EOT
 | 
						||
else 
 | 
						||
echo "Generation fichier named.conf.local ..."
 | 
						||
cat <<EOT > "named.conf.local"
 | 
						||
# fichier zone ${zone}
 | 
						||
# le $(date)
 | 
						||
 | 
						||
zone "${zone}" {
 | 
						||
    type slave;
 | 
						||
    file "/var/cache/bind/db.${zone}"; # zone directe
 | 
						||
    masters { ${nsip} ; };
 | 
						||
};
 | 
						||
 | 
						||
zone "${zonerev}" {
 | 
						||
    type slave;
 | 
						||
    file "/var/cache/bind/db.${zone}.rev"; # zone directe
 | 
						||
    masters { ${nsip} ; };
 | 
						||
};
 | 
						||
 | 
						||
EOT
 | 
						||
fi
 | 
						||
}
 | 
						||
 | 
						||
mkzdirect () {
 | 
						||
# fichier de zone directe 
 | 
						||
echo "Generation fichier de zone directe db.${zone} ..."
 | 
						||
cat <<EOT > "db.${zone}"
 | 
						||
; fichier zone ${zone}
 | 
						||
; le $(date)
 | 
						||
\$TTL ${ttl} ; (1 day)
 | 
						||
\$ORIGIN ${zonep}
 | 
						||
@ IN SOA ${nsfqdnp} root.${nsfqdnp} (
 | 
						||
                ${date} ; serial YYYYMMDDnn
 | 
						||
                14400      ; refresh (4 hours)
 | 
						||
                1800       ; retry   (30 minutes)
 | 
						||
                1209600    ; expire  (2 weeks)
 | 
						||
                3600       ; minimum (1 hour)
 | 
						||
                )
 | 
						||
 
 | 
						||
@                  IN   NS    ${nsname}
 | 
						||
@                  IN   NS    ${nsname2}
 | 
						||
 
 | 
						||
                   IN   A     203.0.113.10 ;  zone 
 | 
						||
                   IN   AAAA  2001:DB8:BEEF:113::10  ;
 | 
						||
www                IN   CNAME ${nsfqdnp}
 | 
						||
ftp                IN   CNAME ${nsfqdnp}
 | 
						||
 
 | 
						||
${nsname}	   IN   A     ${nsip}
 | 
						||
                   IN   AAAA  2001:DB8:BEEF:2::22
 | 
						||
${nsname2}         IN   A     ${nsip2}
 | 
						||
                   IN   AAAA  2001:DB8:BEEF:100::22
 | 
						||
 | 
						||
EOT
 | 
						||
}
 | 
						||
 | 
						||
mkzreverse () {
 | 
						||
echo "Generation fichier de zone inverse db.${zone}.rev ..."
 | 
						||
cat <<EOT > "db.${zone}.rev"
 | 
						||
; fichier zone inverse ${zone}
 | 
						||
; le $(date)
 | 
						||
\$TTL ${ttl} ; (1 day)
 | 
						||
@ IN SOA ${nsfqdnp} root.${nsfqdnp} (
 | 
						||
                ${date} ; serial YYYYMMDDnn
 | 
						||
                14400      ; refresh (4 hours)
 | 
						||
                1800       ; retry   (30 minutes)
 | 
						||
                1209600    ; expire  (2 weeks)
 | 
						||
                3600       ; minimum (1 hour)
 | 
						||
                )
 | 
						||
 
 | 
						||
@                 IN   NS    ${nsname}.${zone}.
 | 
						||
@                 IN   NS    ${nsname2}.${zone}.
 | 
						||
 
 | 
						||
 
 | 
						||
${nsiprev}	 IN   PTR     ${nsname}.${zone}.
 | 
						||
${nsiprev2}      IN   PTR     ${nsname2}.${zone}.
 | 
						||
 | 
						||
EOT
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
mkresolv () {
 | 
						||
echo "Generation fichier /etc/resolv.conf ..."
 | 
						||
cat <<EOT > "/etc/resolv.conf"
 | 
						||
 | 
						||
# fichier resolv.conf ${zone}
 | 
						||
# le $(date)
 | 
						||
domain ${zone}
 | 
						||
search ${zone}
 | 
						||
nameserver 127.0.0.1
 | 
						||
EOT
 | 
						||
}
 | 
						||
 | 
						||
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
 | 
						||
 | 
						||
usage() {
 | 
						||
  cat <<EOF # remove the space between << and EOF, this is due to web plugin issue
 | 
						||
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value zone [arg2...]
 | 
						||
 | 
						||
Script description here.
 | 
						||
 | 
						||
Available options:
 | 
						||
 | 
						||
-h, --help      Print this help and exit
 | 
						||
-v, --verbose   Print script debug info
 | 
						||
-s, --slave      Some flag description
 | 
						||
-p, --param     Some param description
 | 
						||
EOF
 | 
						||
  exit
 | 
						||
}
 | 
						||
 | 
						||
cleanup() {
 | 
						||
  trap - SIGINT SIGTERM ERR EXIT
 | 
						||
  # script cleanup here
 | 
						||
}
 | 
						||
 | 
						||
setup_colors() {
 | 
						||
  if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then
 | 
						||
    NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m'
 | 
						||
  else
 | 
						||
    NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW=''
 | 
						||
  fi
 | 
						||
}
 | 
						||
 | 
						||
msg() {
 | 
						||
  echo >&2 -e "${1-}"
 | 
						||
}
 | 
						||
 | 
						||
die() {
 | 
						||
  local msg=$1
 | 
						||
  local code=${2-1} # default exit status 1
 | 
						||
  msg "$msg"
 | 
						||
  exit "$code"
 | 
						||
}
 | 
						||
 | 
						||
parse_params() {
 | 
						||
  # default values of variables set from params
 | 
						||
  flag=0
 | 
						||
  param=''
 | 
						||
 | 
						||
  while :; do
 | 
						||
    case "${1-}" in
 | 
						||
    -h | --help) usage ;;
 | 
						||
    --no-color) NO_COLOR=1 ;;
 | 
						||
    -s | --slave) flag=1 ;; # example flag
 | 
						||
#    -p | --param) # example named parameter
 | 
						||
#      param="${2-}"
 | 
						||
#      shift
 | 
						||
#      ;;
 | 
						||
    -?*) die "Unknown option: $1" ;;
 | 
						||
    *) break ;;
 | 
						||
    esac
 | 
						||
    shift
 | 
						||
  done
 | 
						||
 | 
						||
  args=("$@")
 | 
						||
 | 
						||
  # check required params and arguments
 | 
						||
#  [[ -z "${param-}" ]] && die "Missing required parameter: param"
 | 
						||
  [[ ${#args[@]} -eq 0 ]] && die "Missing script arguments"
 | 
						||
 | 
						||
  return 0
 | 
						||
}
 | 
						||
 | 
						||
parse_params "$@"
 | 
						||
setup_colors
 | 
						||
 | 
						||
# script logic here
 | 
						||
 | 
						||
#msg "${RED}Read parameters:${NOFORMAT}"
 | 
						||
#msg "- flag: ${flag}"
 | 
						||
#msg "- param: ${param}"
 | 
						||
#msg "- arguments: ${args[*]-}"
 | 
						||
 | 
						||
zone="${args[0]-}"
 | 
						||
slave="${flag}"
 | 
						||
initialize
 | 
						||
if [[ ${flag} != 1 ]] ; then
 | 
						||
	mkconflocal
 | 
						||
	mkzdirect
 | 
						||
	mkzreverse
 | 
						||
	mkresolv
 | 
						||
else
 | 
						||
	mkconflocal
 | 
						||
	mkresolv
 | 
						||
fi
 | 
						||
exit 0
 |