Dies ist ein einfach nutzbarer Dynamic DNS Server unterhalb der Zone dyn.<meine.domain>.
Die Aktualisierung des Eintrags geschieht ganz einfach durch den Aufruf der URL
http://dyn.example.com/dyn?digest=md5sum(HOSTNAME:AUTH)
Es wird (als Default) die absendende IP-Adresse eingetragen, das gilt gleichermassen fuer IPv6 und IPv4.
Wenn man den Parameter &ip=xxxx angibt, wird diese Adresse eingetragen:
Beispiele:
wget -O /dev/null http://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )
wget -O /dev/null http://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )\;ip=127.0.0.1
wget -O /dev/null http://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )\;ip=offline
Der '\' vor dem Semikolon ist notwendig, damit die Shell dieses nicht als Meta-Character interpretiert
Der Dienst selbst ist nicht besonders gesichert, er kann mit SSL verwendet werden:
Beispiele:
wget -O /dev/null --no-check-certificate https://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )
wget -O /dev/null --no-check-certificate https://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )\;ip=127.0.0.1
wget -O /dev/null --no-check-certificate https://dyn.example.com/dyn?digest=$( echo -n HOSTNAME:AUTH | md5sum | awk '{print $1}' )\;ip=offline
angelegt:
// dynamic zone "dyn.example.com" w/ nsupdate & dyn
include "/etc/bind/dyn-key.key";
acl "update-dyn" {
key dyn-key;
};
zone "dyn.example.com" {
type master;
file "/etc/bind/dyn.example.com";
allow-update { update-dyn; };
allow-transfer { xfer-allowed; };
};
// "dyn.example.com" END
rndc reconfig
rndc reload
HOST=dyn
KEYNAME=$HOST-key
dnssec-keygen -a hmac-md5 -b 256 -n host $HOST
awk '/^Key: / { k = $2; exit }
END {
print "key \"'"$KEYNAME"'\" {";
print "\talgorithm hmac-md5;";
print "\tsecret \"" k "\";";
print "};";
}' K$HOST.+*+*.private > $KEYNAME.key
rm K$HOST.+*+*.{key,private}
chmod g+w /etc/bind
/etc/bind/example.com.
dyn IN A 192.0.2.42 dyn IN AAAA 2001:db8::42 dyn.v4 IN A 192.0.2.42 dyn.v6 IN AAAA 2001:db8::42 dyn IN NS ns1.example.com. dyn IN NS ns2.example.com.
rndc reload example.com wget http://www.fischglas.de/software/dyn/dyn -O /var/www/dyn.example.com/htdocs/dyn chmod 755 /var/www/dyn.example.com/htdocs/dyn DOMAIN=example.com mkdir /etc/dyn cat > /etc/dyn/dyn.cfg << EOF DNS.Host: 127.0.0.1 DNS.Key: (secret aus /etc/bind/dyn-key.key ) DNS.Key.Name: dyn-key Authfile: /etc/dyn/dyn.$DOMAIN.auth NSUpdate: /usr/bin/nsupdate Debug: 0 EOF cat >> /etc/dyn/dyn.$DOMAIN.auth << EOF test.dyn.$DOMAIN:$(apg -n 1) EOF # fuer nsupdate: aptitude install dnsutils
/etc/apache2/sites-available/dyn.example.com.conf
ScriptAlias /dyn /var/www/dyn.exaple.com/htdocs/dyn
Dies ist nur erforderlich, falls man einen vorgeschalteten Proxy mit Apache betreibt, und der eigentliche Web-Service auf web01.example.com laeuft.
/etc/apache2/sites-available/proxy.example.com
# forward ip address to "dyn" service if none given
RewriteCond %{HTTP_HOST} '^dyn(|.v4|.v6]).example.com$'
RewriteCond %{REQUEST_URI} ^/dyn$
RewriteCond %{QUERY_STRING} ^digest=[0-9a-f]{32}$
RewriteRule ^/dyn$ http://web01.v6.example.com/dyn?%{QUERY_STRING}&ip=%{REMOTE_ADDR} [P,L]
# redirect "/dyn" to web01.v6 = dyn.example.com
RewriteCond %{HTTP_HOST} '^dyn(|.v4|.v6]).example.com$'
RewriteCond %{REQUEST_URI} ^/dyn$
RewriteRule ^/dyn$ http://web01.v6.example.com/dyn?%{QUERY_STRING} [P,L]
# forward ip address to "dyn" service if none given (legacy)
RewriteCond %{HTTP_HOST} '^example.com$'
RewriteCond %{REQUEST_URI} ^/dyn$
RewriteCond %{QUERY_STRING} ^digest=[0-9a-f]{32}$
RewriteRule ^/dyn$ http://web01.v6.example.com/dyn?%{QUERY_STRING}&ip=%{REMOTE_ADDR} [P,L]
# redirect "/dyn" to web01.v6 = dyn.example.com (legacy)
RewriteCond %{HTTP_HOST} '^example.com$'
RewriteCond %{REQUEST_URI} '^/dyn$'
RewriteRule ^/dyn(|\?.*)$ http://web01.v6.example.com/dyn$1 [P,L]
service apache2 reload
/etc/lighttpd/20-example.com.conf
cgi.assign = (
...
"/dyn" => "",
...
/etc/init.d/lighttpd reload