DNS filesystem

March 2, 2008

linux

I’ve reworked my older DNS filesystem Perl script to make something nicer. It’s still not perfect, but works much better.

You can now cat files for instance. The filesizes are something that should also be fixed, if set them to 512 bytes.

From a DNS standpoint some other things can be improved. Right now everything is shown from a zone (everything that can be discovered that is), however this also includes glue…

To get this running you’ll need FUSE (should be installed if you run Linux) and Perl with the Perl Fuse module installed. I’m running Ubuntu Gutsy and everything could be installed very easily.

Furthermore you’ll need two files, a Fdns.pm module and a fdns.pl Perl script. Place both in a directory and type:

mkdir theworld
./fdns theworld

Now the world of DNS is mounted on theworld. Now you can do the following:

$ cd theworld
$ ls
# this might take a WHILE!!!!
...
eu/                  ns2.undp.org             utama.bolnet.bo
eur1.nipr.mil        ns2.univie.ac.at         uucp-gw-1.pa.dec.com
eur2.nipr.mil        ns2.uz                   uucp-gw-2.pa.dec.com
euro-ns1.cw.net      ns2.yemen.net.ye         uy/
euro-ns2.cw.net      ns2.zamnet.zm            uz/
euro-ns3.cw.net      ns3.aalnet.net           va/
euterpe.william.org  ns3.arnes.eu             vc/
f5.nstld.com         ns3-auth.sprintlink.net  ve/
...

This is part of the root zone, you see the eu delegation, so that is a directory. There is also a nl directory in there. Let go there:

$ cd nl
$ ls
@

So nl doesn’t do axfr and all that could be discovered is contained in the file @. Lets check that one out:

$ cat @
nl.  5988  IN SOA ns.domain-registry.nl. postmaster.domain-registry.nl. (
                  2008030205      ; Serial
                  7200    ; Refresh
                  900     ; Retry
                  2419200 ; Expire
                  900 )   ; Minimum TTL
nl.     85188   IN      NS      ns3.nic.nl.
nl.     85188   IN      NS      ns4.nic.nl.
nl.     85188   IN      NS      ns-ext.isc.org.
nl.     85188   IN      NS      ns-nl.nic.fr.
nl.     85188   IN      NS      ns.domain-registry.nl.
nl.     85188   IN      NS      ns2.nic.nl.
nl.     85188   IN      NS      nl1.dnsnode.net.

This is the SOA record for nl. Lets see if there any funny delegations:

$ cd fghjfhfjdhdj
cd: no such file or directory: fghjfhfjdhdj

Nope, that one does not exists, maybe there are funny names?

$ cat fjhfdjfd  
cat: fjhfdjfd: No such file or directory

Nope. Okay, why not descend into some directory I know should be there.

$ cd miek
$ ls
@  a  localhost  www
$ cat a
a.miek.nl.      3600    IN      A       192.168.1.2
$ cat www
www.miek.nl.    3600    IN      CNAME   a.miek.nl.

So every file has the name of a label, and the contents are RRs who have that label. Esp. funny are zones with wildcards *, as you can cat any name you wish.

color output of ls

It’s wise to disable that when you are roaming around in this filesystem. As every discovered name is statted, which means another DNS lookup.

Feedback

Comments and patches are welcome.

None