IPv6 II.

Tegnap valahol ott hagytam abba, hogy a teljes ipv6-os hálózatunk üzemelt, ám ha már hálózat, egy szép reverse dns jól nézne ki a tartományon. A mai nap ennek a megvalósítását fogom pár rövid mondatba szedni:

Kezdetnek vegyünk egy régi jól bevált DNS szervert, neve named, alias bind, amiből én a 9.3.x-es verziót használom. IPv6 esetében nem sokat változott a működés DNS terén, mivel ügyeltek arra, hogy az új IP protokoll kompatibilis legyen a mostanság használt DNS rendszerrel, ami több kevesebb(inkább több) sikerrel, de összejött. A névfeloldás tekintetében nincs nagy változás, igazából csak egy, ami az AAAA dns rekord bevezetése. Ahogy eddig is volt az A rekord esetében, ugyanaz van most az AAAA rekordnál is, leszámítva hogy az AAAA bejegyzés esetében már IPv6 formátumú címet kell használnunk.

AAAA rekord esetében nem fontos az egész IPv6-os címet kiírni, elegendő az összevont változata is, így hát egy picit állj. Tegnap erre a részre nem tértem ki, mivel inkább a gyakorlatias részét mutattam be a protokollnak. Jöjjön hát egy kis elméleti tananyag is:

Az új protokoll a régivel szemben 128 bites címtartományt használ, ezt hogy az ember ne 128 darab 1-est vagy 0-át lásson, hétköznapi ember számára is érthető formába kell önteni. Erre a 128 bites címet, 8 darab 16 bites részre osztották, melyek további két hexadecimális számra vannak bontva, (Röviden 8 darab, egyenként 4 karakter hosszúságú hexadecimális szám) melyeket kettősponttal választanak el.
Példa egy ilyen címre: 2001:12A5:0000:0000:0000:0000:5432:023E
Ez még azonban így is horribilis, lehetetlen megjegyezni (nem mintha egyszerűsítés után meglehetne, de jól néz ki). Szóval itt jön képbe az előbb említett egyszerűsítés. Bizonyos feltételek mellett ez a cím tovább egyszerűsíthető.
Egyrészt van egy csoport elhagyásnak nevezett szabály, melynek lényege, hogy egy csupa 0-val jelölt csoport (egy, de akár több is), elhagyható, azonban figyelembe kell venni, hogy az egyszerűsítés után a cím visszaállítható legyen. Fenti Példából kiindulva az egyszerűsítést több féleképpen is elvégezhetjük:
Pl.: 2001:12A5:0000:0000:0000::5432:023E
Mint látható az utolsó 0-ás csoportot elhagytuk, de elhagyhatunk akár több, egymás követő csoportot is, a lényeg hogy az elhagyott csoportok összefüggő láncot alkossanak. Hogy legyen értelme is annak amit írok, itt van a példa:
2001:12A5::5432:023E
Ebben az esetben a középen lévő négy 0-ás csoportot hagytuk el, de figyelni kell arra hogy ebben az esetben nem :::::::: -lesz, hanem csak :: lesz a csoport elhagyás jelölése. Amit megemlítettem még, hogy egyszerre csak egy összefüggő csoport hagyható el csak, vagyis pl. a 2001:12A5:0000:0000:ABCD:0000:5432:023E nem egyszerűsíthető 2001:12A5::ABCD::5432:023E -re mivel az ABCD csoport eredeti helyét nem lehet majd megállapítani. Ilyen címek esetén a helyes egyszerűsítési forma vagy a 2001:12A5::ABCD:0000:5432:023E, vagy a 2001:12A5:0000:0000:ABCD::5432:023E. Bár logikus hogy mindig a nagyobb 0-ás csoportokat egyszerűsítjük.
Lehetséges még egy egyszerűsítési formula, amikor egy csoport 0-ás előtagjait hagyjuk el. Vagyis ha van egy 0123 tagunk az ipv6-os címben, használhatjuk az 123-as formát (logikusan a 0001 helyett is lehet csupán csak egy 1-est használni, a csupa nulla tag helyett pedig lehet csak egy 0-át használni)
Pl.: 2001:12A5:0000:0000:ABCD:0000:0032:0001 esetében a legegyszerűbb forma a 2001:12A5::ABCD:0:32:1.

Visszatérve az eredeti témára, most nem megyek bele a DNS szerverek működésének lekivilágába, mert ez közel az örökkévalóságig lehetne taglalni, a bemutatott példák pedig a fenti BIND verzió mellett működtek tökéletesen. Tételezzük fel, hogy van már egy jól működő domainünk (a példa kedvéért legyen most a valami.hu), nem fontos a regisztrált domain sem, ebben az esetben csak a kivülállók számára sikertelen lesz a névfeloldás, belső hálózaton működni fog.
named.conf fileunkban szerepelnie kell a következő bejegyzésnek:

zone "valami.hu." {
     type master;
     file "/etc/namedb/master/valami.hu.zone";
};

illetve a valami.hu.zone-ban a következő pár egyszerű bejegyzésnek (az IP címeket a tegnapi postbol
szedtem, az egyszerűség kedvéért):

$ttl 3600
$ORIGIN hu.
valami 3600 IN SOA ns.valami.hu. root.valami.hu. (
2009012901 86400 7200 3600000 3600 )
3600 IN NS ns.valami.hu.
IN AAAA 2001:470:1913:6d2::1
$ORIGIN valami.hu.
ns 3600 IN AAAA 2001:470:1913:6d2::1
ipv6-gw 3600 IN AAAA 2001:470:1913:6d2::1
gep1 3600 IN AAAA 2001:470:1913:6d2::2

Ezzel ha minden igaz, a valami.hu beállításra kerül (kinek íze szája és kénye szerint kell, módosítja majd). Mint láthatjuk, szinte semmiben nem különbözik egy normál cím felhúzásától, leszámítva az AAAA rekordokat.
A reverse DNS esetében is hasonlóan járunk el, mivel megtartották az régi protokoll szabályait (miként a 192.168.1.1 ip cím reverse a 1.1.168.192.in-addr.arpa.).
IP alapú feloldás esetében azonban nem lehet használni az egyszerűsített v6-os címeket, kötelező kiírni minden 0-át, vagyis a 2001:470:1913:6d2::1 reverse címe így néz ki:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.d.6.0.3.1.9.1.0.7.4.0.1.0.0.2.ip6.arpa
A lényegi változás az in-addr.arpa. helyett az ip6.arpa. használata, ami a named.conf esetében így kell hogy kinézzen:

zone "2.d.6.0.3.1.9.1.0.7.4.0.1.0.0.2.ip6.arpa."
{
     type master;
     file "/etc/namedb/master/2001:470:1913:6d2.reverse.zone";
}

Majd a reverse zona file-nak valahogy így kellene kinéznie:
$ttl 3600
@    IN SOA ns.valami.hu. root.valami.hu (
    2009012701 86400 7200 3600000 3600 )
IN NS ns.valami.hu.
$origin 2.d.6.0.3.1.9.1.0.7.4.0.1.0.0.2.ip6.arpa.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ipv6-gw.valami.hu.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR gep1.valami.hu.

Az egyetlen lényeges dolog amire oda kell figyelni, a 0-ák száma, engem jópárszor megviccelt már egy itt-ott elhagyott 0, aminek hosszú perceken tartó keresgélés lett a vége.
Mivel az ember alapvetően egy lusta jószág, a legegyszerűbb ha megpróbáljuk legelsőre feloldani a v6-os címünket, így:
# host 2001:470:1913:6d2::1
Host 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.d.6.0.3.1.9.1.0.7.4.0.1.0.0.2.ip6.arpa not found: 3(NXDOMAIN)

Majd ezt lehet másolgatni szabadon, így biztosítva hogy minden számjegy/nulla/pont a helyén van.
A bind elindítása után elvileg minden működni fog, ha nem, a host -vvvv parancs illetve a syslog tanulmányozása elég informatív szokott lenni ahhoz, hogy a hibát könnyen megtaláljuk.

Holnap egy kicsit szárazabb anyaggal fogok jönni, mivel gyakorlati része nem lesz, csupán elméleti síkon vesézem ki, hogy mire, és miért is jó ha tudjuk hogy milyen fán terem az IPv6.

Hozzászólások

Valakinek ötlete arra, hogy lehetne a tabokat is használni?;]

Talán érdemes vetni egy pillantást az L2D2 eszközre, amivel az IPv4/IPv6 DNS és DHCP adatok LDAP-ban tárolhatók és a bind/dhcp konfigfájlok abból generálódnak. Kis hálózatban nyilván ágyúval verébre, de közepestől fölfele már érdemes használni.