isc-dhcp-server kapcsolata bind9-cel dinamikus IP cím változtatásahoz...

szimszon küldte be h, 2012-02-13 21:20 időpontban

...avagy szegény ember saját dyndns-e.

Persze szegény embernek van egy tp-link vagy dlink routere, amin beállítja a megfelelő résznél, hogy milyen hozzáférési adatokkal tud beállítani egy ip-t egy megadott domain névhez.

Ez a leírás nem erről szól. Itt szükség van egy bind9 dns szerverre és isc-dhcp-serverre. Miért is? Pl. van valahol egy olcsó kis tárhellyel rendelkező szerverünk amin saját magunknak üzemeltetünk dns szervert. És van egy elfogadható sebességű internet kapcsolatunk és egy szerver a speizban, ami éjjel nappal megy :) Ez a lekvárok között helyet foglaló szerver dhcp-n keresztül kap ip címet, ami meg-megváltozik. Hát jól üzenjük meg ezt a bind-nek.

A leírás ezen alapul.

A dns szerver mellett hozzunk létre egy kulcsot ami az egyik dns zónánk (example.com) egyik aldomainjéhez fog tartozni (thorin.example.com).

# dnssec-keygen -r /dev/urandom -a RSAMD5 -b 1024 -T KEY -n ZONE thorin.example.com.

Ezennel eldöntöttük, hogy thorin barátunk lesz felhatalmazva a változások ismertetésére. A fenti parancs lefuttatásával valami ilyen fájlokat kapunk:

Kthorin.example.com.+001+06581.key
Kthorin.example.com.+001+06581.private

 A .... .key fájlt azon melegébe hozzá is cat-olhatjuk a zóna fájlunkhoz. Ne felejtsük el növelni a szériaszámát a zónának! Nos ezzel a lépéssel lehetővé tettük hogy thorin később igazolja magát a dns felé és kérjen változásokat a zónában.

Hát azért legyünk óvatosak és csak azt engedjük amit szeretnénk:

 A named.conf.local fájlban kicsit bővítsük ki a zónára vonatkozó beállításokat:

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        update-policy {
                grant thorin.example.com. name gollam.example.com. A TXT;
        };
};

Máris megengedtük thorin barátunknak, hogy gollam.example.com  A és TXT rekordját módosítsa.

Szerver kész. Most koncentráljunk a dhcp-re.

 Másoljuk át mindkét dnssec-kel készített kulcsot a /etc/dhcp/keys könyvtárba. Ezután már csak egy rövid teendőnk van. A /etc/dhcp/dhclient-exit-hooks.d könyvtárba másoldjuk be a következő  scriptet:

ZONE=example.com
HOSTNAME=gollam.example.com
KEYFILE=/etc/dhcp/keys/Kthorin.example.com.+001+06581.private
nsupdate -v -k "$KEYFILE" > /dev/null <<EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF
E=$?
logger -t "dhclient" "Uj IP ($new_ip_address) lekuldve az example.com-nak. [$E]"
exit $E

Sajnos jelenleg (Debian Squeeze-en) az nsupdate egy hatalmas hibaüzenettel lép ki. Ez

mem.c:1099: INSIST(ctx->stats[i].gets == 0U) failed, back trace
#0 0xb73f6e27 in ??
#1 0xb73f7093 in ??
#2 0xb740aa33 in ??
#3 0xb740ad35 in ??
#4 0xb77b8819 in ??
#5 0xb7172ca6 in ??
#6 0xb77b1801 in ??
/etc/dhcp/dhclient-exit-hooks.d/update: line 25: 19652 Aborted

sajnos normális, az A rekord ettől függetlenül frissült.

 Viola. Kész is vagyunk.

Hmm, és ha dyndns helyett keresnénk megoldást (mert fizetős lett, az olcsó SOHO routerek meg csak azt ismerik)? Mi lenne, ha a routeren a DNS IP címe valami saját DNS-re mutatna, ahol meg a dyndns.com-hez egy "hamis" (szintén) saját szerverre mutató bejegyzés lenne?