Hallo,
ich hatte euch schon desöfteren Berichtet, dass wir nach dem Updaten von bestimmten Kunden nicht mehr den bind9 in Kombination von Samba4 verwenden können, da wir ewig lange Antwortzeiten erhalten.
Ich habe das ganze nun auf einem Testsystem reproduzieren können.
1.) Man setzt ein Testsystem mit UCS3.0.2 und Samba4 auf.
2.) Man startet folgendes Skript:
[code]
eval ucr shell
function randpass() {
CHAR=“a-z”
cat /dev/urandom | tr -cd “$CHAR” | head -c ${1:-32}
}
function getReverseZoneName {
ip="$1"
subnet=""
if [ "`echo $ip | cut -d "." -f 1`" != "" ]; then
subnet="`echo $ip | cut -d "." -f 1`"
fi
if [ "`echo $ip | cut -d "." -f 2`" != "" ]; then
subnet="`echo $ip | cut -d "." -f 2`.$subnet"
fi
if [ "`echo $ip | cut -d "." -f 3`" != "" ]; then
subnet="`echo $ip | cut -d "." -f 3`.$subnet"
fi
if [ "`echo $ip | cut -d "." -f 4`" != "" ]; then
subnet="`echo $ip | cut -d "." -f 4`.$subnet"
fi
echo -n "$subnet.in-addr.arpa"
}
function addUser {
username="$1"
lastname="$2"
password="$3"
udm users/user create --position="cn=users,$ldap_base" --set username=$username --set lastname=$lastname --set password=$password
}
function removeUser {
username="$1"
udm users/user remove --dn="uid=$username,cn=users,$ldap_base"
}
function addGroup {
name="$1"
udm groups/group create --position="cn=groups,$ldap_base" --set name=$name
}
function removeGroup {
name="$1"
udm groups/group remove --dn="cn=$name,cn=groups,$ldap_base"
}
function addForwardZone {
dnsName="$1"
udm dns/forward_zone create --position="cn=dns,$ldap_base" --set zone=$dnsName --set nameserver="$hostname.$domainname."
}
function removeForwardZone {
dnsZone="$1"
udm dns/forward_zone remove --dn="zoneName=$dnsZone,cn=dns,$ldap_base"
}
function addReverseZone {
ip="$1"
udm dns/reverse_zone create --position="cn=dns,$ldap_base" --set subnet=$ip --set nameserver="$hostname.$domainname."
}
function removeReverseZone {
ip="$1"
udm dns/reverse_zone remove --dn="zoneName=`getReverseZoneName $ip`,cn=dns,$ldap_base"
}
function addHostRecord {
dnsZone="$1"
host="$2"
ip="$3"
udm dns/host_record create --superordinate="zoneName=$dnsZone,cn=dns,$ldap_base" --set name=$host --set a=$ip
}
function addPtrRecord {
zoneIp="$1"
ip="$2"
host="$3"
udm dns/ptr_record create --superordinate="zoneName=`getReverseZoneName $zoneIp`,cn=dns,$ldap_base" --set address=$ip --set ptr_record=$host
}
function removeHostRecord {
dnsZone="$1"
host="$2"
udm dns/host_record remove --superordinate="zoneName=$dnsZone,cn=dns,$ldap_base" --dn="relativeDomainName=$host,zoneName=$dnsZone,cn=dns,$ldap_base"
}
function removePtrRecord {
zoneIp="$1"
ip="$2"
udm dns/ptr_record remove --dn="relativeDomainName=$ip,zoneName=`getReverseZoneName $zoneIp`,cn=dns,$ldap_base" --superordinate="zoneName=`getReverseZoneName $zoneIp`,cn=dns,$ldap_base"
}
forward_zones=“firstzone.local,tom.local,office.local,vienna.local,secret.local,phone.local,switch.local,servers.local,calc.local,manyzones.local,krems.local,city.local,ucs.local,vm.local,link.local”
reverse_zones=“192.168.100,192.168.101,192.168.102,192.168.103,192.168.104,192.168.105,192.168.106,192.168.107,192.168.108,192.168.109,192.168.110,192.168.111,192.168.112,192.168.113,192.168.114”
for i in {1…15}
do
addForwardZone “echo $forward_zones | cut -d "," -f $i
” “$hostame.$domainname”
done
for i in {1…15}
do
addReverseZone “echo $reverse_zones | cut -d "," -f $i
” “$hostame.$domainname”
done
while [ true ]; do
username="`randpass 15`"
addUser "$username" "$username" "MeinPW12345"
if [ "`echo $(($RANDOM%15))`" != "10" ]; then
removeUser "$username"
fi
group="`randpass 15`"
addGroup "$group"
if [ "`echo $(($RANDOM%15))`" != "10" ]; then
removeGroup "$group"
fi
a="`echo $(($RANDOM%14+1))`"
b="`echo $(($RANDOM%14+1))`"
forward="`echo $forward_zones | cut -d "," -f $a `"
reverse="`echo $reverse_zones | cut -d "," -f $b `"
hostc="`randpass 15`"
ptr="`echo $(($RANDOM%253+1))`"
addHostRecord "$forward" "$hostc" "$reverse.$ptr"
addPtrRecord "$reverse" "$ptr" "$hostc.$forward."
if [ "`echo $(($RANDOM%15))`" != "10" ]; then
removeHostRecord "$forward" "$hostc"
fi
if [ "`echo $(($RANDOM%15))`" != "10" ]; then
removePtrRecord "$reverse" "$ptr"
fi
done[/code]
Dieses Skript erstellt in einer Schleife Benutzer / Gruppen / DNS Einträge, und löscht diese auch teilweiße wieder.
Man lässt dieses Skript so lange laufen, bis der uSNChanged / uSNCreated bei etwa ~80000 liegt (waren bei mir rund 4 Stunden, war aber ein langsames System ;)).
Dann bricht man das Skript ab, und wartet, bis der s4-connector alles ins AD gesynct hat.
DNS funktioniert nun noch korrekt. Jetzt startet man das Update auf 3.1. Nach dem Update Rechner neu starten, und nun funktioniert der DNS mit bind nur mehr sehr langsam!
Der startup vom bind dauert schon rund 25 Sekunden bei 20 Zonen!
DNS Abfrage (nach startup vom bind):
[code]root@dnstest:~# dig xcmcctbghqnksnw.krems.local @192.168.1.22
; <<>> DiG 9.8.0-P4 <<>> xcmcctbghqnksnw.krems.local @192.168.1.22
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36114
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;xcmcctbghqnksnw.krems.local. IN A
;; ANSWER SECTION:
xcmcctbghqnksnw.krems.local. 900 IN A 192.168.101.45
;; AUTHORITY SECTION:
krems.local. 900 IN NS dnstest.dns.local.
;; ADDITIONAL SECTION:
dnstest.dns.local. 900 IN A 192.168.1.22
;; Query time: 1626 msec
;; SERVER: 192.168.1.22#53(192.168.1.22)
;; WHEN: Thu Jan 10 11:42:58 2013
;; MSG SIZE rcvd: 103[/code]
1600ms!
Stoppe ich nun den bind, und setze samba4 als dns server:
server services = +dns -smb +s3fs -nbtd
So erhalte ich Antwortzeiten von 0-1ms!
[code]root@dnstest:~# dig xcmcctbghqnksnw.krems.local @192.168.1.22
; <<>> DiG 9.8.0-P4 <<>> xcmcctbghqnksnw.krems.local @192.168.1.22
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33184
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;xcmcctbghqnksnw.krems.local. IN A
;; ANSWER SECTION:
xcmcctbghqnksnw.krems.local. 900 IN A 192.168.101.45
;; Query time: 0 msec
;; SERVER: 192.168.1.22#53(192.168.1.22)
;; WHEN: Thu Jan 10 11:24:33 2013
;; MSG SIZE rcvd: 61[/code]
Daher stellt sich nun die Frage, warum reagiert bind nun so langsam!!!
Ich lade gerade das qcow2 Image auf unserem FTP Server (sollte bis 13 Uhr fertig hochgeladen sein, ist 5,9GB groß):
ftp.siedl.net/dnstest-0.qcow2
root Passwort: 12345