[Pdns-users] Need help with PowerDNS Remote HTTP Backend

Aleksey Chudov aleksey.chudov at gmail.com
Fri Jan 8 09:42:06 UTC 2016


Hi,

I'm trying to implement simple PowerDNS Remote HTTP Backend in Python.
Below is test code just like
https://doc.powerdns.com/md/authoritative/backend-remote/#scenario-soa-lookup-with-http-connector


import BaseHTTPServer

REPLY = """{
  "result":
   [
     { "qtype": "SOA",
       "qname": "example.com",
       "content": "dns1.icann.org. hostmaster.icann.org. 2012080849 7200
3600 1209600 3600",
       "ttl": 3600,
       "domain_id": -1
     }
   ]
}"""

class HTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/dns/lookup/example.com/SOA':
            self.send_response(200)
            self.send_header('Content-Type', 'text/javascript;
charset=utf-8')
            self.end_headers()
            self.wfile.write(REPLY + '\r\n')
        else:
            self.send_error(501)

if __name__ == '__main__':
    server = BaseHTTPServer.HTTPServer(('127.0.0.1', 8080),
HTTPRequestHandler)
    server.serve_forever()


Looks pretty simple. And curl shows the result.


# curl -i http://127.0.0.1:8080/dns/lookup/example.com/SOA
HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.5
Date: Fri, 08 Jan 2016 09:24:54 GMT
Content-Type: text/javascript; charset=utf-8

{
  "result":
   [
     { "qtype": "SOA",
       "qname": "example.com",
       "content": "dns1.icann.org. hostmaster.icann.org. 2012080849 7200
3600 1209600 3600",
       "ttl": 3600,
       "domain_id": -1
     }
   ]
}

And Python script prints

127.0.0.1 - - [08/Jan/2016 11:36:31] "GET /dns/lookup/example.com/SOA
HTTP/1.1" 200 -


So, I've installed PoweDNS from CentOS 7 Epel repository

# rpm -qa pdns\*
pdns-3.4.7-1.el7.x86_64
pdns-backend-remote-3.4.7-1.el7.x86_64


And my configuration file contains only the following settings

# grep -Ev '^#|^$' /etc/pdns/pdns.conf
setuid=pdns
setgid=pdns
launch=remote
remote-connection-string=http:url=http://127.0.0.1:8080/dns
cache-ttl=0
negquery-cache-ttl=0
query-cache-ttl=0


But my remote backend does not work!


# dig @127.0.0.1 example.com. SOA

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.1 <<>> @127.0.0.1 example.com. SOA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 5375
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;example.com.                   IN      SOA

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 08 11:38:05 EET 2016
;; MSG SIZE  rcvd: 40


There is no new messages from pdns_server

# systemctl status pdns.service
● pdns.service - PowerDNS Authoritative Server
   Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor
preset: disabled)
   Active: active (running) since Fri 2016-01-08 11:37:50 EET; 18s ago
  Process: 1581 ExecStop=/usr/bin/pdns_control quit (code=exited,
status=0/SUCCESS)
  Process: 1586 ExecStart=/usr/sbin/pdns_server --daemon (code=exited,
status=0/SUCCESS)
 Main PID: 1587 (pdns_server)
   CGroup: /system.slice/pdns.service
           └─1587 /usr/sbin/pdns_server --daemon

Jan 08 11:37:50 localhost pdns[1587]: Listening on controlsocket in
'/var/run/pdns.controlsocket'
Jan 08 11:37:50 localhost systemd[1]: Started PowerDNS Authoritative Server.
Jan 08 11:37:50 localhost pdns[1587]: UDP server bound to 0.0.0.0:53
Jan 08 11:37:50 localhost pdns[1587]: TCP server bound to 0.0.0.0:53
Jan 08 11:37:51 localhost pdns[1587]: PowerDNS Authoritative Server 3.4.7 (
jenkins at autotest.powerdns.com) (C) 2001-2015 PowerDNS.COM BV
Jan 08 11:37:51 localhost pdns[1587]: Using 64-bits mode. Built on
20151108152440 by mockbuild at buildvm-19.phx2.fedoraproject.org, gcc 4.8.3
20140911 (Red Hat 4.8.3-9).
Jan 08 11:37:51 localhost pdns[1587]: PowerDNS comes with ABSOLUTELY NO
WARRANTY. This is free software, and you are welcome to redistribute it
according to the terms of the GPL version 2.
Jan 08 11:37:51 localhost pdns[1587]: Creating backend connection for TCP
Jan 08 11:37:51 localhost pdns[1587]: About to create 3 backend threads for
UDP
Jan 08 11:37:51 localhost pdns[1587]: Done launching threads, ready to
distribute questions


But Python prints

127.0.0.1 - - [08/Jan/2016 11:38:05] "GET /dns/lookup/example.com/SOA
HTTP/1.1" 200 -
127.0.0.1 - - [08/Jan/2016 11:38:05] code 501, message Not Implemented
127.0.0.1 - - [08/Jan/2016 11:38:05] "GET /dns/lookup/com/SOA HTTP/1.1" 501
-
127.0.0.1 - - [08/Jan/2016 11:38:05] code 501, message Not Implemented
127.0.0.1 - - [08/Jan/2016 11:38:05] "GET /dns/lookup//SOA HTTP/1.1" 501 -


Where am I wrong?


Regards,
Aleksey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.powerdns.com/pipermail/pdns-users/attachments/20160108/d854bceb/attachment.html>


More information about the Pdns-users mailing list