In de meegeleverde 'example-directory' staan tal van goede suggesties voor mogelijke toepassingen. De voorbeeldprogramma's zijn niet alleen leerzaam, maar ook dusdanig nuttig dat sommige Linux-distributies ze als een apart package aanbieden (bij Debian/Ubuntu heet dat package 'ldns-utils').
Ook bij SIDN maken we regelmatig gebruik van de handige voorbeeldprogramma's. Onze grote favoriet is misschien wel het relatief onbekende en ondergewaardeerde 'ldns-dpa'. Een heel leuk stuk software, waarmee supereenvoudig de fraaiste analyses op DNS-verkeer te maken zijn.
Voorbeeld van ‘ldns-dpa’:
ldns-dpa -u qtype -p dns-dump.pcap
Packets that are not IP: 0
bad dns packets: 124
arp packets: 0
udp packets: 9459054
tcp packets (skipped): 18200
reassembled fragmented packets: 0
packet fragments lost: 0
Total number of DNS packets: 9458930
Total number of DNS packets after filter: 9458930
qtype = '': 493 (0.01%)
qtype = 'A': 5448014 (57.60%)
qtype = 'A6': 2655 (0.03%)
qtype = 'AAAA': 871316 (9.21%)
qtype = 'ANY': 6980 (0.07%)
qtype = 'CNAME': 663 (0.01%)
qtype = 'DLV': 136 (0.00%)
qtype = 'DS': 72 (0.00%)
qtype = 'MX': 2015921 (21.31%)
qtype = 'NAPTR': 897 (0.01%)
qtype = 'NS': 10042 (0.11%)
qtype = 'PTR': 1014883 (10.73%)
qtype = 'SOA': 9047 (0.10%)
qtype = 'SPF': 1475 (0.02%)
qtype = 'SRV': 41704 (0.44%)
qtype = 'TXT': 33874 (0.36%)
qtype = 'TYPE0': 758 (0.01%)
Maar ook de DNSSEC-gerelateerde voorbeelden uit de example-directory weten we bij SIDN op waarde te schatten. Als we desondanks nog bepaalde functionaliteit missen, is daar eenvoudig in te voorzien door zelf iets te programmeren met behulp van LDNS. Zo hebben we een aantal Nagios-plugins geschreven, onder andere om de juistheid van DNSSEC-parameters in de .nl-zone te kunnen monitoren.
Over DNSSEC gesproken: sinds LDNS v1.6.10 (uitgekomen op 31 mei 2011) bevat de collectie meegeleverde voorbeelden een nieuwe telg, namelijk: 'ldns-gen-zone'. Deze is gemaakt door SIDN. We schreven hem vorig jaar, ten tijde van de introductie van DNSSEC in de .nl-zone.
Met 'ldns-gen-zone' zijn we in staat om te simuleren hoe onze hard- en software reageert op grote, gesigneerde zonefiles. De tool stelt ons in staat om een bestaande zonefile (we gebruikten hiervoor uiteraard de .nl-zonefile) te vergroten en te voorzien van een bepaald percentage DS-records. Zodoende kunnen we zonefiles genereren van elke gewenste grootte en met elk gewenst percentage DS records. Er bestaan weliswaar scripts die ongeveer hetzelfde doen, maar het resultaat daarvan is in onze ogen onvoldoende representatief voor de echte situatie. Ze genereren bijvoorbeeld domeinnamen volgens een vast patroon en van gelijke lengte, terwijl 'ldns-gen-zone' een bestaande zonefile als basis neemt, met alle variatie van dien. Daarnaast genereren de bestaande tools dikwijls allemaal dezelfde DS records, terwijl 'ldns-gen-zone' unieke DS records maakt. Dergelijke variatie maakt de test-zonefile in onze ogen veel realistischer.
Het aanmaken van een zonefile voor testdoeleinden gaat met behulp van 'ldns-gen-zone' heel simpel. Stel we willen 'zonefile.txt' uitbreiden met twee miljoen willekeurige domeinnamen en 50% DS-records, dan volstaat het volgende commando:
ldns-gen-zone -a 2000000 -p 50 -s ./zonefile.txt
Waarbij zonefile.txt een (minimale) zonefile is, bijvoorbeeld:
tld. 7200 IN SOA ns1.example.net. hostmaster.nic.tld. (
2011060605 ; serial
7200 ; refresh (2 hours)
900 ; retry (15 minutes)
2419200 ; expire (4 weeks)
900 ; minimum (15 minutes)
)
tld. 172800 IN NS ns4.example.net.
tld. 172800 IN NS ns3.example.net.
tld. 172800 IN NS ns1.example.net.
tld. 172800 IN NS ns2.example.net.
tld. 7200 IN TXT "tld DNSSEC test zone"
tld. 3600 IN NSEC3PARAM 1 0 5 DEADBEAFDEADBEAF
Een compleet voorbeeld is bijvoorbeeld:
ldns-gen-zone -a 2000000 -p 50 -s ./zonefile.txt > out.txt
named-compilezone -i none -s relative -o result.txt tld ./out.txt
Waarbij we de 'named-compilezone' utility van BIND gebruiken voor een fraai eindresultaat.
Merk op dat de kunstmatig gegenereerde domeinnamen beginnen met 'xn--', een tekenreeks die normaal alleen gebruikt wordt voor IDN's. Aangezien IDN's niet voorkomen in de .nl-zone, weten we daardoor zeker dat er nooit sprake kan zijn van dubbele domeinnamen.
Met behulp van 'ldns-gen-zone' heeft SIDN vorig jaar diverse tests uitgevoerd op haar DNS-systemen om te zien hoe ze schalen en hoe ze zich gedragen onder extreme omstandigheden. Dat hielp ons bij het bepalen van de impact van de introductie van DNSSEC. Hierbij hebben we samengewerkt met NLnetLabs, die over het onderzoek een rapport hebben gepubliceerd.
De ontwikkelaars van LDNS vonden 'ldns-gen-zone' dermate bruikbaar, dat ze deze hebben toegevoegd aan de toch al imposante verzameling van voorbeeldprogramma's. En dat is natuurlijk leuk nieuws.
LDNS (1.6.10) is te vinden op: http://www.nlnetlabs.nl/projects/ldns/
'ldns-gen-zone' staat hier: http://www.nlnetlabs.nl/svn/ldns/tags/release-1.6.10/examples/