====== Installation ====== Install Bind, webserver with PHP and MySQL. For example on Debian: lighttpd php5-cgi mysql-server php5-mysql bind9 ===== DNS ===== Convince someone to forward a NS subdomain to you. For example: dyn IN A your.ip.address d IN NS dyn ===== Configure Bind ===== You need to configure a zone. If you don't have any, you can use example config files * named.conf.local - zone inclusion * zones.foo.master - zone specification * d.brmlab.cz - example zone (of course change it to your needs) After configuration, your nameserver should be able to respond to "A ahoj.d.brmlab.cz." query. We need to generate a user key that we will sign the updates with (with this you can also securely update a remote DNS server). dnssec-keygen -a HMAC-SHA1 -b 160 -n USER some.email.address. Two files are generated, K*key and K*private. Take the key from the *key one and put it to zone declaration (zones.foo.master in our case) ===== Configure dynamic updater ===== Put scripts from the shell/ directory somewhere. Edit config.sh. Try update with echo test a 9.10.11.12 | bash -x bind_update.sh. You should be then able to resolve "A test.your.domain." to 9.10.11.12. On Debian I had a problem that the /etc/bind directory was not owned by the user under which bind is running, so bind was unable to perform the update ===== Some security ===== The key should not be world-readable. You can create a separate user, chown & chmod 600 the key and all the scripts and then use the example sudoers file to run the update under that user. ===== Web frontend ===== Create a MySQL database. I use [[http://www.adminer.org/|Adminer]] GUI, but if you want to go with the command line, it will be something like this CREATE DATABASE `kiviak`; CREATE USER 'kiviak'@'localhost' IDENTIFIED BY PASSWORD 'XXXYYY'; GRANT ALL PRIVILEGES ON `kiviak`.* TO 'kiviak'@'localhost'; Then execute schema.sql to create the table. Point your webserver to files in web/ folder. These files don't have to be writable by the webserver. Edit config.php to reflect your environment. Enjoy. ===== Misc. ===== The delete.php script deletes hostnames that have not been updated for more than a month. You can add it to your crontab.