Krzysztof, thank you for excellent howto.
I have some questions to you:
1. Is there any reasons why "Doesn't work with domain-aliasses"? I have improved script "/var/www/ispcp/gui/domain/index.php" to serve domain-aliasses too.
2. Although you configured secure zone transfer between primary NS and secondary NS, but by default BIND configuration in ispCP installation allows AFXR to any. Do you know why?
And some improvements:
1. Let`s fix AXFR issue: edit "options" section in /etc/bind/named.conf.options on ISPCP_SERVER:
Code:
allow-transfer { SECONDARY_DNS_IP; };
transfer-source BASE_SERVER_IP;
Do not forget restart BIND.
2. I use nsd3 software for secondary NS on FreeBSD, this is my version of /var/www/ispcp/gui/domain/index.php file:
Code:
<?php
require '../include/ispcp-lib.php';
$cfg = ispCP_Registry::get('Config');
$sql = ispCP_Registry::get('Db');
$SECONDARY_DNS_IP = "5.6.7.8";
$count_query = "
SELECT
COUNT(`domain_id`) AS cnt
FROM
`domain`
";
$start_index = 0;
$rows_per_page = 100;
$query = "
SELECT
`domain_name`
FROM
`domain`
ORDER BY
`domain_id` ASC
LIMIT $start_index, $rows_per_page";
$rs = exec_query($sql, $count_query);
$records_count = $rs->fields['cnt'];
$rs = exec_query($sql, $query);
if ($rs->rowCount() == 0) {
echo "#NO DOMAINS LISTED";
} else {
echo "#$records_count DOMAINS LISTED ON $cfg->SERVER_HOSTNAME [$cfg->BASE_SERVER_IP]\n";
while (!$rs->EOF){
echo "zone:\n";
echo "\tname: \"".$rs->fields['domain_name']."\"\n";
echo "\tzonefile: \"slave/".$rs->fields['domain_name']."\"\n";
echo "\toutgoing-interface: $SECONDARY_DNS_IP\n";
echo "\tallow-notify: $cfg->BASE_SERVER_IP TRANSFERS\n";
echo "\trequest-xfr: AXFR $cfg->BASE_SERVER_IP TRANSFERS\n";
echo "\n";
$rs->moveNext();
}
echo "#END DOMAINS LIST\n";
}
$count_query2 = "
SELECT
COUNT(`alias_id`) AS cnt2
FROM
`domain_aliasses`
";
$query2 = "
SELECT
`alias_name`
FROM
`domain_aliasses`
ORDER BY
`alias_id` ASC
LIMIT $start_index, $rows_per_page";
$rs2 = exec_query($sql, $count_query2);
$records_count2 = $rs2->fields['cnt2'];
$rs2 = exec_query($sql, $query2);
if ($rs2->rowCount() == 0) {
echo "#NO ALIASES LISTED";
} else {
echo "#$records_count2 ALIASES LISTED ON $cfg->SERVER_HOSTNAME [$cfg->BASE_SERVER_IP]\n";
while (!$rs2->EOF){
echo "zone:\n";
echo "\tname: \"".$rs2->fields['alias_name']."\"\n";
echo "\tzonefile: \"slave/".$rs2->fields['alias_name']."\"\n";
echo "\toutgoing-interface: $SECONDARY_DNS_IP\n";
echo "\tallow-notify: $cfg->BASE_SERVER_IP TRANSFERS\n";
echo "\trequest-xfr: AXFR $cfg->BASE_SERVER_IP TRANSFERS\n";
echo "\n";
$rs2->moveNext();
}
echo "#END ALIASES LIST\n";
}
?>
Main NSD3 config (zonefile generated by script above, is included in main NSD3 conf file):
Code:
# cat /usr/local/etc/nsd/nsd.conf
server:
ip-address: 5.6.7.8
identity: "DNS"
hide-version: yes
ip4-only: yes
database: "/var/db/nsd/nsd.db"
identity: "unidentified server"
logfile: "/var/log/nsd.log"
server-count: 1
tcp-count: 10
tcp-query-count: 0
pidfile: "/var/run/nsd/nsd.pid"
port: 53
statistics: 3600
username: bind
zonesdir: "/usr/local/etc/nsd"
difffile: "/var/db/nsd/ixfr.db"
xfrdfile: "/var/db/nsd/xfrd.state"
xfrd-reload-timeout: 10
verbosity: 0
include: "/usr/local/etc/nsd/nsd.slaves.conf"
key:
name: "TRANSFERS"
algorithm: hmac-md5
secret: "6alK9JEHMqH/ZDpFHtlstg=="
Cron job to update zonefile "/usr/local/etc/nsd/nsd.slaves.conf":
Code:
*/30 * * * * root /usr/local/etc/nsd/update-nsd.sh > /dev/null
Script "/usr/local/etc/nsd/update-nsd.sh":
Code:
#!/bin/sh
RCDIR=/usr/local/etc/rc.d
EXECS=/usr/local/bin
SEXEC=/usr/local/sbin
NSDDIR=/usr/local/etc/nsd
${EXECS}/wget -q --bind-address=5.6.7.8 http://1.2.3.4/domain/index.php \
-O ${NSDDIR}/nsd.slaves.conf && ${RCDIR}/nsd stop && ${SEXEC}/nsdc rebuild \
&& ${RCDIR}/nsd start && ${SEXEC}/nsdc patch && /usr/bin/logger "ispCP: Backup zones updated."