Dinamikus DNS házilag
A közelmúltban több helyen is felmerült az a kérdés, hogy hogyan lehetne dinamikus DNS-t csinálni otthonra. Először is több szolgáltató is kínál ilyeneket: dyn.com, noip.com, dnsdynamic.org, és még egy halom, a google kidob párat. Talán olyan is akad, amelyik – esetleg csekély díjazás fejében – a saját domain-ünket is hajlandó kezelni, nem kerestem.
Viszont nekünk a saját eszközeinkkel kell megoldanunk a feladatot. Nézzük mi kell hozzá1:
- Saját domain név, ez valószínűleg adott, ha nem, akkor választani kell egyet. A példákban a termoember.hu-t fogom hasznáni, jelenleg (még) nincs regisztrálva.
- Két, egymástól független hálózatban lévő DNS szerver. Ez általában problémás, ám a legtöbb regisztrátor ad másodlagos2 DNS-t a nála regisztrált zónákhoz. Így már csak egy, fix IP címmel rendelkező szervert kell valahonnét leakasztani.
- Olyan levelezőszerver, aki hajlandó elfogadni a postmaster@termoember.hu címre érkező leveleket.
A DNS szerver beállítása
A telepítés
Először is kell egy DNS szerver, amit a fix IP címmel rendelkező gépre fel kell telepíteni. Maga a telepítés általában rém egyszerű, az adott operációs rendszer csomagkezelőjével fel kell telepíteni a megfelelő csomagot. Én Debiánt használok, ezért az aptitude install bind9
parancs ezt meg is oldja. Ez a lépés általában nem ütközik nehézségbe.
A zóna beállítása
A következő lépés a zóna beállítása. Ehhez létre kell hozni egy zónafájlt (az IP címek teljesen légbőlkapottak):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | termoember.hu IN SOA ns1.termoember.hu. postmaster.termoember.hu. ( 2012101204 ; serial 84600 ; refresh (1 day) 7200 ; retry (2 hours) 2419200 ; expire (a month) 3600 ; minimum (1 hour) ) NS ns1.termoember.hu. NS ns2.termoember.hu. A 153.218.56.31 MX 10 mail.termoember.hu. $ORIGIN termoember.hu. $TTL 60 * IN A 153.218.56.31 |
Hogy pontosan mi micsoda, azt a wikipédia és a google elmagyarázza Ezt a zónafájlt el kell menteni, én általában a zóna nevét szoktam felhasználni ehhez, ezért a fájl neve termoember.hu.zone lesz, és Debián esetén a /var/cache/bind
könyvtárba kell tenni. Ha ez megvan, akkor már csak meg kell neki mondani, hogy ott találja. Ezt a /etc/bind/named.conf.local
fájlban célszerű megtenni, a következők hozzáadásával:
1 2 3 4 5 6 7 8 9 10 11 | zone "termoember.hu" { type master; file "termoember.hu.zone"; notify yes; allow-update { key remote-key;}; allow-transfer { 127.0.0.1; hureg; my-slaves; }; }; |
Pár dolog, ami nem lesz meg a google-ben: a hureg és a my-slaves az két darab ACL, tartalmazza a slave és a recheck DNS szerverek címeit, az allow-update sor pedig engedélyezi a megfelelő kulccsal rendelkezők számára a zóna módosítását. A hureg acl-t ide teszem, de a my-slaves az mindenkinek más és más. Ezeket szintén a /etc/bind/named.conf.local
fájlba kell elhelyezni.
1 2 3 | acl hureg { 193.6.27.63; }; |
A /etc/init.d/bind9 reload
parancs kiadása után kb. ilyesmit kell látni a /var/log/daemon.log
fájlban:
1 2 3 4 5 6 7 8 9 | Mar 9 12:36:26 dnsserver named[634]: received control channel command 'reload' Mar 9 12:36:26 dnsserver named[634]: loading configuration from '/etc/bind/named.conf' Mar 9 12:36:26 dnsserver named[634]: reading built-in trusted keys from file '/etc/bind/bind.keys' Mar 9 12:36:26 dnsserver named[634]: using default UDP/IPv4 port range: [1024, 65535] Mar 9 12:36:26 dnsserver named[634]: using default UDP/IPv6 port range: [1024, 65535] Mar 9 12:36:26 dnsserver named[634]: reloading configuration succeeded Mar 9 12:36:26 dnsserver named[634]: zone termoember.hu/IN: loaded serial 2012101204 Mar 9 12:36:26 dnsserver named[634]: reloading zones succeeded Mar 9 12:36:26 dnsserver named[634]: zone termoember.hu/IN: sending notifies (serial 2012101204) |
Legyen dinamikus!
Így most már van egy többé-kevésbé használható zóna, most már csak a módosításokat kell engedélyezni a számára. Erre az nsupdate parancsot fogjuk használni, ami parancs a dnsutils csomag része. Akár a szerveren, de akár egy másik gépen is futtathatjuk. Én egy másik gépet választok, de tulajdonképpen nincs észvesztő különbség. A telepítés maga szintén nem egy borzalmasan összetett dolog: aptitude install dnsutils
. Így még természetesen nem tudjuk módosítani a zónát, hiszen akkor bárki képes lenne erre, ami azért kissé merész dolog lenne. Ezért le kell gyártani a megfelelő kulcsot (a szerveren elvileg megvan hozzá a parancs) a dnssec-keygen -a HMAC-MD5 -b 256 -n USER remote-key
paranccsal. Ez két fájlt csinál, ebből a private az érdekes:
1 2 3 4 5 6 7 8 | root@dnsserver:/etc/bind# cat Kremote-key.+157+36040.private Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: KJ7qM72W0cW/nZqLORHnSEC67pyRqO2ZE2Waa6xuY6A= Bits: AAA= Created: 20130309123402 Publish: 20130309123402 Activate: 20130309123402 |
Ebből kell főzni egy key bejegyzést a bind számára (ez annak az allow-update sornak a párja, ami fentebb szerepel a konfigban):
1 2 3 4 | key remote-key { algorithm HMAC-MD5; secret "KJ7qM72W0cW/nZqLORHnSEC67pyRqO2ZE2Waa6xuY6A="; }; |
Lassacskán alakul a dolog. Most a kliens gépen, ami kb. bármelyik lehet, létre kell hozni egy tyler.txt fájlt:
1 2 3 4 5 | server 153.218.56.47 debug update add tyler.termoember.hu. 3600 IN A 10.10.10.10 update delete tyler.termoember.hu. send |
Persze nem szükséges fájlt csinálni, most csak a szemléltetés miatt csinálom így. Ha a fájl megvan, akkor már nagyon-nagyon közel vagyunk a dolgok végéhez. A named.conf.local-ból ki kell másolni a key remote-key { ... }
részletet, és a távoli gépen betenni pl. egy server-key fájlba. Ha ez megvan, akkor máris lehet matatni a zónát:
1 | nsupdate -k server-key tyler.txt |
Ha minden pompás, akkor a szerveren valami ilyesmit fogunk látni a logban:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | root@dnsserver:/etc/bind# /etc/init.d/bind9 restart ; tail -f /var/log/daemon.log Stopping domain name service...: bind9 waiting for pid 1410 to die. Starting domain name service...: bind9. Mar 9 14:01:31 dnsserver named[1442]: command channel listening on ::1#953 Mar 9 14:01:31 dnsserver named[1442]: zone 0.in-addr.arpa/IN: loaded serial 1 Mar 9 14:01:31 dnsserver named[1442]: zone 127.in-addr.arpa/IN: loaded serial 1 Mar 9 14:01:31 dnsserver named[1442]: zone 255.in-addr.arpa/IN: loaded serial 1 Mar 9 14:01:31 dnsserver named[1442]: zone termoember.hu/IN: loaded serial 2012101206 Mar 9 14:01:31 dnsserver named[1442]: zone localhost/IN: loaded serial 2 Mar 9 14:01:31 dnsserver named[1442]: managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found Mar 9 14:01:31 dnsserver named[1442]: managed-keys-zone ./IN: loaded serial 0 Mar 9 14:01:31 dnsserver named[1442]: running Mar 9 14:01:31 dnsserver named[1442]: zone termoember.hu/IN: sending notifies (serial 2012101206) Mar 9 14:01:35 dnsserver named[1442]: client 153.218.56.48#32678: signer "remote-key" approved Mar 9 14:01:35 dnsserver named[1442]: client 153.218.56.48#32678: updating zone 'termoember.hu/IN': adding an RR at 'tyler.termoember.hu' A Mar 9 14:01:35 dnsserver named[1442]: client 153.218.56.48#32678: updating zone 'termoember.hu/IN': delete all rrsets from name 'tyler.termoember.hu' |
Az életben természetesen az add/delete fordítva van, azaz először kitöröljük a régi bejegyzést, majd hozzáadjuk az újat, nekem a tesztelgetések miatt így kényelmesebb volt.
Gyakorlatilag ezzel készen is vagyunk, ettől kezdve a következő dolgokra kell figyelni:
- Nagyon vigyázni kell a kulcsokra, mert akinek megvan a kulcs, az tudja módosítani a zónát.
- Az IP cím azonnal megváltozik, és a slave szerverek is átveszik a változásokat, ezért ésszel kell futtatni a scriptet, lehetőleg csak olyankor, amikor az IP cím megváltozik.
- Az, hogy a cím megváltozik csak egy dolog, van neki egy TTL-je, ami a fenti példában 3600. Ezt lejjebb lehet (kell) venni, az igényeknek megfelelően. Otthoni szerver esetén nem valószínű, hogy egy 600-as érték (vagy akár 60-as) gondot okozna, de túl alacsonyra állítani nagyon-nagyon ellenjavallt. Részemről a 600 alá nem szívesen mennék.
- A tyler.txt-t természetesen sokféleképp elő lehet állítani, csupán a szintaktikára kell odafigyelni.
- Az nsupdate egyébként rém sokat tud, érdemes ismerkedni vele.
- Nagyon vigyázni kell a kulcsokra, mert akinek megvan a kulcs, az tudja módosítani a zónát!
Másodlagos DNS létrehozása
A zóna bejegyzéséhez szükség lesz egy másodlagos DNS-re, ami beállítása már elég sok mindentől függ, de általában nem nagy puki. Ha minden megvan, és a regcheck is lefut, akkor a zóna bejegyezhető.