A (writable) DNS filesystem
I’ve extended the
DNS filesystem
a bit and added the possibility to
WRITE
to it. This only works for zones which utilize dynamic
updates.
You can now mount the world and write to it!
Also TSIG
should be supported (but I have not tested it - as I’m
lazy). For TSIG
you need a file (named “dynupdate” here with the
following):
# domain tsig-key name key
miek.nl tsig-key awwLOTrFPge+rRKF2+DEiw==
Code is still contained in a single Perl file.
I’ve create a dynamic zone for dyn.miek.nl
, so lets see how it works:
$ ./dns.pl dynupdate theworld # start our filesystem
$ cd NL/MIEK/
$ ls
a mx ns soa txt
$ cat txt
MIEK.NL. 86400 IN TXT "$Hash: edf130d 2010-08-25 08:29:16 +0200 Miek Gieben$"
## So far nothing new
Now lets write:
$ cd DYN
$ ls
a mx ns soa txt
## We have a name: dyn.miek.nl with the following addresses:
$ cat a # show the a-records dyn.miek.nl
DYN.MIEK.NL. 4000 IN A 127.0.0.2
DYN.MIEK.NL. 4000 IN A 127.0.0.1
## Lets add another
$ echo "dyn.miek.nl 4000 IN A 127.0.0.3" > a
$ cat a
DYN.MIEK.NL. 4000 IN A 127.0.0.3
DYN.MIEK.NL. 4000 IN A 127.0.0.2
DYN.MIEK.NL. 4000 IN A 127.0.0.1
It does not really matter what filename you use, because it currently looks only at the content you write.
# adding new name: c.dyn.miek.nl
$ echo "c.dyn.miek.nl 30 IN A 127.0.0.1" > a # note: still "a"
# cat C/a # show the a-record in the directory C
C.DYN.MIEK.NL. 30 IN A 127.0.0.1
#
# Perform an illegal write:
$ echo "miek.nl 30 IN A 127.0.0.1" > a # isn't a dynamic zone
echo: write error: invalid argument
Things you might want to add to this code:
- with
mkdir
create a delegation (easy: just add NS records); - with
rmdir
delete a delegation; - with
unlink
delete records; - Anything else you can think of;
- Again: the code.
Read other posts