#!/bin/bash
# Automatic Bind configuration for OpenVPN server.

# We load VPN configuration
source /etc/openvpn/easy-rsa/vars
REVERSE_IPRANGE=`echo $OPENVPN_IPRANGE | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3\.\2\.\1/'`
SERVER_BASENAME=`hostname | sed -e "s/^\([^\.]*\)\..*/\1/"`

###################### File db.$OPENVPN_IPRANGE #######################
# Configuration file initialization.
echo "$REVERSE_IPRANGE.in-addr.arpa. IN SOA $(hostname). root.localhost. (
  1; Serial
  10800; refresh after 3 hours.
  3600; Retry after 1 hour.
  604800; expire after 1 week.
  86400; Minimum TTL of 1 day.
);

;
; Name servers declaration.
;

$REVERSE_IPRANGE.in-addr.arpa.  IN NS  $(hostname).;

;
; Hostnames declaration.
;
1.$REVERSE_IPRANGE;in-addr.arpa. IN PTR $SERVER_BASENAME.$OPENVPN_LOCALDOMAIN.;
" > /etc/bind/db.$OPENVPN_IPRANGE

# We add VPN clients IP.
for OPENVPN_CLIENT in $OPENVPN_CLIENTS; do
  KEY_COMMONNAME="$OPENVPN_CLIENT.client.$OPENVPN_SERVER"
  if [ -e "/etc/openvpn/clients-configs/$KEY_COMMONNAME" ]; then

    IP_LAST_DIGIT=`cat "/etc/openvpn/clients-configs/$KEY_COMMONNAME" | \
        grep "ifconfig-push" | \
        sed -e "s/ifconfig-push[ \t]*[0-9]*\.[0-9]*\.[0-9]*\.\([0-9]*\)[ \t]*.*/\1/"`

    CLIENT_BASENAME=`echo $OPENVPN_CLIENT | sed -e "s/^\([^\.]*\)\..*/\1/"`

    echo "$IP_LAST_DIGIT.$REVERSE_IPRANGE.in-addr.arpa. IN PTR $CLIENT_BASENAME.$OPENVPN_LOCALDOMAIN.;" \
         >> /etc/bind/db.$OPENVPN_IPRANGE
  fi
done

###################### File db.$OPENVPN_LOCALDOMAIN #######################
# Configuration file initialization.
echo "$OPENVPN_LOCALDOMAIN. IN SOA $(hostname). root.localhost. (
  1; Serial
  10800; refresh after 3 hours.
  3600; Retry after 1 hour.
  604800; expire after 1 week.
  86400; Minimum TTL of 1 day.
);

;
; Name servers declaration.
;

$OPENVPN_LOCALDOMAIN.  IN NS  $(hostname).;

;
; Hostnames declaration.
;
$SERVER_BASENAME.$OPENVPN_LOCALDOMAIN. IN A $OPENVPN_IPRANGE.1;
" > /etc/bind/db.$OPENVPN_LOCALDOMAIN

# We add VPN clients IP.
for OPENVPN_CLIENT in $OPENVPN_CLIENTS; do
  KEY_COMMONNAME="$OPENVPN_CLIENT.client.$OPENVPN_SERVER"
  if [ -e "/etc/openvpn/clients-configs/$KEY_COMMONNAME" ]; then

    IP_LAST_DIGIT=`cat "/etc/openvpn/clients-configs/$KEY_COMMONNAME" | \
        grep "ifconfig-push" | \
        sed -e "s/ifconfig-push[ \t]*[0-9]*\.[0-9]*\.[0-9]*\.\([0-9]*\)[ \t]*.*/\1/"`

    CLIENT_BASENAME=`echo $OPENVPN_CLIENT | sed -e "s/^\([^\.]*\)\..*/\1/"`

    echo "$CLIENT_BASENAME.$OPENVPN_LOCALDOMAIN. IN A $OPENVPN_IPRANGE.$IP_LAST_DIGIT;" \
         >> /etc/bind/db.$OPENVPN_LOCALDOMAIN
  fi
done


