Skip to content
This repository has been archived by the owner on Apr 6, 2022. It is now read-only.

endreszabo/pdnsapp

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Deprecation notice

The project is deprecated now and this repo has been archived. I moved to CoreDNS which is not only waaay faster, but covers all features pdnsapp had. Ok.. well, almost all. I had to develop some extra coredns plugins to port some niche features anyone would have barely needed on the long run.


pdnsapp

This is a python microframework to help develop DNS-based applications, very much like bottle.py for HTML or lamsonproject for SMTP. It's 'application server' is PowerDNS.

Examples

1. example: myip

The following code will resond with the IP-address of the querying client for myip.end.re:

@match(fqdn='myip.end.re',type='A')
def myip(request):
    return A(data=request['remote-ip'])

2. example: catch-all

Be authoritative for all the zones. It's like wildcards on steroids. Or like PowerDNS superslave being a supermaster instead.

@match(type='SOA')
def catchall(request):
    return SOA("ns0.end.re dnsadm2.end.re %s 10800 3600 604800 3600" % strftime("%Y%m%d%H"))

@match(type='NS')
def catchall(request):
    return [
        NS('ns0.end.re'),
        NS('ns1.end.re'),
    ]   

3. example: geoip

Simple geoip implementation, this one returns differenct IP address for mx0.end.re depending on the client IP address.

from radix import Radix
rtree = Radix()

for subnet in ['192.168.0.0/24', '192.168.1.0/24']:
    rtree.add(subnet)

@match(type='A', fqdn='mx0.end.re')
def geoip(request):
    if rtree.search_best(request['remote-ip']): #if requesting client is in the prefixes listed
        return A('192.168.1.1')
    else:
        return A('44.128.1.1')

4. example: dynamic reverse records

This is for generating reverse (PTR) DNS entries and their forward (A/AAAA) lookup.

About

PowerDNS-based python DNS application microframework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages