#!/usr/bin/env bash # Configure the bind9 pool backend for a multi-pool implementation # Enable with: # DESIGNATE_BACKEND_DRIVER=multipool-bind9 # Dependencies: # ``functions`` file # ``designate`` configuration # install_designate_backend - install any external requirements # configure_designate_backend - make configuration changes, including those to other services # init_designate_backend - initialize databases, etc. # start_designate_backend - start any external services # stop_designate_backend - stop any external services # cleanup_designate_backend - remove transient data and cache # Save trace setting DP_BIND9_XTRACE=$(set +o | grep xtrace) set +o xtrace # Defaults # -------- BIND2_DNS_PORT=${DESIGNATE_SERVICE_PORT2_DNS:-1053} BIND_SERVICE_NAME=bind9 BIND2_SERVICE_NAME=bind9-2 BIND2_DEFAULT_FILE=/etc/default/named-2 BIND2_SERVICE_FILE=/etc/systemd/system/$BIND2_SERVICE_NAME.service BIND_CFG_DIR=/etc/bind BIND2_CFG_DIR=/etc/bind-2 BIND2_TSIGKEY_FILE=$BIND2_CFG_DIR/named.conf.tsigkeys BIND_VAR_DIR=/var/cache/bind BIND2_VAR_DIR=/var/cache/bind-2 BIND_RUN_DIR=/run/named BIND2_RUN_DIR=/run/named-2 BIND_CFG_FILE=$BIND_CFG_DIR/named.conf.options BIND2_CFG_FILE=$BIND2_CFG_DIR/named.conf.options BIND_USER=bind BIND_GROUP=bind DESIGNATE_SERVICE_PORT_RNDC=${DESIGNATE_SERVICE_PORT_RNDC:-953} DESIGNATE_SERVICE_PORT2_RNDC=${DESIGNATE_SERVICE_PORT2_RNDC:-1953} if is_fedora; then BIND_SERVICE_NAME=named BIND2_SERVICE_NAME=named-2 BIND2_SERVICE_FILE=/etc/systemd/system/$BIND2_SERVICE_NAME.service BIND_CFG_DIR=/etc/$BIND_SERVICE_NAME BIND2_CFG_DIR=/etc/$BIND2_SERVICE_NAME BIND_CFG_FILE=/etc/$BIND_SERVICE_NAME.conf BIND2_CFG_FILE=/etc/$BIND2_SERVICE_NAME.conf BIND_VAR_DIR=/var/$BIND_SERVICE_NAME BIND2_VAR_DIR=/var/$BIND2_SERVICE_NAME BIND_USER=named BIND_GROUP=named BIND2_UNIT_CFG_FILE=/etc/sysconfig/$BIND2_SERVICE_NAME BIND2_TSIGKEY_FILE=$BIND2_CFG_DIR/named.conf.tsigkeys fi # Entry Points # ------------ # install_designate_backend - install any external requirements function install_designate_backend { # The user that designate runs as needs to be member of **$BIND_GROUP** group. # The designate bind9 backend needs read/write access to $BIND_VAR_DIR sudo groupadd -f $BIND_GROUP add_user_to_group $STACK_USER $BIND_GROUP sudo mkdir -p $BIND2_CFG_DIR sudo chown -R $STACK_USER:$BIND_GROUP $BIND2_CFG_DIR sudo mkdir -p $BIND2_RUN_DIR sudo chgrp $BIND_GROUP $BIND2_RUN_DIR if is_ubuntu; then install_package bind9 # generate a defaults/named2 file sudo tee $BIND2_DEFAULT_FILE >/dev/null <>$BIND2_UNIT_CFG_FILE sudo echo "$NAMEDCONF" >>$BIND2_UNIT_CFG_FILE sudo cp -a /lib/systemd/system/named.service $BIND2_SERVICE_FILE # set the various declarations iniset -sudo $BIND2_SERVICE_FILE "Service" "Environment=NAMEDCONF" "$BIND2_CFG_FILE" iniset -sudo $BIND2_SERVICE_FILE "Service" "EnvironmentFile" "$BIND2_UNIT_CFG_FILE" iniset -sudo $BIND2_SERVICE_FILE "Service" "Environment=KRB5_KTNAME" "$BIND2_CFG_DIR.keytab" iniset -sudo $BIND2_SERVICE_FILE "Service" "PIDFile" "$BIND2_RUN_DIR/named.pid" sudo chmod 750 $BIND2_CFG_DIR fi sudo chown -R $BIND_USER:$BIND_GROUP $BIND2_RUN_DIR sudo chown -R $BIND_USER:$BIND_GROUP $BIND_RUN_DIR # copy the /var/named default data sudo cp -arf $BIND_VAR_DIR $BIND2_VAR_DIR for cfg_dir in "$BIND_CFG_DIR" "$BIND2_CFG_DIR"; do sudo chmod -R g+r $cfg_dir done for var_dir in "$BIND_VAR_DIR" "$BIND2_VAR_DIR"; do sudo chmod -R g+rw $var_dir done # Customize Bind9 apparmor profile if installed, include the necessary bits # for the second named instance, bind-2 and named-2 if [[ -d /etc/apparmor.d ]]; then sudo tee /etc/apparmor.d/local/usr.sbin.named >/dev/null </dev/null </dev/null <$BIND2_TSIGKEY_FILE NAME=$(cat $BIND2_TSIGKEY_FILE | grep 'key' | awk '{split($0, a, " "); print a[2];}' | sed -e 's/^"//' -e 's/"$//' | awk '{split($0, a, "{"); print a[1];}') sudo echo -e "server $HOST_IP {\n keys { $NAME };\n};" >>$BIND2_TSIGKEY_FILE # create rndc key and config sudo rndc-confgen -a -p $DESIGNATE_SERVICE_PORT2_RNDC -c $BIND2_CFG_DIR/rndc.key sudo chown $BIND_USER:$BIND_GROUP $BIND2_CFG_DIR/rndc.key sudo chmod g+r $BIND2_CFG_DIR/rndc.key sudo tee $BIND2_CFG_FILE >/dev/null </dev/null </dev/null <