Ich habe luebeck.freifunk.net an unseren srv01 beim Chaotikum
delegieren lassen. Somit können wir dort jetzt selber Subdomains
verwalten. Zum ausprobieren habe ich das Skript für die Knotennamen
genommen.
Ich dumpe es mal hier, da ich gerade nicht viel Zeit habe.
Ein kleines Pythonscript erzeugt eine Zonefile:
#!/usr/bin/env python3
import json
import sys
import re
from ipaddress import *
from time import time
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
prefix = IPv6Network('2000::/3')
data = json.load(sys.stdin)
print("""$TTL 600 ; 10 minutes
@ IN SOA srv01.luebeck.freifunk.net. info.luebeck.freifunk.net. (
%i ; serial
600 ; refresh (10min)
30 ; retry (30s)
3600 ; expire (1 hour)
60 ; minimum (1 minute)
)
NS srv01.luebeck.freifunk.net.
""" % time())
HostnameRegex = re.compile(ValidHostnameRegex)
for i in data:
node = data[i]
try:
hostname = node['hostname']
if HostnameRegex.match(hostname) == None:
continue
address = None
for a in node['network']['addresses']:
a = IPv6Address(a)
if a in prefix:
address = a
break
if address:
print("%s\tAAAA\t%s" % (hostname, address))
except:
pass
Und wird regelmäßig als Cronjob aufgerufen, etwa so:
Ich habe das script noch für python 2.7 portiert, ihr müsst nur via pip das module py2-ipaddress installieren.
#!/usr/bin/env python2
import json
import sys
import re
from ipaddress import *
from time import time
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
prefix = IPv6Network('2000::/3')
data = json.load(sys.stdin)
print """$TTL 600 ; 10 minutes
@ IN SOA srv01.luebeck.freifunk.net. info.luebeck.freifunk.net. (
%i ; serial
600 ; refresh (10min)
30 ; retry (30s)
3600 ; expire (1 hour)
60 ; minimum (1 minute)
)
NS srv01.luebeck.freifunk.net.
""" % time()
HostnameRegex = re.compile(ValidHostnameRegex)
for i in data:
node = data[i]
try:
hostname = node['hostname']
if HostnameRegex.match(hostname) == None:
continue
address = None
for a in node['network']['addresses']:
a = IPv6Address(a)
if a in prefix:
address = a
break
if address:
print "%s\tAAAA\t%s" % (hostname, address)
except:
pass