pavement

BIND, dynamic DNS

From FreeBSDwiki
Revision as of 18:27, 20 May 2006 by Jimbo (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
#!/usr/bin/perl

# setddns.pl
#
# Copyright (c) 05-20-2006, JRS System Solutions
# All rights reserved under BSD license: http://www.opensource.org/licenses/bsd-license.php

# NOTE: This script requires BIND 9.3.1, and CPAN modules LWP::UserAgent, HTTP::Request, and 
#       HTTP::Response.  FreeBSD admins may find the CPAN modules under /usr/ports/www/p5-libwww.
#
# WARNING: FreeBSD admins must make CERTAIN they are calling the BIND9 version
#          of nsupdate - FreeBSD systems have a nasty habit of leaving a copy
#          of the BIND8 version higher up in the PATH, even in systems shipped
#          with BIND9 in the base install!

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

$ROUTERURL = "192.168.0.1/status.html";
$ROUTER_USERNAME = "admin";
$ROUTER_PASSWORD = "password";

$NSUPDATE = "/usr/sbin/nsupdate";
$KEYDIR = "/usr/home/ddns";
$KEYFILE = "Kph34r.tehinterweb.net.+157+23266.private";
$NAMESERVER = "tehinterweb.net.";
$HOST = "ph34r.tehinterweb.net";
$TYPE = A;
$TTL = 10;

$router_url_string = 'http://' . $ROUTER_USERNAME . ':' . $ROUTER_PASSWORD . '@' . $ROUTERURL;

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new('GET',$router_url_string);
$testdata = $ua->request($req)->as_string();

$testdata =~ /(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}).*?(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3})/s;
$WAN1 = $2;

chdir ("$KEYDIR");
open (NSUPDATE, "| $NSUPDATE -k $KEYFILE");
print NSUPDATE "server $NAMESERVER\n";
print NSUPDATE "update delete $HOST $TYPE\n";
print NSUPDATE "update add $HOST $TTL $TYPE $WAN1\n";
print NSUPDATE "show\n";
print NSUPDATE "send\n";
close (NSUPDATE);
Personal tools