ABSTRACT: DNS grundlagen werden erklaert. nslookup, host und dig werden kurz vorgestellt. AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt DNS steht fuer "domain name system" und ist das service das internet namen wie www.sil.at auf IP addressen wie 194.152.178.12 umsetzt und umgekehrt auch IP addressen namen zuordnen kann (reverse DNS oder reverse lookup genannt) ein server der anfragen nach dem zusammenhang zwischen name und nummer beantworten kann wird "nameserver" genannt. der verbreitetste aller nameserver unter unix nennt sich "bind" er beantwortet anfrage packete auf UDP port 53 und meist auch auf TCP port 53. (anfragen koennen damit also mit beiden protokollen gestellt werden. UDP ist aber zu bevorzugen) damit ein unix system namen auf IP addressen umsetzten kann muss es wissen welchen nameserver es denn fragen darf. das wird in der datei /etc/resolv.conf eingetragen. man traegt ein bis drei zeilen mit den nameservern ein die befragt werden koennen. z.b: nameserver 194.152.178.10 nameserver 194.152.178.1 natuerlich sollte man nicht einfach irgend welche nameserver eintragen sonder den oder die eigenen nameserver oder die nameserver seines internet providers. die server werden in der angegebenen reiheinfolge abgefragt. falls einer der server nicht erreichbar ist wird der naechste versucht. tippt jetzt jemand z.b. ping www.xyzabc.at ein so schickt der rechner ein DNS anfrage auf port 53 an den ersten nameserver. und der antwortet entweder mit der antworte (also einer IP addresse auf eine namensanfrage) oder sagt dass der name nicht existiert. in einem speziellen modus koennen anfragen auch so gestellt werden dass der server anstatt mit einem namen zu antworten mit einem verweis auf einen anderen nameserver antworten kann, der dann besser ueber den domain namen bescheid weis als er selbst... dieser kann dann wenn man in fragt wieder mit einem verweis auf andere server antworten... dies ist die uebliche art wie nameserver sich untereinander unterhalten. normale client hingegen bevorzugen es nur direkte antworten von servern zu erhalten. (der direkte modus wird "recursiv" genannt der indirekte modus wo man eventuell zuerst verweise auf andere nameserver bekommt wird "non recursiv" genannt) das name service ist hirarchisch aufgebaut. es gibt einige "root nameserver" die die toplevel domains (.org, .com, .net, ... und die laender domains .at, .de, .. ) kennen bzw wissen welche nameserver sich in den unterdomains auskennen. diese wiederum kennen entweder die namen direkt oder wissen wer denn nun fuer .irgenwo.at zustaendig ist.. usw. derjenige der fuer .irgendwo.at zustaendig ist kann festlegen welche nameserver fuer subdomains davon zustaendig ist. (z.b. .hinterhof.irgendwo.at) im resolv.conf kann man auch noch eine "search" zeile eintragen die etwa so aussehen koennte. search irgendwo.at irgendwoanders.at ist so ein search vorhanden dann wird, falls ein hostname z.b. "tinbox" abgefragt wird zuerst veruscht ob tinbox.irgendwo.at oder tinbox.irgendwoanders.at existieren. das hat zwar den nachteil dass fuer jeden aufzuloesenden namen mehrere abfragen gestellt werden muessen, auf der anderen seite erspart es tiparbeit wenn man oft hosts aus einer domain benoetigt.. man schreibt dann nur noch: ping tinbox anstatt den vollen namen eintippen zu muessen. ueblicherweise traegt man nur die domain in der man zuhause ist in die search zeile ein. zum ueberpruefen der namensaufloesung gibt es zahlreiche werkzeuge: * nslookup * host * dig * named-xfer ich will kurz nslookup besprechen. host ist aehnlich wie nslookup jedoch etwas moderner. dafuer aber noch nicht ueberall standard. dig ist ebenfalls ein gutes werkzeug zum debugen von nameserver problemen. named-xfer ist eigentlich ein interntes programm von nameservern das aber oft extrem nuetzlich ist.. nslookup www.mond.at sucht und die IP addresse zum namen www.mond.at nslookup www.mond.at ns1.sil.at wuerde die selbe abfrage nicht beim default nameserver machen sondern beim nameserver ns1.sil.at. dass man mit nslookup nicht nur den eigenen nameserver abfragen kann sondern jeden beliebigen ist insofern praktisch weil man damit ueberpruefen kann ob nach einer namensaenderung sich diese schon bei anderen nameservern herumgesprochen hat. in so einem falle fragt man z.b. mal beim nameserver eines konkurierenden ISP nach ob der den namen auch schon kennt. nslookup -type=NS sil.at obige anfrage zeigt uns welche nameserver fuer die domain sil.at zustaendig sind: sil.at nameserver = ns2.sil.at sil.at nameserver = ns3.sil.at sil.at nameserver = ns1.sil.at wie man sieht gibt es immer mehrere nameserver die fuer eine domain verantwortlich sind. diese redundanz erhoeht die zuverlaessigkeit und performance des DNS systems. nslookup -type=NS at zeigt uns z.b. welche nameserver fuer .at zustaendig sind. um herauszufinden an welche mailserver eine mail an xyz@sil.at geschickt wird fragen wir nach dem type MX nslookup -type=MX sil.at sil.at preference = 5, mail exchanger = mail.sil.at sil.at preference = 10, mail exchanger = terminal.sil.at mail an diese domain wird also entweder an mail.sil.at oder terminal.sil.at zugestellt. dabei hat der mit der niedrigsten "preference" prioritaet. falls der mit der niedrigen prioritaet nicht erreichbar ist wird versucht die mail an den mail server mit hoeheren "preference" wertem zuzustellen (sogenannter "backup MX"). obwohl mail nicht gleich verlorengeht wenn sie nicht sofort zugestellt werden kann sondern der zustellversuch dann halt eben etwas spaeter passiert haben gute provider doch meist einen backup MX. nslookup 194.152.178.12 macht den umgekehrten lookup von ip addresse auf name (sofern dieser existiert). da viele namen auf die selbe IP addresse zeigen koennen, der umgekehrte lookup aber nur einen namen zurueckliefern kann, ergibt der reverse lookup ueblicherweise einen anderen wert als der vorwaerts lookup. (der bei einem reverse lookup erhaltene name sollte aber mit dem forward lookup erhaltenen namen uebereinstimmen). das revers lookup ist ebenfalls hirarchisch aufgebaut. will man wissen wo das nameservice fuer addressen aus dem bereich 62.116.22.xxx liegt so fragt man nach: nslookup -type=NS 22.116.62.in-addr.arpa man beachte dass hier die dezimale darstellung der IP addresse in umgekehter reihenfolge angeschrieben wird. (was insofern klar ist weil ja auf der rechten seite immer die uebergeordnete domain liegt). die domain in-addr.arpa ist also eine art "fake" domain die zum aufloesen von addressen auf namen "missbraucht" wird. als konsequenz davon dass hier die dezimalschreibweise als domain namen verwendet ist ergibt sich dass man minimal fuer eine ganzes C netz also 256 addresse zustaendig sein kann. um auch kleinere bereiche deligieren (an einen andere nameserver zustaendigkeit vergeben) kann. in rfc2317 wird jedoch ein kleiner trick beschrieben wie das ganze doch auch fuer kleinere netze geht) dig ist aehnlich wie nslookup aber die ausgabe ist eher mehr direkt an der technik orientiert. dig @ns1.sil.at MX silverserver.co.at wuerde den nameserver ns1.sil.at nach den MX records fuer silverserver.co.at befragen. host -t MX silverserver.co.at ns1.sil.at detto. EXERCISES: * finde die IP addressen der nameserver deines providers und eines anderen providers. * finde heraus wer die mailserver fuer deine mailaddresse sind. * finde die IP addresse eines webservers. suche dann umgekehrt nach den namen der zu dieser IP adddresse gehoert. * wer ist fuer das reverse DNS fuer diese addressen zustaendig? REFERENCES: man nslookup man resolv.conf man host man dig http://www.ietf.org/rfc/rfc1034.txt