powerDNS antwortet grundsätzlich mit SERVFAIL

Artimis

Registered User
Ich möchte gerne von meinem Bind9, welches ich durch ein paar eigenen Scripts notdürftig dynamisch hinbekommen habe, auf poerDNS umsteigen, um auch Scriptgenerierte Antworten nutzen zu können, da ich gerne ein paar /64-Subnets vollständig auflösen können möchte, woran Bind9 kläglich scheitert.

Also flugs pdns-server, pdns-backend-mysl, pdns-backend-bind und pdns-backend-pipe aufgesetzt und klein angefangen:

Zunächst sollen die alten Bind-Zonen laufen.
Dafür habe ich das bind-backend aktiviert und eine Abfrage einer unter Bind9 laufenden Domain ("abc.test") ausprobiert:
Code:
launch=bind

# Bind-Files:
bind-config=/etc/bind/named.conf
bind-check-interval=180
Code:
dig @127.0.0.1 -p 54 any abc.test

; <<>> DiG 9.7.2-P2 <<>> @127.0.0.1 -p 54 any abc.test
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 32206
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;abc.test.                         IN      ANY

;; Query time: 3 msec
;; SERVER: 127.0.0.1#54(127.0.0.1)
;; WHEN: Sun Dec 19 13:29:43 2010
;; MSG SIZE  rcvd: 23
Im daemon.log erscheint folgendes:
Code:
Not authoritative for 'abc.test', sending servfail to 127.0.0.1 (recursion was desired)

Gleiches für mySQL:
Code:
launch=gmysql

# gmysql:
gmysql-host=localhost
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=**********
Selbes Ergebnis (obwohl die Domain natrlich ordnungsgemäß in die DB eingepflegt wurde), nur, dass ein Eintrag in der daemon.log hinzukommt:
Code:
gmysql Connection succesful

Der Parameter "bind-example-zones" wurde schlauerweise für meine Version deaktiviert und lässt den Daemon beim Start crashen.

Hier noch einmal meine komplette Config:
Code:
#################################
# allow-axfr-ips    If enabled, restrict zonetransfers to originate from these
#                   IP addresses
#
# allow-axfr-ips=

#################################
# allow-recursion       List of netmasks that are allowed to recurse
#
# allow-recursion=0.0.0.0

#################################
# allow-recursion-override   Local data even about hosts that don't exist will
#                            override the internet. (on/off)
#
# allow-recursion-override=on

#################################
# cache-ttl     Seconds to store packets in the PacketCache
#
# cache-ttl=20

#################################
# chroot        If set, chroot to this directory for more security
#
# chroot=/var/spool/powerdns

#################################
# config-dir    Location of configuration directory (pdns.conf)
#
config-dir=/etc/powerdns

#################################
# config-name   Name of this virtual configuration - will rename the binary image
#
# config-name=

#################################
# control-console       Debugging switch - don't use
#
control-console=yes

#################################
# daemon        Operate as a daemon
#
#daemon=yes

#################################
# default-soa-name      name to insert in the SOA record if none set in the backend
#
default-soa-name=mein.host.tld

#################################
# disable-axfr  Disable zonetransfers but do allow TCP queries
#
disable-axfr=yes

#################################
# disable-tcp   Do not listen to TCP queries
#
# disable-tcp=no

#################################
# distributor-threads   Default number of Distributor (backend) threads to start
#
# distributor-threads=3

#################################
# fancy-records Process URL and MBOXFW records
#
# fancy-records=no

#################################
# guardian      Run within a guardian process
#
guardian=yes

#################################
# launch        Which backends to launch and order to query them in
#
launch=bind,gmysql

# Bind-Files:
bind-config=/etc/bind/named.conf
bind-check-interval=180

# gmysql:
gmysql-host=localhost
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=**********

#################################
# lazy-recursion        Only recurse if question cannot be answered locally
#
lazy-recursion=yes

#################################
# load-modules  Load this module - supply absolute or relative path
#
# load-modules=

#################################
# local-address Local IP address to which we bind
#
local-address=0.0.0.0

#################################
# local-ipv6    Local IP address to which we bind
#
#local-ipv6=::

#################################
# local-port    The port on which we listen
#
local-port=54

#################################
# log-dns-details       If PDNS should log failed update requests
#
# log-dns-details=

#################################
# log-failed-updates    If PDNS should log failed update requests
#
# log-failed-updates=

#################################
# logfile       Logfile to use
#
logfile=/var/log/pdns.log

#################################
# logging-facility      Log under a specific facility
#
# logging-facility=

#################################
# loglevel      Amount of logging. Higher is more. Do not set below 3
#
# loglevel=4

#################################
# master        Act as a master
#
# master=no

#################################
# max-queue-length      Maximum queuelength before considering situation lost
#
# max-queue-length=5000

#################################
# max-tcp-connections   Maximum number of TCP connections
#
# max-tcp-connections=10

#################################
# module-dir    Default directory for modules
#
module-dir=/usr/lib/powerdns

#################################
# negquery-cache-ttl    Seconds to store packets in the PacketCache
#
# negquery-cache-ttl=60

#################################
# out-of-zone-additional-processing     Do out of zone additional processing
#
# out-of-zone-additional-processing=no

#################################
# query-cache-ttl       Seconds to store packets in the PacketCache
#
# query-cache-ttl=20

#################################
# query-logging Hint backends that queries should be logged
#
# query-logging=no

#################################
# queue-limit   Maximum number of milliseconds to queue a query
#
# queue-limit=1500

#################################
# query-local-address   The IP address to use as a source address for sending
#                       queries.
# query-local-address=

#################################
# receiver-threads      Number of receiver threads to launch
#
# receiver-threads=1

#################################
# recursive-cache-ttl   Seconds to store packets in the PacketCache
#
recursive-cache-ttl=30

#################################
# recursor      If recursion is desired, IP address of a recursing nameserver
#
# recursor=

#################################
# setgid        If set, change group id to this gid for more security
#
setgid=pdns

#################################
# setuid        If set, change user id to this uid for more security
#
setuid=pdns

#################################
# skip-cname    Do not perform CNAME indirection for each query
#
# skip-cname=no

#################################
# slave Act as a slave
#
# slave=no

#################################
# slave-cycle-interval  Reschedule failed SOA serial checks once every .. seconds
#
# slave-cycle-interval=60

#################################
# smtpredirector        Our smtpredir MX host
#
# smtpredirector=a.misconfigured.powerdns.smtp.server

#################################
# soa-minimum-ttl       Default SOA mininum ttl
#
soa-minimum-ttl=180

#################################
# soa-refresh-default  Default SOA refresh
#
soa-refresh-default=3600

#################################
# soa-retry-default    Default SOA retry
#
soa-retry-default=180

#################################
# soa-expire-default   Default SOA expire
#
soa-expire-default=604800

#################################
# soa-serial-offset     Make sure that no SOA serial is less than this number
#
# soa-serial-offset=0

#################################
# socket-dir    Where the controlsocket will live
#
socket-dir=/var/run

#################################
# strict-rfc-axfrs      Perform strictly rfc compliant axfrs (very slow)
#
# strict-rfc-axfrs=no

#################################
# urlredirector Where we send hosts to that need to be url redirected
#
# urlredirector=127.0.0.1

#################################
# use-logfile   Use a log file
#
# use-logfile=yes

#################################
# webserver     Start a webserver for monitoring
#
# webserver=no

#################################
# webserver-address     IP Address of webserver to listen on
#
# webserver-address=127.0.0.1

#################################
# webserver-password    Password required for accessing the webserver
#
# webserver-password=

#################################
# webserver-port        Port of webserver to listen on
#
# webserver-port=8081

#################################
# webserver-print-arguments     If the webserver should print arguments
#
# webserver-print-arguments=no

#################################
# wildcard-url  Process URL and MBOXFW records
#
# wildcard-url=no

#################################
# wildcards     Honor wildcards in the database
#
# wildcards=

#################################
# version-string   What should PowerDNS return for version
#                  allowed methods are anonymous / powerdns / full / custom
version-string=powerdns

include=/etc/powerdns/pdns.d


Es wäre cool, wenn mir da jemand helfen könnte!

Vielen Dank im Voraus!
Liebe Grüße,
Artimis
 
Was willst Du erreichen, einen authoritativen DNS für abc.test oder einen rekursiven DNS für Dein System?

Im ersteren Fall mußt Du die Zone abc.test in der SQL-Datenbank überhaupt erstmal anlegen - das scheint bisher nicht der Fall zu sein.

Im zweiten Fall mußt Du rekursive Abfragen erlauben, entweder global (nicht empfehlenswert) oder mindestens für die von Dir verwendeten IPs (im Beispiel also Localhost 127.0.0.1).
 
Hallo Whistler!
Danke für deine Antwort.

Was willst Du erreichen, einen authoritativen DNS für abc.test oder einen rekursiven DNS für Dein System?
Sowohl als auch. Bisher verwendete ich meine NameServer sowohl für rekursive Abfragen ohne Zensur und NXDOMAIN-Manipulation auf eigene Suchseiten als auch für autoritative Antworten für offiziell nicht existente TLDs wie .link, .lan und dergleichen (und für das Überschreiben von solchem illegalen Schmodder wie Google Analytics).

Im ersteren Fall mußt Du die Zone abc.test in der SQL-Datenbank überhaupt erstmal anlegen - das scheint bisher nicht der Fall zu sein.
Die Zone abc.test ist sowohl in die Datenbank eingepflegt (inklusive gültigem SOA-Record und einem A-Record) als auch in einer mit Bind9 problemlos funktionierenden Zonefile vorhanden. Testweise habe ich natürlich nur eines der Backends gleichzeitig probiert wie auch beide gleichzeitig.

Im zweiten Fall mußt Du rekursive Abfragen erlauben, entweder global (nicht empfehlenswert) oder mindestens für die von Dir verwendeten IPs (im Beispiel also Localhost 127.0.0.1).
Um Recursion wollte ich mich anschließend kümmern, sobald der pdns-Server überhaupt etwas auflöst. Wobei ich mir noch nicht im Klaren bin, ob meine NameServer selbst vollständig auflösen oder an die jeweils gültigen NameServer, angefangen bei den root-Servern, deligieren sollen.

Aber vorerst soll abc.test einfach aufgelöst werden, wie ich es in der mit Bind9 funktionierenden Bind-Zone durch das Bind-Backend wie auch durch die angelegten Einträge beim mySQL-Server durch das gmysql-Backend konfiguriert habe. Jedoch klappt eben beides nicht.
 
Last edited by a moderator:
Nachtrag:

Ich habe das mySQL-Backend zum Laufen gebracht. Der Fehler war recht einfach: pDNS weiß anscheinend nicht, was ein FQDN überhaupt ist. Folglich schließt er Domains nicht mit einem Punkt zum Top-Level ab und löst sämtliche Records absolut auf. Auch das "@" als Origin kennt er anscheinend nicht, obwohl er ja Bind-kompatibel sein sollte.

Statt also in der Zone abc.test ganz selbstverständlich eine Subdomain nach dem Schema "Domain_ID: 1, Name: www, Type: A, Content: 88.88.88.88" anzulegen, ist jedes Mal der volle Domain-Name, jedoch ohne abschließenden Punkt, erforderlich. Es wird nicht relativ zur Zone aufgelöst sondern absolut (bzw. relativ zur Top-Zone).



Ich glaube, das reicht mir auch schon mit dem DNS-Server.
Ich brauche eigentlich keine Software, die ihre eigene Materie nicht richtig versteht.
Dann lieber beim unflexiblen Bind9 bleiben, aber standardkomform arbeiten können.


Denn spätestens beim nächsten Schritt, nämlich den Server anzuweisen, die root-Zone an die root-Server zu deligieren, würde der pDNS kläglich scheitern. Denn er kennt ja keine root-Zone (".").



=> To be closed...



EDIT:
Schlagt mich, ich habe jetzt quasi die unsauberste Lösung überhaupt gebaut:
Server A hostet ein Bind9 auf Port 53 und einen pDNS auf Port 54.
Server B hostet nur einen Bind9 auf Port 53, tunnelt aber per SSH den TCP-54 zu Server A.
Der pDNS horcht nur auf 127.0.0.1:54 und beantwortet nur wenige Zonen.
Die beiden Bind9-Server nutzen Forward-Zonen auf den Localhost, Port 54.

Somit habe ich die bewährte Standardkomformität von Bind9 mit den Features von pDNS wie schnelle Änderungen per SQL (wobei mein Bind auch schon dynamisch generierte Zonefiles aus einer mySQL-DB bezieht) und vor allem dem Pipe-Webend unter einer Haube. Der pDNS-Server braucht nicht redundant zu laufen, der hostet keine sehr wichtigen Zonen. Wobei ich noch mit dem Gedanken spiele, auch Server B einen pDNS mit einer Replikation der DB von Server A zu verpassen. Mal schauen.
 
Last edited by a moderator:
Back
Top