For those who want to play with the zone cuts (finding them is
necessary for qname minimisation), here is a simple implementation of
appendix A of draft-ietf-dnsop-qname-minimisation-01:

https://github.com/bortzmeyer/my-IETF-work/blob/master/draft-ietf-dnsop-qname-minimisation/zonecut.go

Implemented in France, so I can safely ignore
<http://datatracker.ietf.org/ipr/2542/> (see
<http://en.wikipedia.org/wiki/Software_patents_under_the_European_Patent_Convention>)

This code implements the "aggressive" strategy (the most
privacy-efficient) of section 2 of
draft-ietf-dnsop-qname-minimisation-01.

Here are some interesting examples. Remember that this ultra-simple
program has no cache at all so it is the equivalent of a cold
resolver. First, a trivial case, www.icann.org:

% ./zonecut -q=1 -v  www.icann.org
Searching 1 for www.icann.org.

Zone cut at "."
Querying type 2 for name org. at server k.root-servers.net
Result for "org.": Referral(s)

Zone cut at "org."
Querying type 2 for name icann.org. at server d0.org.afilias-nst.org.
Result for "icann.org.": Referral(s)

Zone cut at "icann.org."
Querying type 2 for name www.icann.org. at server a.iana-servers.net.
Result for "www.icann.org.": Answer(s)
Querying type 1 for name www.icann.org. at server a.iana-servers.net.
Final result: [www.icann.org.   21600   IN      CNAME   www.vip.icann.org.]



Here, a case where there is a domain which is not a zone (gouv.fr):

% ./zonecut -q=1 -v  www.ssi.gouv.fr
Searching 1 for www.ssi.gouv.fr.

Zone cut at "."
Querying type 2 for name fr. at server k.root-servers.net
Result for "fr.": Referral(s)

Zone cut at "fr."
Querying type 2 for name gouv.fr. at server g.ext.nic.fr.
Result for "gouv.fr.": Referral(s)
Querying type 2 for name ssi.gouv.fr. at server g.ext.nic.fr.
Result for "ssi.gouv.fr.": Referral(s)

Zone cut at "ssi.gouv.fr."
Querying type 2 for name www.ssi.gouv.fr. at server dns1.ssi.gouv.fr.
Result for "www.ssi.gouv.fr.": Referral(s)
Querying type 1 for name www.ssi.gouv.fr. at server dns1.ssi.gouv.fr.
Final result: [www.ssi.gouv.fr. 300     IN      A       213.56.166.109]



This is of course much more common in arpa domains:

% ./zonecut -q=12 -v   
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa 
Searching 12 for 
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.

Zone cut at "."
Querying type 2 for name arpa. at server k.root-servers.net
Result for "arpa.": Answer(s)

Zone cut at "arpa."
Querying type 2 for name ip6.arpa. at server m.root-servers.net.
Result for "ip6.arpa.": Referral(s)

Zone cut at "ip6.arpa."
Querying type 2 for name 2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 1.0.0.2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.1.0.0.2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 6.0.1.0.0.2.ip6.arpa. at server e.ip6-servers.arpa.
Result for "6.0.1.0.0.2.ip6.arpa.": Answer(s)

Zone cut at "6.0.1.0.0.2.ip6.arpa."
Querying type 2 for name 7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name c.7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns3.nic.fr.
Result for "8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Answer(s)

Zone cut at "8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa."
Querying type 2 for name 0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for "0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for "0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for "0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for "0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. 
at server ns2.nic.fr.
Result for "0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for "0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for 
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at server 
ns2.nic.fr.
Result for 
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for 
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 2 for name 
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Result for 
"5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.": 
Referral(s)
Querying type 12 for name 
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa. at 
server ns2.nic.fr.
Final result: 
[5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.8.1.2.2.c.7.6.0.1.0.0.2.ip6.arpa.      
  600     IN      PTR     web01.nic.fr.]




The algorithm may work with broken name servers. Here, the name
servers of www.ratp.fr do not properly reply to NS domains, but the
program does not query them for qtype=NS if it is arrived at the leaf:

% ./zonecut -q=1 -v  www.ratp.fr   
Searching 1 for www.ratp.fr.

Zone cut at "."
Querying type 2 for name fr. at server k.root-servers.net
Result for "fr.": Referral(s)

Zone cut at "fr."
Querying type 2 for name ratp.fr. at server g.ext.nic.fr.
Result for "ratp.fr.": Referral(s)

Zone cut at "ratp.fr."
Querying type 2 for name www.ratp.fr. at server indom30.indomco.fr.
Result for "www.ratp.fr.": Answer(s)

Zone cut at "www.ratp.fr."
Querying type 1 for name www.ratp.fr. at server lbns2.ratp.fr.
Final result: [www.ratp.fr.     30      IN      A       195.200.228.10 
www.ratp.fr.     30      IN      A       195.200.228.170]


On the other hand, it fails here, where a broken name server replies
NXDOMAIN for an ENT:

% ./zonecut -q=1 -v  cdn.cdn-tech.com.c.footprint.net
Searching 1 for cdn.cdn-tech.com.c.footprint.net.

Zone cut at "."
Querying type 2 for name net. at server k.root-servers.net
Result for "net.": Referral(s)

Zone cut at "net."
Querying type 2 for name footprint.net. at server m.gtld-servers.net.
Result for "footprint.net.": Referral(s)

Zone cut at "footprint.net."
Querying type 2 for name c.footprint.net. at server ns105.footprint.net.
Result for "c.footprint.net.": Referral(s)

Zone cut at "c.footprint.net."
Querying type 2 for name com.c.footprint.net. at server D.ns.c.footprint.net.
Error in retrieving the intermediate result: "NXDOMAIN"


You're welcome to test it on many domains and to report interesting
results (you can use the Github issues system
<https://github.com/bortzmeyer/my-IETF-work/issues>)

_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to