DNS HOWTO Nicolai Langfeldt (janl@linpro.no), Jamie Norrish and others Version 3.1, 2001-01-18 Traducerea: Victor Plugaru(vuk@go.ro). Cu scuzele de rigoare pentru eventualele greseli si/sau inadvertente. CUM SA administrati rapid un DNS. ______________________________________________________________________ Cuprins 1. Preambul 1.1 Chestiuni legale 1.2 Credit si cereri de suport. 1.3 Dedicatie 2. Introducere. 3. Caching name server. 3.1 Pornirea lui named 3.2 Resolvere 3.3 Felicitari 4. Forwarding 5. Un domeniu simplu 5.1 Intai teorie seaca 5.2 Propriul nostru domeniu 5.3 Zona reverse 5.4 Cuvinte de atentionare 5.5 De ce nu functioneaza interogarile inverse. 5.5.1 Zona reverse nu este investita. 5.5.2 Aveti un subnet fara clase 5.6 Servere slave (sclav) 6. Optiuni de securitate fundamentale. 6.1 Restrictionarea transferurilor pe zone 6.2 Protectia in situatii de spoofing 6.3 Rularea lui named ca non-root 7. Un exemplu real de domeniu 7.1 /etc/named.conf (sau /var/named/named.conf) 7.2 /var/named/root.hints 7.3 /var/named/zone/127.0.0 7.4 /var/named/zone/land-5.com 7.5 /var/named/zone/206.6.177 8. Intretinere 9. Conversia de la versiunea 4 la versiunea 8 10. Intrebari si raspunsuri 11. Cum sa deveniti un administrator DNS la scara mare. ______________________________________________________________________ 1. Preambul Cuvinte cheie: DNS, BIND, BIND 4, BIND 8, named, dialup, ppp, slip, ISDN, internet, domeniu, nume, rezolutie, hosturi, caching. Acest document este parte din Proiectul Documentatiei Linux (Linux Documentation Project) 1.1. Chestiuni legale (C)opyright 1995-2001 Nicolai Langfeldt, Jamie Norrish & Co. Nu distribuiti modificand fara copyright, distribuiti liberi dar pastrati mesajul de copyright. 1.2. Credite si cereri de suport Vreau sa multumesc lui Arnt Gulbrandsen caruia i-am cauzat suferinta cu aceste tiparituri si care mi-a oferit multe sugestii utile. Vreau sa multumesc de asemeni numeroselor persoane care mi-au trimis sugestii si note prin e-mail. Acesta nu va fi niciodata un document final; va rog sa imi trimiteti e-mailuri despre problemele si succesele dumneavoastra. Puteti da o mana de ajutor la imbunatatirea acestui HOWTO. Asa ca va rog sa trimiteti comentarii si/sau sugestii la janl@linpro.no. Sau cumparati cartea mea despre DNS. Vedeti bibliografia despre informatii in legatura cu aceasta chestiune. Daca trimiteti un e-mail si asteptati raspunsuri, dati dovada de curtoazie si asigurati-va ca adresa de reply este corecta si functioneaza. Tot astfel, va rog sa cititi sectiunea "qanda" inainte de a-mi trimite e-mail. Inca un lucru, inteleg doar limbile norvegiana si engleza. Acesta este un HOWTO (CUM_SA). L-am intretinut ca parte a LDP din 1995. Am scris, in timpul anului 2000 o carte pe aceiasi tema. Vreau sa spun ca, desi acest HOWTO este asemanator cartii din multe puncte de vedere, nu este o versiune redusa astfel incat sa promovez vinderea cartii. Veti gasi cartea in bibliografie in finalul acestui HOWTO. Cititorii acestui HOWTO m-au ajutat sa inteleg ceea ce e dificil de inteles in legatura cu DNS. Aceasta m-a ajutat la carte, iar cartea m-a ajutat de asemeni sa inteleg la ce ar servi acest HOWTO. Acest HOWTO a completat cartea. Cartea a completat versiunea 3 a acestui HOWTO. Multumirile mele editorului cartii, care si-a incercat norocul cu mine :-) 1.3. Dedicatie Acest HOWTO este dedicat lui Anne Line Norheim Langfeldt, desi dansa nu il va citi niciodata pentru ca nu e genul. 1. Introducere Ce este si ce nu este aceasta. DNS este Domain Name System (Sistemul Domeniului de Nume). DNS converteste numele masinilor (de calcul) in adrese IP pe care toate masinile de pe Internet le au. Translateaza (sau "mapeaza" cum se zice in jargon) din nume in adrese si din adrese in nume, precum si alte cateva lucruri. Acest HOWTO documenteaza definirea acestor mapari folosind sisteme UNIX, cu cateva lucruri specifice Linux-ului. O mapare este o simpla asociere intre doua lucruri, in acest caz un nume de masina, ca ftp.linux.org, si IP-ul masinii (sau adresa) 199.249.150.4. DNS-ul contine de asemeni mapari si in alt sens, din IP catre numele masinii; aceasta se numeste "mapare inversa" DNS este, pentru neinitiati (dumneavoastra :-), una dintre cele mai obscure domenii din administrarea retelelor. Din fericire, DNS nu este chiar asa de greu. Acest HOWTO va incerca sa va clarifice cateva lucruri. Descrie cum sa setati un server de nume DNS simplu, incepand doar cu un server cache si pana la a seta un sever DNS primar pentru domeniu. Pentru setari mai complexe consultati sectiunea "qanda" din acest document. Daca nu este descris acolo (ceea ce va trebuie), va trebui sa consultati documentatie "adevarata". Voi reveni si voi arata in ce consta aceasta documentatie "adevarata" in "ultimul capitol". Inainte de a incepe ar trebui sa va configurati masina astfel incat sa puteti folosi telnet de la si catre aceasta masina si sa puteti face tot felul de conexiuni in retea, si in special sa puteti da telnet 127.0.0.1 si sa reusiti sa intrati pe propria masina (ar trebui sa incercati asta chiar acum!). Va trebuie de asemeni fisierele /etc/nsswitch.conf, /etc/resolv.conf si /etc/hosts corecte, ca punct de plecare pentru ca nu le voi explica functiile aici. Daca nu aveti toate acestea configurate si in stare de functionare, Networking-HOWTO si/sau Networking-Overview-HOWTO explica cum sa le configurati. CItiti-le. Cand spun "masina dumneavoastra" inteleg masina pe care vreti sa configurati DNS, nu orice alta masina pe care o aveti si care ar fi implicata in efortul de a pune la punct reteaua. Presupun ca nu sunteti in spatele nici unui fel de firewall care blocheaza interogarile de nume. Daca sunteti in atare situatie, vedeti sectiunea "quanda". Serverul de nume in UNIX este indeplinit de un program numit named. Acesta este o parte a pachetului "BIND" coordonat de The Internet Software Cosortium. Named este inclus in majoritatea distributiilor de Linux si este de obicei instalat in /usr/sbin/named, de obicei dintr-un pachet BIND. Daca aveti un named probabil ca il puteti si folosi. Daca nu aveti unul, puteti lua distributia binara de de pe un site ftp Linux, sau luati ultima si cea mai "tare" sursa de la . Acest HOWTO se refera la BIND versiunea 8. Versiunea veche a acestui document, despre BIND 4 este inca disponibila la . in caz ca folositi BIND 4. Daca paginile man ale named (chiar la sfarsit, in sectiunea FILES) fac referire la named.conf, aveti BIND 8. Daca fac referire la named.boot, aveti BIND 4. Daca aveti BIND 4 si sunteti constient de problemele de securitate, ar fi bine sa faceti uprade la BIND 8. Acum. DNS este o baza de date distribuita in retea. Aveti grija ce puneti in ea. Daca puneti "balarii" in ea, dumneavoastra si altii, tot "balarii" veti avea. Mentineti DNS-ul restrans si consistent si veti avea parte de servicii de buna calitate de la el. Invatati sa il folositi, administrati, depanati si veti fi inca un bun administrator, evitand ingenuncherea Internetului din cauza prostului management. Indicatie: faceti copii de rezerva a tuturor fisierelor pe care va indic sa le modificati, daca le aveti deja, asa incat daca trecand prin acestea (configurari, modificari) nimic nu mai merge, sa puteti reveni la vechea dumneavoastra stare de functionare. 3. Caching name server Un prim model de configurarie DNS, foarte util pentru dialup, modem de cablu si utilizatori ADSL. In distributiile Redhat si inrudite puteti obtine aceleasi rezultate practice ca in prima sectiune a acestui HOWTO, instaland pachetul BIND, utilitarele bind si caching-nameserver-ul. Daca folositi Debian, instalati bind si bind-doc. Bine inteles ca doar instaland aceste pachete nu veti invata atat de mult ca si cand ati citi acest HOWTO. Asa ca instalati pachetele si verificati fisierele instalate. Un server cache de nume va gasi raspunsuri la interogarile de nume si va memora aceste raspunsuri pentru data viitoare cand veti avea nevoie. Aceasta va scurta semnificativ timpul de asteptare urmatoarea data, in special daca aveti o conexiune lenta. In primul rand aveti nevoie de un fisier numit /etc/named.conf (Debian: /etc/bind/named.conf). Acesta este citit cand named porneste. Deocamdata ar trebui sa contina pur si simplu: ______________________________________________________________________ // Config file for caching only name server options { directory "/var/named"; // Uncommenting this might help if you have to go through a // firewall and things are not working out. But you probably // need to talk to your firewall admin. // query-source port 53; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; }; ______________________________________________________________________ Pachetele distributiilor Linux pot folosi diferite nume de fisiere pentru fiecare tip de fisier mentionat aici, cu toate acestea, continutul va fi identic. Linia "directory" ii spune lui named unde sa caute fisiere. Toate fisierele named subsecvente vor fi relative la aceasta. pz este un director sub /var/named, de ex. /var/named/pz. /var/named este directorul corect potrivit Standardului de Fisiere Linux. Fisierul /var/named/root.hints ar trebui sa contina urmatoarele: (daca execuati cut si paste dintr-o versiune electronica a acestui document, aveti in vedere ca nu trebuie sa existe spatii de inceput in acest fisier, de exemplu toate liniile trebuie sa inceapa cu un caracter non-blank. Anumite programe de procesare de text vor insera spatii la inceputul liniilor, cauzand confuzie. In acest caz va rog sa indepartati spatiile goale.) ______________________________________________________________________ ; ; There might be opening comments here if you already have this file. ; If not don't worry. ; . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. ; M.ROOT-SERVERS.NET. 6D IN A 202.12.27.33 I.ROOT-SERVERS.NET. 6D IN A 192.36.148.17 E.ROOT-SERVERS.NET. 6D IN A 192.203.230.10 D.ROOT-SERVERS.NET. 6D IN A 128.8.10.90 A.ROOT-SERVERS.NET. 6D IN A 198.41.0.4 H.ROOT-SERVERS.NET. 6D IN A 128.63.2.53 C.ROOT-SERVERS.NET. 6D IN A 192.33.4.12 G.ROOT-SERVERS.NET. 6D IN A 192.112.36.4 F.ROOT-SERVERS.NET. 6D IN A 192.5.5.241 B.ROOT-SERVERS.NET. 6D IN A 128.9.0.107 J.ROOT-SERVERS.NET. 6D IN A 198.41.0.10 K.ROOT-SERVERS.NET. 6D IN A 193.0.14.129 L.ROOT-SERVERS.NET. 6D IN A 198.32.64.12 ______________________________________________________________________ Fisierul descrie serverele de nume "radacina" din lume. Acestea se schimba in timp si trebuie mentinute permanent. Vedeti sectiunea "intretinere" despre cum sa mentineti la curent acest fisier. Urmatoarea sectiune in named.conf este ultima zona. II voi explica utilizarea intr-un capitol ulterior. Deocamdata creati din aceasta un fisier numit 127.0.0 in subdirectorul pz (din nou, indepartati spatiile goale daca executati cut si paste). ______________________________________________________________________ $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. ______________________________________________________________________ Pe urma, aveti nevoie de un fisier /etc/resolv.conf care sa arate cam asa: (indepartati spatiile!) ______________________________________________________________________ search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1 ______________________________________________________________________ Linia "search" specifica ce domenii ar trebui cautate pentru un nume de host la care vreti sa va conectati. Linia "nameserver" indica serverul dumneavoastra de nume, in acest caz propria dumneavoastra masina, daca acolo ruleaza named (127.0.0.1 e perfect, nu conteaza ca mai aveti si alta adresa IP). Daca doriti sa apara mai multe servere de nume, puneti cate o linie "nameserver" pentru fiecare. (Nota: named niciodata nu citeste acest fisier, ci rezolverul, programul care il utilizeaza pe named. Nota2 :in unele fisiere resolv.conf gasiti o linie "domain". E in regula, dar nu folositi si "search" si "domain", doar una dintre ele va merge). Pentru a ilustra ce face acest fisier: daca un client incearca sa caute (hostul) "foo", atunci foo.subdomeniu.domeniul-tau.edu este incercat primul, apoi foo.domeniul-tau.edu si apoi foo. Nu e de preferat sa puneti prea multe domenii in linia "search" pentru ca va dura mult sa le interogheze pe toate. Exemplul de mai sus presupune ca apartineti domeniului subdomeniu.domeniul-tau.edu; atunci masina dumneavoastra este numita probabil masina-ta.subdomeniu.domeniul-tau.edu Linia "search" n-ar trebui sa contina TLD-ul dumneavoastra (Top Level Domain "edu"- Domeniul de Nivel Inalt) in acest caz. Daca aveti nevoie sa va conectati la hosturi din alt domeniu, in mod frecvent, puteti adauga acel domeniu in linia "search" astfel: (indepartati spatiile!) ______________________________________________________________________ search subdomain.your-domain.edu your-domain.edu other-domain.com ______________________________________________________________________ si asa mai departe. Evident, trebuie sa puneti nume reale de domeniu in locul celor din exemplu. Importat: observati lipsa punctelor de la sfarsitul numelor de domeniu. 3.1 Pornirea lui named Dupa toate acestea este timpul sa pornim named. Daca folositi o conexiune dialup, conectati-va intai. Dati comanda "ndc start" si apasati Enter, fara nici o optiune. Daca nu merge asa, incercati "/usr/sbin/ndc start". Daca tot nu merge, vedeti sectiunea "qanda". Daca observati in fisierul mesajelor syslog (de obicei /var/adm/messages sau /var/log/messages) in timp ce porniti named (incercati tail -f /var/log/messages), ar trebui sa vedeti ceva asemanator : (liniile care se incheie in \ continua pe linia urmatoare) Dec 15 23:53:29 localhost named[3768]: starting. named 8.2.2-P7 \ Fri Nov 10 04:50:23 EST 2000^Iprospector@porky.\ devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_P7/\ src/bin/named Dec 15 23:53:29 localhost named[3768]: hint zone "" (IN) loaded\ (serial 0) Dec 15 23:53:29 localhost named[3768]:Zone "0.0.127.in-addr.arpa"\ (file pz/127.0.0): No default TTL set using SOA\ minimum instead Dec 15 23:53:29 localhost named[3768]: master zone\ "0.0.127.in-addr.arpa" (IN) loaded (serial 1) Dec 15 23:53:29 localhost named[3768]:listening on [127.0.0.1].53 (lo) Dec 15 23:53:29 localhost named[3768]: listening on [10.0.0.129].53\ (wvlan0) Dec 15 23:53:29 localhost named[3768]: Forwarding source address is\ [0.0.0.0].1034 Dec 15 23:53:29 localhost named[3769]: Ready to answer queries. Daca sunt multe mesaje de eroare, trebuie sa fie o greseala pe undeva. Named va indica fisierul unde se afla greseala. Reveniti si verificati fisierul respectiv. Dati comanda "ndc restart" si ati rezolvat problema. Acum puteti testa configurarea. In mod traditional, un program numit nslookup e folosit pentru aceasta. In mod curent, dig e recomandat. $ dig -x 127.0.0.1 ; <<>> DiG 8.2 <<>> -x ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY:1, ADDITIONAL: 0 ;; QUERY SECTION: ;; 1.0.0.127.in-addr.arpa, type = ANY, class = IN ;; ANSWER SECTION: 1.0.0.127.in-addr.arpa. 1D IN PTR localhost. ;; AUTHORITY SECTION: 0.0.127.in-addr.arpa. 1D IN NS ns.penguin.bv. ;; Total query time: 30 msec ;; FROM: lookfar to SERVER: default -- 127.0.0.1 ;; WHEN: Sat Dec 16 00:16:12 2000 ;; MSG SIZE sent: 40 rcvd: 110 Daca ati obtinut aceasta, serviciul functioneaza. Speram. Daca treburile stau altfel, reveniti si verificati totul. De fiecare data cand moficati fisierul named.conf, trebuie sa reporniti named cu comanda ndc restart. Acum puteti efectua o interogare. Incercati sa cautati o masina apropiata. pat.uio.no este apropiata de mine, la Universitatea din Oslo. $ dig pat.uio.no ; <<>> DiG 8.2 <<>> pat.uio.no ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode:QUERY, status: NOERROR, id: 4 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY:3, ADDITIONAL: 3 ;; QUERY SECTION: ;; pat.uio.no, type = A, class = IN ;; ANSWER SECTION: pat.uio.no. 1D IN A 129.240.130.16 ;; AUTHORITY SECTION: uio.no. 1D IN NS nissen.uio.no. uio.no. 1D IN NS ifi.uio.no. uio.no. 1D IN NS nn.uninett.no. ;; ADDITIONAL SECTION: nissen.uio.no. 1D IN A 129.240.2.3 ifi.uio.no. 1H IN A 129.240.64.2 nn.uninett.no. 1D IN A 158.38.0.181 ;; Total query time: 112 msec ;; FROM: lookfar to SERVER: default -- 127.0.0.1 ;; WHEN: Sat Dec 16 00:23:07 2000 ;; MSG SIZE sent: 28 rcvd: 162 De data aceasta dig a cerut lui named sa caute masina pat.uio.no. A contactat una dintre masinile server de nume indicate in fisierul root.hints si a cerut calea de acolo. Poate dura putin pana obtine rezultatul, dupa cum va trebui sa caute in domeniile din /etc/resolv.conf. Observati "aa" in linia "flags:". Inseamna ca raspunsul este autoritativ, venit proaspat de la un server autoritativ. Voi explica ce inseamna "autoritativ" mai tarziu. Daca veti face aceiasi interogare din nou, veti obtine aceasta: $ dig pat.uio.no ; <<>> DiG 8.2 <<>> pat.uio.no ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status:NOERROR, id: 4 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUERY SECTION: ;; pat.uio.no, type = A, class = IN ;; ANSWER SECTION: pat.uio.no. 23h59m58s IN A 129.240.130.16 ;; AUTHORITY SECTION: UIO.NO. 23h59m58s IN NS nissen.UIO.NO. UIO.NO. 23h59m58s IN NS ifi.UIO.NO. UIO.NO. 23h59m58s IN NS nn.uninett.NO. ;; ADDITIONAL SECTION: nissen.UIO.NO. 23h59m58s IN A 129.240.2.3 ifi.UIO.NO. 1d23h59m58s IN A 129.240.64.2 nn.uninett.NO. 1d23h59m58s IN A 158.38.0.181 ;; Total query time: 4 msec ;; FROM: lookfar to SERVER: default -- 127.0.0.1 ;; WHEN: Sat Dec 16 00:23:09 2000 ;; MSG SIZE sent: 28 rcvd: 162 Observati lipsa flagului "aa" din acest rezultat. Inseamna ca named nu a mai iesit in retea pentru a afla acest raspuns, daca informatia se afla in cache acum. Dar informatia din cache poate fi veche (stale). Asa ca sunteti informati despre aceasta (foarte subtil) prin lipsa lui "aa". Dar oricum, acum stiti ca serviciul cache functioneaza. 3.2. Rezolvere Toate sistemele de operare care implementeaza standardul C API fac uz de apelul gethostbyname si gethostbyaddr. Acestea pot obtine informatii din diverse surse. Din ce surse se alimenteaza, este indicat in fisierul /etc/nsswitch.conf in Linux (si alte UNIX-uri). Acesta este un fisier lung care specifica din ce fisier sau baza de date se vor obtine diferitele tipuri de date. De obicei contine informatii folositoare la inceput, pe care ar trebui sa le cititi. Dupa aceasta, cautati linia incapand cu "hosts:"; va trebui sa aveti: ______________________________________________________________________ hosts: files dns ______________________________________________________________________ (va aduceti aminte de spatiile de inceput, nu-i asa? Nu le voi mai mentiona) Daca nu exista nici o linie cu "hosts:", puneti una ca mai sus. Aceasta indica cum ca programele ar trebui sa examineze fisierul /etc/hosts intai, apoi sa verifice DNS-ul conform /etc/resolv.conf. 3.3. Felicitari Acum deja stiti cum sa configurati un named cu caching. Luati o bere, un lapte acru si sarbatoriti. 4. Forwarding In retele mari, bine organizate, academice sau ISP (Internet Service Provider - Furnizor de Servicii Internet), veti constata uneori ca administratorii de retea au pus la punct o ierarhie de servere DNS pentru forwarding (inaintare- transfer), care usureaza incarcarea retelei interiorare si exterioare. Nu e usor de stiut daca va aflati intr-o asemenea retea sau nu. Oricum, nu este important si, folosind serverul DNS al furnizorului dumneavoastra din retea ca "forwarder" puteti obtine raspunsurile mai rapid si cu o incarcare mai mica a retelei. Daca folositi un modem, aceasta poate fi chiar un castig. De dragul acestui exemplu sa presupunem ca furnizorul are doua servere de nume pe care vrea sa le folositi cu IP-urile 10.0.0.1 si 10.1.0.1. Atunci, in named.conf la dumneavoastra, in interiorul sectiunii "options", inserati aceste linii: ______________________________________________________________________ forward first; forwarders { 10.0.0.1; 10.1.0.1; }; ______________________________________________________________________ Exista de asemeni o smecherie draguta pentru masinile dialup care folosesc "forwardere". Este descrisa in sectiunea "qanda". Restartati serverul de nume si testati-l cu dig. Ar trebui sa mearga perfect. 5. Un domeniu simplu Cum configurati propriul domeniu. 5.1. Intai teorie seaca In primul rand: ati citit tot pana aici, nu? Trebuie. Inainte de a porni intr-adevar aceasta sectiune, va voi expune ceva teorie si un exemplu despre cum functioneaza DNS. Si o veti citi pentru ca va este necesara. Daca nu doriti, ar trebui macar sa o parcurgeti rapid. Opriti-va din cititul printre randuri cand ajungeti la ceea ce ar trebui sa aveti in fisierul named.conf. DNS este un sistem ierarhic, arborescent. Varful este notat "." si este denumit "root", cum este uzual pentru structurile de date arborescente. Dedesubt exista un numar de Top Level Domain - Domenii de Nivel Inalt - TLD-uri. Cele mai cunoscute sunt .COM .ORG .EDU .NET, dar sunt mai multe. Ca si la un arbore, exista o radacina care se imparte pe ramuri. Daca aveti ceva cunostinte despre computere, veti recunoaste DNS ca un arbore de cautare si veti fi capabili sa gasiti nodurile nodurile mici (leaf nodes) si marginile (edges). Punctele sunt noduri, marginile sunt in nume. Cand cautati o masina, interogarea porneste recursiv in ierarhie, plecand de la radacina (root). Daca doriti sa aflati adresa pentru prep.ai.mit.edu, serverul dumneavoastra de nume va incepe sa caute undeva. Incepe prin a cauta in cache. Daca stie raspunsul, avandu-l in cache mai dinainte, va raspunde imediat, asa cum am vazut in ultima sectiune. Daca nu stie, va indeparta partea din nume incepand de la stanga, verificand daca stie ceva despre ai.mit.edu, apoi mit.edu., apoi edu., si apoi daca nu cumva "." are cunostinta, pentru ca asa s-a specificat in fisierul hints (indicii). Apoi va intreba un server "." (root) despre prep.ai.mit.edu. Acest server "." nu va sti raspunsul dar va ajuta serverul dumneavoastra in calea sa, dandu-i o referinta, spunandu-i unde sa mai caute. Aceste referinte vor conduce eventual serverul dumneavoastra catre un server de nume care cunoaste raspunsul. Voi ilustra aceasta acum, "+norec" inseamna ca "dig" aplica interogari ne-recursive, asa ca va trebui sa aplicam chiar noi recursivitatea. Cealalta optiune ar fi sa reducem cantitatea de date pe care "dig" o produce asa incat sa nu avem de-a face cu prea multe pagini: $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. ;; res options: init defnam dnsrch ;; got answer: ; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 13 ;; AUTHORITY SECTION: . 5d23h48m47s IN NS I.ROOT-SERVERS.NET. . 5d23h48m47s IN NS E.ROOT-SERVERS.NET. . 5d23h48m47s IN NS D.ROOT-SERVERS.NET. . 5d23h48m47s IN NS A.ROOT-SERVERS.NET. . 5d23h48m47s IN NS H.ROOT-SERVERS.NET. . 5d23h48m47s IN NS C.ROOT-SERVERS.NET. . 5d23h48m47s IN NS G.ROOT-SERVERS.NET. . 5d23h48m47s IN NS F.ROOT-SERVERS.NET. . 5d23h48m47s IN NS B.ROOT-SERVERS.NET. . 5d23h48m47s IN NS J.ROOT-SERVERS.NET. . 5d23h48m47s IN NS K.ROOT-SERVERS.NET. . 5d23h48m47s IN NS L.ROOT-SERVERS.NET. . 5d23h48m47s IN NS M.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: I.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.36.148.17 E.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.203.230.10 D.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.8.10.90 A.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.41.0.4 H.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.63.2.53 C.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.33.4.12 G.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.112.36.4 F.ROOT-SERVERS.NET. 6d23h48m47s IN A 192.5.5.241 B.ROOT-SERVERS.NET. 6d23h48m47s IN A 128.9.0.107 J.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.41.0.10 K.ROOT-SERVERS.NET. 6d23h48m47s IN A 193.0.14.129 L.ROOT-SERVERS.NET. 6d23h48m47s IN A 198.32.64.12 M.ROOT-SERVERS.NET. 6d23h48m47s IN A 202.12.27.33 Aceasta este referinta. Ne ofera doar o "sectiune autoritativa" nu o "sectiune de raspuns". Propriul nostru nameserver ne raporteaza la alt nameserver. Alegeti la intamplare: $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. @H.ROOT-SERVE ; (1 server found) ;; res options: init defnam dnsrch ;; got answer: ; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3 ;; AUTHORITY SECTION: MIT.EDU. 2D IN NS BITSY.MIT.EDU. MIT.EDU. 2D IN NS STRAWB.MIT.EDU. MIT.EDU. 2D IN NS W20NS.MIT.EDU. ;; ADDITIONAL SECTION: BITSY.MIT.EDU. 2D IN A 18.72.0.3 STRAWB.MIT.EDU. 2D IN A 18.71.0.151 W20NS.MIT.EDU. 2D IN A 18.70.0.160 Se refera la serverele MIT.EDU odata. Din nou, alegeti unul la intamplare: $ dig +norec +noH +noques +nostats +nocmd prep.ai.mit.edu. @bitsy.mit.edu ; (1 server found) ;; res options: init defnam dnsrch ;; got answer: ; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4 ;; ANSWER SECTION: prep.ai.mit.edu. 3h50m7s IN A 198.186.203.18 ;; AUTHORITY SECTION: AI.MIT.EDU. 6H IN NS FEDEX.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS LIFE.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS ALPHA-BITS.AI.MIT.EDU. AI.MIT.EDU. 6H IN NS BEET-CHEX.AI.MIT.EDU. ;; ADDITIONAL SECTION: FEDEX.AI.MIT.EDU. 6H IN A 192.148.252.43 LIFE.AI.MIT.EDU. 6H IN A 128.52.32.80 ALPHA-BITS.AI.MIT.EDU. 6H IN A 128.52.32.5 BEET-CHEX.AI.MIT.EDU. 6H IN A 128.52.32.22 DE data aceasta avem o "sectiune de raspuns" si un raspuns la interogarea noastra. "Sectiunea autoritativa" contine informatii despre ce servere sa interogam despre ai.mit.edu data viitoare. Asa ca le puteti interoga data viitoare direct despre ce nume va intereseaza din domeniul ai.mit.edu. Deci pornind de la "." am gasit serverele de nume pentru fiecare nivel in numele de domeniu, prin referinte. Daca ati folosit propriul server de nume in loc de alte servere, nameserverul dumneavoastra a stocat, bineinteles in cache, toata informatia pe care a gasit-o "sapand" (comanda "dig") pentru aceasta, si nu va trebui sa cerceteze mult pentru raspunsuri, un timp. In structura arborescenta analoga, fiecare "." este un punct de ramificatie si fiecare parte intre "." reprezinta numele ramurilor individuale in arbore. Unul urca pe arbore luand numele pe care il dorim (prep.ai.mit.edu) intreband root-ul "." sau orice server parinte dinspre root catre prep.ai.mit.edu despre care avem informatii in cache. Odata ce limitele cache-ului sunt atinse, rezolverul recursiv "iese" interogand serverele, obtinand referinte (margini - edges) in nume. Un domeniu mai putin discutat, dar la fel de important este in-addr.arpa. Este de asemeni catalogat ca un domeniu "normal" ne permite sa obtinem numele host-ului cand ii cunoastem adresa. Un lucru important de retinut aici este ca adresele IP sunt scrise in ordine inversa in domeniul in-addr.arpa. Daca aveti adresa unei masini, de exemplu 192.148.52.43, named procedeaza ca in exemplul cu prep.ai.mit.edu: cauta serverele arpa. , cauta serverele in-addr.arpa, cauta serverele 192.in-addr.arpa. , cauta serverele 148.192.in-addr.arpa., cauta serverele 52.148.192.in-addr.arpa. , cauta inregistrarile necesare pentru 43.52.148.192.in-addr.arpa. Inteligent, nu? (Spuneti "da".) Reversia numerelor poate crea confuzie. 5.2. Propriul nostru domeniu Acum sa definim propriul nostru domeniu. Vom face domeniul linux.bogus si vom defini masini in el. Voi folosi nume de domenii total aiurea, astfel incat sa ne asiguram ca nu deranjam pe nimeni Acolo Afara. Inca un lucru inainte de a incepe. Nu toate caracterele sunt permise in numele de domenii. Suntem restrictionati la caracterele din alfabetul englez: a-z si numere 0-9 si caracterul "-". Limitati-va la aceste caractere. Caracterele majuscule si minuscule sunt identice pentru DNS, deci pat.uio.no este identic cu Pat.Uio.No. Am pornit deja aceasta parte cu o linie in named.conf: ______________________________________________________________________ zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; }; ______________________________________________________________________ Va rog sa observati lipsa lui "." la sfarsitul numelor de domeniu in acest fisier. Acesta spune ca acum vom definit zona 0.0.127.in-addr.arpa, care este serverul master pentru ea si care este stocat in fisierul numit pz/127.0.0. Deja am configurat acest fisier, care arata: ______________________________________________________________________ $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. ______________________________________________________________________ Observati "." la sfarsitul fiecarui nume de domeniu in acest fisier, in contrast cu named.conf de mai sus. Unii prefera sa inceapa fiecare zona cu directiva $ORIGIN, dar aceasta configurare este superflua. Originea (din care face parte ierarhia DNS) unei fisier zona este specificata in sectiunea "zone" din fisierul named.conf; in acest caz este 0.0.127.in-addr.arpa. Acest "fisier zona" contine 3 "inregistrari resursa" (RR): A SOA RR. A NS RR si un PTR RR. SOA este prescurtarea pentru Start of Authority. "@" este notatia speciala semnificand originea, si cum coloana "domain" pentru acest fisier indica 0.0.127.in-addr.arpa, prima linie inseamna in realitate: 0.0.127.in-addr.arpa. IN SOA ... NS este name server RR. Nu este nici un "@" la inceputul acestei linii; este implicit pentru ca inceputul liniei anterioare incepe cu un "@". Va scuteste de redactat. Astfel, linia NS poate fi scrisa deasemeni: 0.0.127.in-addr.arpa. IN NS ns.linux.bogus Aceasta spune DNS-ului ce masina este name-serverul pentru domeniul 0.0.127.in-addr.arpa, este ns.linux.bogus. "ns" este un nume uzitat pentru serverele de nume, dar ca si pentru serverele web care sunt numite www.ceva numele poate fi oricare. Si, in final, inregistrarea PTR (Domain Name Pointer - Pointerul Numelui de Domeniu) arata ca hostul de la adresa 1 din subnetul 0.0.127.in-addr.arpa, de exemplu 127.0.0.1 este numit localhost. Inregistrarea SOA este preambulul tuturor fisierelor de zona, si ar trebui sa fie exact cate una pentru fiecare fisier de zona. Aceasta descrie zona, de unde vine (o masina numita ns.linux.bogus), cine este responsabil pentru continutul ei (hostmaster@linux.bogus; ar trebui sa inserati adresa dumneavoastra de e-mail aici), ce versiune a fisierului zona este (serial:1) si alte lucruri care au de-a face cu cachingul si serverele DNS secundare. Pentru restul campurilor (refresh, retry, expire si minimum) folositi numerele utilizate in acest HOWTO si ar trebui sa fiti in siguranta. Inainte de SOA apare o linie esentiala, linia $TTL 3D. Puneti in ea toate fisierele de zona. Acum reporniti named (cu comanda ndc restart) si folositi "dig" pentru a examina rezultatele. -x cere o interogare inversa: $ dig -x 127.0.0.1 ; <<>> DiG 8.2 <<>> -x ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUERY SECTION: ;; 1.0.0.127.in-addr.arpa, type = ANY, class = IN ;; ANSWER SECTION: 1.0.0.127.in-addr.arpa. 1D IN PTR localhost. ;; AUTHORITY SECTION: 0.0.127.in-addr.arpa. 1D IN NS ns.penguin.bv. ;; Total query time: 5 msec ;; FROM: lookfar to SERVER: default -- 127.0.0.1 ;; WHEN: Sat Dec 16 01:13:48 2000 ;; MSG SIZE sent: 40 rcvd: 110 Deci se descurca sa obtina localhostul din 127.0.0.1, e OK. Acum, pentru scopul nostru principal, inserati o noua sectiune zona ("zone") in named.conf: ______________________________________________________________________ zone "linux.bogus" { notify no; type master; file "pz/linux.bogus"; }; ______________________________________________________________________ Observati din nou lipsa "." din numele de domeniu din fisierul named.conf. In fisierul zona linux.bogus vom pune niste date total aiurea. ______________________________________________________________________ ; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; NS ns ; Inet Address of name server MX 10 mail.linux.bogus ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger ; localhost A 127.0.0.1 ns A 192.168.196.2 mail A 192.168.196.4 ______________________________________________________________________ Doua lucruri trebuie observate in legatura cu inregistrarea SOA: ns.linux.bogus trebuie sa fie o masina cu inregistrare "A". Nu este in regula sa avem o inregistrarea CNAME pentru masina mentionata in inregistrarea SOA. Numele ei nu este obligatoriu sa fie "ns", poate fi orice nume "legal", acceptabil, de host. Apoi, hostmaster.linux.bogus trebuie citit ca hostmaster@linux.bogus. Acesta ar trebui sa fie un mail alias sau un mailbox (cutie postala) unde persoanele care intretin DNS-ul ar trebui sa citeasca frecvent mailul. Orice mail privind domeniul va fi trimis la adresa listata aici. Numele nu e necesar sa fie "hostmaster", paote fi adresa dumneavoastra normala de e-mail, dar adresa de e-mail "hostmaster" ar trebui sa functioneze la fel de bine. Exista un tip nou "RR" in acest fisier, RR-ul "MX"-ului sau Mail Exchanger-ului. Acesta indica sistemului de e-mail unde sa trimita mailul adresat cuiva@linux.bogus, dupa nume mail.linux.bogus sau mail.friend.bogus. Numerele din fata fiecarei masini este prioritatea RR-ului MailExchangerului. RR-ul cu cel mai mic numar (10) este unde mailul ar trebui sa fie trimis daca este posibil. Daca acesta rateaza, mailul va fi trimis urmatorului cu numar mai mare, un manager de e-mail secundar (mail handler), de exemplu mail.friend.bogus, care are prioritatea 20 aici. Restartati named cu "ndc restart". Examinati rezultatul cu "dig": $ dig any linux.bogus +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23499 ;; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1 ;; QUERY SECTION: ;; linux.bogus, type = ANY, class = IN ;; ANSWER SECTION: linux.bogus. 3D IN MX 10 mail.linux.bogus.linux.bogus. linux.bogus. 3D IN MX 20 mail.friend.bogus. linux.bogus. 3D IN NS ns.linux.bogus. linux.bogus. 3D IN SOA ns.linux.bogus.hostmaster.linux 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum Examinand cu atentie rezultatele de mai sus, veti descoperi o hiba. Linia linux.bogus. 3D IN MX 10 mail.linux.bogus.linux.bogus. este total gresita. Ar trebui sa fie: linux.bogus. 3D IN MX 10 mail.linux.bogus. Am facut intentionat o greseala, ca sa puteti invata din ea :-). Privind in fisierul zona, vom observa aceasta linie; MX 10 mail.linux.bogus ; Primary Mail Exchanger Lipseste un punct. Sau are prea multe "linux.bogus". Daca un nume de masina nu se termina cu punct intr-un fisier zona, originea este adaugata la sfarsitul lui, cauzand dublura linux.bogus.linux.bogus. Asa ca ori ______________________________________________________________________ MX 10 mail.linux.bogus. ; Primary Mail Exchanger ______________________________________________________________________ ori ______________________________________________________________________ MX 10 mail ; Primary Mail Exchanger ______________________________________________________________________ este corect. Prefer ultima forma, e mai putin de scris. Sunt anumiti experti in BIND care dezaproba, si altii care aproba aceasta. Intr-un fisier zona, domeniul ar trebui sa fie ori scris si terminat in "." ori ne inclus deloc, caz in care ramane implicita originea. Trebuie sa va stresez cu ideea ca in fisierul named.conf nu trebuie sa fie semne "." dupa numele de domenii. N-aveti idee de cate ori prea multe sau prea putine "." au pus in stare de confuzie utilizatorii. Deci, ideea mea aici este noul fisier zona , cu cateva informatii in plus: ______________________________________________________________________ ; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; TXT "Linux.Bogus, your DNS consultants" NS ns ; Inet Address of name server NS ns.friend.bogus. MX 10 mail ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger localhost A 127.0.0.1 gw A 192.168.196.1 HINFO "Cisco" "IOS" TXT "The router" ns A 192.168.196.2 MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 2.0" www CNAME ns donald A 192.168.196.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 2.0" TXT "DEK" mail A 192.168.196.4 MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.2" ftp A 192.168.196.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 2.1.86" ______________________________________________________________________ Aici sunt cateva noi RR-uri: HINFO (Host INFOrmation) are doua parti; e un obicei bun sa le comentati pe fiecare. Prima parte este harware-ul si CPU-ul din respectiva masina, iar a doua parte este software-ul sau sitemul de operare de pe masina. Masina "ns" este un Pentium si ruleaza Linux 2.0. CNAME (Canonical NAME) este o cale de a da fiecarei masini mai multe nume. Deci "www" este un alias pentru "ns". Utilizarea inregistrarii CNAME este controversata. Dar e in OK sa urmati regula potrivit careia o inregistrare MX, CNAME sau SOA nu trebuie sa nu se refere niciodata la o inregistrare CNAME, trebuie intotdeauna sa se refere la o inregistrare "A", deci este inadmisibil sa avem: ______________________________________________________________________ foobar CNAME www ; NO! ______________________________________________________________________ dar corect sa avem ______________________________________________________________________ foobar CNAME ns ; Yes! ______________________________________________________________________ Este de asemeni sigur sa presupunem ca un CNAME nu este un nume de host corect pentru o adresa de e-mail: webmaster@www.linux.bogus este o adresa de e-mail ilegala, incorecta, data de configurarea de mai sus. Va puteti chiar astepta la cativa administratori de e-mail de Afara sa restrictioneze aceasta regula, daca pentru dumneavoasta functioneaza. Calea pentru a evita aceasta este sa folositi inregistrari "A" (si poate si altele, cum ar fi reguli MX) in loc: ______________________________________________________________________ www A 192.168.196.2 ______________________________________________________________________ Un numar de arch-BIND-wizards recomanda sa nu utilizati de loc CNAME. Dar discutia legata aceasta nu face obiectul acestui HOWTO. Dar cum vedeti, acest HOWTO si multe site-uri nu urmeaza aceasta regula. Incarcati noua baza de date cu "ndc reload" ceea ce il obliga pe named sa-si reciteasca fisierele. $ dig linux.bogus axfr ; <<>> DiG 8.2 <<>> linux.bogus axfr $ORIGIN linux.bogus. @ 3D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum 3D IN NS ns 3D IN NS ns.friend.bogus. 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN TXT "Linux.Bogus, your DNS consultants" gw 3D IN TXT "The router" 3D IN HINFO "Cisco" "IOS" 3D IN A 192.168.196.1 localhost 3D IN A 127.0.0.1 mail 3D IN HINFO "386sx" "Linux 1.2" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.4 www 3D IN CNAME ns donald 3D IN TXT "DEK" 3D IN HINFO "i486" "Linux 2.0" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.3 ns 3D IN HINFO "Pentium" "Linux 2.0" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.2 ftp 3D IN HINFO "P6" "Linux 2.1.86" 3D IN MX 10 mail 3D IN MX 20 mail.friend.bogus. 3D IN A 192.168.196.5 @ 3D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum ;; Received 29 answers (29 records). ;; FROM: lookfar to SERVER: 127.0.0.1 ;; WHEN: Sat Dec 16 01:35:05 2000 Asta e bine. Si observati ca arata chiar ca fisierul zona. Sa verificam ce spune doar pentru www: $ dig www.linux.bogus +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27345 ;; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1 ;; QUERY SECTION: ;; www.linux.bogus, type = A, class = IN ;; ANSWER SECTION: www.linux.bogus. 3D IN CNAME ns.linux.bogus. ns.linux.bogus. 3D IN A 192.168.196.2 Cu alte cuvinte, numele real al lui www.linux.bogus este ns.linux.bogus, si va da si cateva informatii despre "ns" de asemeni, suficient pentru a va conecta la el daca cere un program. Acum suntem la jumatatea drumului. 5.3. Zona reverse Acum programele pot converti numele din linux.bogus in adrese la care se conecteaza. Dar de asemeni este ceruta o zona reverse, una care sa faca DNS-ul capabil sa converteasca adresele in nume. Acest nume este folosit de o multime de servere de diverse tipuri (FTP, WWW, IRC si altele) pentru a decide daca vor comunica cu dumneavoastra sau nu, si daca da, ce prioritate vi se va acorda. Pentru acces deplin la toate serviciile Internet , o zona reverse este necesara. Puneti aceasta in named.conf: ______________________________________________________________________ zone "196.168.192.in-addr.arpa" { notify no; type master; file "pz/192.168.196"; }; ______________________________________________________________________ Este exact acelasi lucru ca si cu 0.0.127.in-addr.arpa si continuturile sunt similare: ______________________________________________________________________ $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; Serial, todays date + todays serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR gw.linux.bogus. 2 PTR ns.linux.bogus. 3 PTR donald.linux.bogus. 4 PTR mail.linux.bogus. 5 PTR ftp.linux.bogus. ______________________________________________________________________ Acum restartati named-ul cu "ndc restart" si examinati rezultatele cu "dig": ______________________________________________________________________ $ dig -x 192.168.196.4 +pfmin ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8764 ;; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUERY SECTION: ;; 4.196.168.192.in-addr.arpa, type = ANY, class = IN ;; ANSWER SECTION: 4.196.168.192.in-addr.arpa. 3D IN PTR mail.linux.bogus. ______________________________________________________________________ deci arata OK, executati "dig" pentru toata configuratia pentru a o examina: ______________________________________________________________________ dig -x 192.168.196 AXFR ; <<>> DiG 8.2 <<>> -x AXFR $ORIGIN 196.168.192.in-addr.arpa. @ 3D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum 3D IN NS ns.linux.bogus. 4 3D IN PTR mail.linux.bogus. 2 3D IN PTR ns.linux.bogus. 5 3D IN PTR ftp.linux.bogus. 3 3D IN PTR donald.linux.bogus. 1 3D IN PTR gw.linux.bogus. @ 3D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ) ; minimum ;; Received 8 answers (8 records). ;; FROM: lookfar to SERVER: 127.0.0.1 ;; WHEN: Sat Dec 16 01:44:03 2000 ____________________________________________________________________ Arata bine! Daca output-ul dumneavoastra nu arata la fel, cautati eroarea in mesajele din syslog. Am explicat cum sa faceti aceasta in prima sectiune la paragraful "Pornirea lui named". 5.4. Cuvinte de atentionare. Trebuie sa adaug niste lucruri aici. Numerele IP utilizate in exemplele de mai sus sunt luate din blocul "retelelor private", ele nu sunt permise a se utiliza in Internet, deci sunt potrivite a fi utilizate intr-un exemplu ca acest HOWTO. Al doilea lucru este numarul de notificare:linia. Acesta ii spune lui named sa nu notifice serverele secundare (slave) cand a suferit o actualizare la unul dintre fisierele sale "zone". In BIND 8 named poate notifica celelalte servere listate in inregistrarile NS in fisierul "zone" cand o zona este actualizata. Aceasta situatie este avantajoasa in mod normal. Dar pentru experimente private cu zone, aceasta optiune ar trebui sa fie dezactivata - nu vrem sa poluam Internetul cu experimentele noastre, nu? Si, bineinteles, acest domeniu este total aiurea si la fel sunt toate adresele din el. Pentru un exemplu real vedeti urmatoarea sectiune principala. 5.5. De ce nu functioneaza interogarile inverse (reverse lookups). Sunt cateva "chestii" care in mod normal sunt evitate la interogarile de nume vazute adesea la configurarea zonelor inverse. Inainte de a trece mai departe, trebuie ca pe masinile dumneavoastra, interogarile inverse sa fie functionale pe propriul nameserver. Daca nu functioneaza, reveniti si puneti totul la punct inainte de a continua. Voi discuta doua situatii de nefunctionare a interogarilor inverse, asa cum sunt vazute din afara retelei dumneavoastra. 5.5.1 Zona inversa nu este investita. Cand cereti unui provider o plaja de adrese si un nume de domeniu, numele de domeniu este in mod normal investit. Investirea este "eticheta" pe care NS (Name Server) o inregistreaza si care va ajuta sa treceti de la un nameserver la altul, asa cum am explicat in "teoria seaca" de mai sus. Ati citit aceasta, nu-i asa? Daca zona inversa nu functioneaza, reveniti si cititi-o. Acum. Zona inversa trebuie de asemeni investita. Daca aveti clasa 192.168.196 de la provider cu domeniul linux.bogus, ei trebuie sa insereze inregistrarile NS atat pentru zona directa (forward) cat si pentru cea inversa. Daca urmati lantul de la in-addr.arpa in sus pana la reteaua dvs, probabil gasiti o ruptura in acest lant, cel mai probabil la providerul dvs. Gasind ruptura din lant, contactati providerul si cereti-i sa corecteze eroarea. 5.5.2. Aveti un subnet fara clase. Acesta este oarecum un subiect avansat, dar subneturile fara clase sunt ceva comun in ziua de azi si probabil ca aveti unul daca sunteti intr-o firma mica. Un subnet fara clase este ceea ce tine Internetul in picioare in zilele noastre. Cu cativa ani in urma au fost discutii intense cu privire la limitarile adreselor IP. Tipii de la IETF (Internet Engineering Task Force - ei mentin Internetul in stare de functionare) si-au stors creierii si au rezolvat problema. Cu un pret. Pretul este ca veti obtine mai putin de un subnet de clasa "C" si unele lucruri s-ar putea sa crape. Va rog consultati ASK MR DNS la: pentru o buna explicatie cu privire la aceste lucruri, si cum sa va descurcati. Ati citit-o? Eu nu o voi explica, asa ca, va rog cititi-o! Prima parte a acestei probleme este ca ISP-ul dvs. trebuie sa inteleaga tehnica descrisa de Mr. DNS. Nu toti ISP-stii mici au habar de aceasta problema. Daca asa sta treaba, va trebui sa le explicati problema si sa si insistati. Asigurati-va ca ati inteles-o dvs. intai. :-) Ei vor configura atunci o zona inversa foarte draguta pe serverul lor, pe care o puteti examina spre corectitudine cu "dig". A doua si ultima parte a problemei este ca trebuie sa intelegeti tehnica. Daca nu sunteti sigur, reveniti si recititi-o. Atunci puteti sa va configurati propria zona inversa fara clase, asa cum este descrisa de Mr. DNS. Mai e o capcana care pandeste aici. Rezolverele vechi nu vor fi capabile sa urmeze "fenta" cu CNAME in lantul de rezolvare si vor esua in incercarea de a rezolva invers masina dvs. Rezultatul poate fi acela ca serverul ii aloca o clasa de acces incorecta, interzicerea accesului sau ceva de genul aceasta. Daca va impotmoliti intr-un asemena serviciu, singura solutie (despre care am cunostinta) este pentru ISP sa insereze inregistrarea dvs. PTR direct in fisierul zonei fara clase in loc de inregistrare CNAME. Alte ISP-uri ofera alte cai de a rezolva aceasta problema, cum ar fi formularele bazate pe Web care va permit sa va introduceti maparile inverse. 5.6. Servere slave (sclav) Odata ce v-ati setat corect zonele pe serverele master, trebuie sa configurati macar un server slave ("sclav"). Serverele slave sunt necesare pentru a asigura robustetea serviciilor. Daca serverul master a picat, oamenii de pe internet vor putea totusi primit date despre doemeniu de la serverul slave. Un server slave ar trebui sa fie cat mai indepartat de dvs posibil si sa imparta cu serverul master cat mai putine din resursele de alimentare cu energie, LAN, ISP, oras, tara. Daca toate aceste lucruri sunt diferite de ale serverului master, aveti un bun server slave. Un server slave este pur si simplu un nameserver care copie fisierele zone de la master. Il configurati astfel: ______________________________________________________________________ zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 192.168.196.2; }; }; ______________________________________________________________________ Un mecanism numit trasfer de zone este folosit pentru a copia datele. Transferul de zone este controlat de inregistrarea SOA: ______________________________________________________________________ @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ______________________________________________________________________ O zona este transferata doar daca numarul serial al masterului este mai mare decat al slave-ului. Dupa fiecare interval de refresh, slave-ul va verifica daca masterul a fost actualizat. Daca verificarea esueaza (pentru ca masterul nu este disponibil) va reincerca verificarea. Daca va continua sa esueze atat timp cat dureaza intervalul de expirare, slave-ul va sterge zona din propriul sistem de fisiere si nu va mai actiona ca server pentru acea zona. 6. Optiuni fundamentale de securitate. de Jamie Norrish Seterea optiunilor de configurare pentru a reduce posibilitatea aparitiei problemelor Sunt cativa pasi simpli pe care ii puteti parcurge si care va vor asigura un server mai sigur si totodata ii vor reduce incarcarea. Materialul prezentat aici nu este mai mult decat un puct de plecare. Daca va preocupa securitatea (si ar trebui sa va preocupe), va rog sa consultati si alte resurse de pe Internet (vedeti "ultimul capitol"). Urmatoarele directive de configurare apar in named.conf. Daca o directiva apare in sectiunea "options" din fisier, se aplica tuturor zonelor listate in acel fisier. Daca apare in optiunile unei zone, se aplica numai acelei zone. On optiune dintr-o zona suprascrie, anuleaza o inregistrare din zona "options". 6.1. Restrictionarea trasferului pe zone. Pentru ca serverele slave sa fie capabile sa raspunda interogarilor spre domeniul dvs. trebuie sa fie capabile sa transfere informatia zona de la serverul primar. In foarte putine cazuri e nevoie de aceasta. De aceea, restrictionati transferurile pe zona, folosind optiunea "allow-trasfer". Presupunand ca 194.168.1.4 este adresa IP a lui ns.friend.bogus, si adaugandu-va in scop de depanare: ______________________________________________________________________ zone "linux.bogus" { allow-transfer { 192.168.1.4; localhost; }; }; ______________________________________________________________________ Restrictionand transferul pe zone, va asigurati ca singura informatie disponibila utilizatorilor este cea pe care acestia o cer direct = nimeni nu poate cere, interoga toate detaliile configurarii dvs. 6.2. Protectia impotriva spoofing-ului. In primul rand, dezactivati orice interogari pentru domenii care nu va apartin, cu exceptia masinii dvs. interne/locale. Aceasta nu doar preintampina utilizarea frauduloasa a serverului dvs. DNS, dar reduce si utilizarea ne-necesara a acestuia. ______________________________________________________________________ options { allow-query { 192.168.196.0/24; localhost; }; }; zone "linux.bogus" { allow-query { any; }; }; zone "196.168.192.in-addr.arpa" { allow-query { any; }; }; ______________________________________________________________________ Mai departe, dezactivati interogarile recursive cu exceptia celor de la masinile locale/interne. Aceasta reduce riscul atacurilor prin "otravirea" cache-ului, cand date false alimenteaza serverul. ______________________________________________________________________ options { allow-recursion { 192.168.196.0/24; localhost; }; }; ______________________________________________________________________ 6.3. Rularea lui named ca non-root. Este o idee buna sa rulati named ca utilizator altul decat root, asa incat daca acesta este compromis, privilegiile castigate de catre cracker sa fie cat mai limitate. Intai trebuie sa creati un grup si un utilizator sub care named sa ruleze, si apoi sa modificati scriptul pe care il folositi pentru a porni named. Transferati noul grup si utilizator catre named folosind flagurile -d si -u. De exemplu, in Debian GNU/Linux 2.2 ati putea modifica scriptul /etc/init.d/bind pentru a contine urmatoarea linie (unde userul si grupul "named" au fost deja create): ______________________________________________________________________ start-stop-daemon --start --quiet --exec /usr/sbin/named -- -u named -g named ______________________________________________________________________ La fel se procedeaza si cu RedHat si cu celelalte distributii. Dave Lugo a descris un setup dual chroot care s-ar putea sa fie interesant de citit. 7. Un exemplu real de domeniu. Unde vom lista fisiere reale de zona. Utilizatorii mi-au sugerat sa includ un exemplu real de domeniu, ca si unul tutorial, de instructaj. Folosesc acest exemplu cu permisiunea lui David Bullock de la LAND-5. Aceste fisiere dateaza din 24 septembrie 1996, si au fost editate pentru a se conforma restrictiilor BIND 8 si folosesc extensii scrise de mine. Deci, ceea ce vedeti aici s-ar putea sa difere de ceea ce ati putea afla interogand LAND-5 acum. 7.1. /etc/named.conf (sau /var/named/named.conf) Aici gasim zona master pentru cele doua zone inverse necesare: reteaua 127.0.0 si subreteaua (subnetul) de la LAND-5 206.6.177 ca linie primara pentru zona de forward a LAND-5 land-5.com. Observati ca in loc ca toate fisierele sa fie adunate nu in directorul "pz" asa cum am facut in acest HOWTO, le pune intr-un director numit "zone". ______________________________________________________________________ // Boot file for LAND-5 name server options { directory "/var/named"; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "zone/127.0.0"; }; zone "land-5.com" { type master; file "zone/land-5.com"; }; zone "177.6.206.in-addr.arpa" { type master; file "zone/206.6.177"; }; ______________________________________________________________________ Daca puneti aceasta in fisierul dvs. named.conf spre a va juca, VA ROG puneti "notify no: " in sectiunea zone, pentru cele doua zone land-5, spre a evita incidentele. 7.2. /var/named/root.hints Tineti minte ca acest fisier este dinamic, iar cel listat aici este vechi. Mai bine folositi unul produs cu "dig" asa cum am explicat mai devreme: ______________________________________________________________________ ; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241 ;; Total query time: 215 msec ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4 ;; WHEN: Sun Feb 15 01:22:51 1998 ;; MSG SIZE sent: 17 rcvd: 436 ______________________________________________________________________ 7.3. /var/named/zone/127.0.0 Doar bazele, inregistrarea SOA obligatorie, si o inregistrare care mapeaza 127.0.0.1 catre localhost. Ambele sunt necesare. Nimic mai mult nu ar trebui sa fie in acest fisier. Nu vor trebui niciodata updatate, decat daca nameserver-ul sau adresa hostmaster a dvs se modifica. ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. 1 PTR localhost. ______________________________________________________________________ Daca veti cauta intr-o instalare BIND aleatorie, veti observa probabil ca linia $TTL lipseste. Nu a fost folosita inainte si doar versiunea 8.2 BIND avertizeaza asupra lipsei acesteia. Va recomand sa puneti linia $TTL in fisierele zona cand observati ca lipseste. 7.4. /var/named/zone/land-5.com Aici observam inregistrarea SOA obligatorie, inregistrarea NS necesara. Putem vedea ca are un nameserver secundar la ns2.psi.net. Asa ar trebui sa fie, intotdeauna sa fie un al doilea nameserver in afara retelei, ca backup. Observam ca exista un host master numit land-5 care se ocupa de multiplele servicii Internet, si ca acesta este inregistrat cu CNAME ( o alternativa este utilizarea inregistrarii A). Asa cum vedem din inregistrarea SOA, fisierul zona incepe cu land-5.com, persoana de contact este root@land-5.com. hostmaster este o alta adresa folosita adesea pentru persoana de contact. Numarul serial este obisnuitul format yyyymmdd cu numarul serial de astazi adaugat. Aceasta este probabil a sasea versiune a fisierului zona, din 20 septembrie 1996. Tineti minte ca numarul serial trebuie sa creasca monoton, aici este un singur digit pentru numarul serial de astazi, dupa 9 editari va trebui sa astepam pana maine inainte de a edita din nou fisierul. Ganditi-ba la posibilitatea de a folosi 2 digiti. ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; serial, todays date + todays serial 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds NS land-5.com. NS ns2.psi.net. MX 10 land-5.com. ; Primary Mail Exchanger TXT "LAND-5 Corporation" localhost A 127.0.0.1 router A 206.6.177.1 land-5.com. A 206.6.177.2 ns A 206.6.177.3 www A 207.159.141.192 ftp CNAME land-5.com. mail CNAME land-5.com. news CNAME land-5.com. funn A 206.6.177.2 ; ; Workstations ; ws-177200 A 206.6.177.200 MX 10 land-5.com. ; Primary Mail Host ws-177201 A 206.6.177.201 MX 10 land-5.com. ; Primary Mail Host ws-177202 A 206.6.177.202 MX 10 land-5.com. ; Primary Mail Host ws-177203 A 206.6.177.203 MX 10 land-5.com. ; Primary Mail Host ws-177204 A 206.6.177.204 MX 10 land-5.com. ; Primary Mail Host ws-177205 A 206.6.177.205 MX 10 land-5.com. ; Primary Mail Host ; {Many repetitive definitions deleted - SNIP} ws-177250 A 206.6.177.250 MX 10 land-5.com. ; Primary Mail Host ws-177251 A 206.6.177.251 MX 10 land-5.com. ; Primary Mail Host ws-177252 A 206.6.177.252 MX 10 land-5.com. ; Primary Mail Host ws-177253 A 206.6.177.253 MX 10 land-5.com. ; Primary Mail Host ws-177254 A 206.6.177.254 MX 10 land-5.com. ; Primary Mail Host ______________________________________________________________________ Daca veti examina nameserverul lui land-5, veti observa ca numele hosturilor sunt exprimate in forma ws_number. De la ultimele versiuni de BIND4 ,named a inceput sa intareasca restrictiile in legatura cu caracterele ce pot fi folosite in numele hosturilor. Asa ca aceasta nu functioneaza sub BIND8, asa ca am inlocuit caracterul "-" (liniuta) cu caracterul "_" pentru a fi folosit in acest HOWTO. Un alt lucru de remarcat este ca statiile de lucru nu au nume individuale, ci mai curand un prefix urmat de doua din ultimile parti ale IP-ului. Folosirea unei astfel de conventii poate simplifica intretinerea semnificativ, dar poate fi un pic impersonala si, in fapt, o sursa de iritare printre clientii dumneavoastra. De asemeni, observam ca funn.land-5.com este un alias pentru land-5.com, dar folosind inregistrarea A nu CNAME. Aceasta este o buna politica, asa cum am spus si mai devreme. 7.5. /var/named/zone/206.6.177 Voi face comentariile dupa acest fisier: ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. NS ns2.psi.net. ; ; Servers ; 1 PTR router.land-5.com. 2 PTR land-5.com. 2 PTR funn.land-5.com. ; ; Workstations ; 200 PTR ws-177200.land-5.com. 201 PTR ws-177201.land-5.com. 202 PTR ws-177202.land-5.com. 203 PTR ws-177203.land-5.com. 204 PTR ws-177204.land-5.com. 205 PTR ws-177205.land-5.com. ; {Many repetitive definitions deleted - SNIP} 250 PTR ws-177250.land-5.com. 251 PTR ws-177251.land-5.com. 252 PTR ws-177252.land-5.com. 253 PTR ws-177253.land-5.com. 254 PTR ws-177254.land-5.com. ______________________________________________________________________ Zona inversa este partea de configurare care da dureri de cap. Este folosita pentru a identifica numele de host daca aveti IP-ul unei masini. Exemplu: sunteti un server IRC si acceptati conexiuni de la clientii IRC. Oricum, sunteti un server norvegian si acceptati doar conexiuni de la clientii din Norvegia si celelalte tari scandinave. Cand primiti o conexiune de la un client, biblioteca C e capabila sa va spune IP-ul masinii client, pentru ca numarul IP este continut in toate pachetele care traverseaza reteaua. Acum puteti invoca o functie numita gethostbyaddr care cauta numele unui host avand data adresa IP. Gethostbyaddr va interoga un server DNS, care va traversa reteaua de servere DNS cautand masina respectiva. Sa presupunem ca conexiunea client este de la ws-177200.land-5.com. Numarul IP pe care biblioteca C il livreaza catre serverul IRC este 206.6.177.200. Pentru a afla numele acelei masini trebuie sa gasim 200.177.6.206.in-addr.arpa. Serverul DNS va trebui intai sa gaseasca serverele arpa. , apoi in-addr.arpa. , urmand calea inversa spre 206, apoi 6, in final gasind serverul pentru 177.6.206.in-addr.arpa la LAND-5. De unde va lua raspunsul final, cum ca pentru 200.177.6.206.in-addr.arpa avem o inregistrare "PTR ws-177200.land-5.com" insemnand ca numele care insoteste 206.6.177.200 este ws-177200.land-5.com. Inapoi la exemplul cu serverele IRC. Serverul IRC accepta doar conexiuni din tari scandinave, de exemplu: *.no, *.se, *.dk, numele ws-177200.land-5.com e clar ca nu indeplineste aceasta conditie si serverul ii va respinge conexiunea. Daca nu a fost mapare inversa a lui 206.2.177.200 prin zona in-addr.arpa serverul nu va fi capabil sa gaseasca numele deloc si nici sa compare 206.2.177.200 cu *.no, *.se and *.dk, asa ca acestea nu se vor potrivi nicicum. Unii va vor spune ca maparea inversa nu este importanta pentru servere sau nu este importanta deloc. Nu este asa: multe servere FTP, news, IRC si unele servere WWW (web) nu vor accepta conexiuni de la masini ale caror nume nu le pot afla. Deci maparea inversa este de fapt obligatorie si necesara. 8. Intretinere. Tineti-l in viata. Exista o sarcina de intretinere cand aveti de-a face cu named-uri, alta decat a le mentine ruland. Aceea de a mentine fisierul root.hints actualizat, la zi. Cea mai usoara cale este cu "dig". Prima data rulati "dig" fara nici un argument, si veti obtine datele din "root.hints" conform propriului nameserver. Apoi interogati unul dintre rootservere listate cu "dig @rootserver". Veti observa ca rezultatul seamana foarte bine cu un fisier "root.hints". Salvati-l intr-un fisier (dig @e.root-servers.net . ns >root.hints.new) si inlocuiti vechiul root.hints cu el. Nu uitati sa restartati named dupa inlocuirea fisierului cache. Al Longyear mi-a trimis acest script care rulat, poate actualiza automat fisierul root.hints. Instalati-l intr-o intrare crontab pentru a fi rulat odata pe luna si puteti uita de el. Scriptul presupune ca va merge serviciul de mail si ca este definita adresa de hostmaster. Puteti sa il modificati pentru a se potrivi configuratiei dvs. ______________________________________________________________________ #!/bin/sh # # Update the nameserver cache information file once per month. # This is run automatically by a cron entry. # # Original by Al Longyear # Updated for BIND 8 by Nicolai Langfeldt # Miscelanious error-conditions reported by David A. Ranch # Ping test suggested by Martin Foster # named up-test suggested by Erik Bryer. # ( echo "To: hostmaster " echo "From: system " # Is named up? Check the status of named. case 'ndc status 2>&1 in *'cannot connect to command channel'*) echo "named is DOWN. root.hints was NOT updated" echo exit 0 ;; esac PATH=/sbin:/usr/sbin:/bin:/usr/bin: export PATH # NOTE: /var/named must be writable only by trusted users or this script # will cause root compromise/denial of service opportunities. cd /var/named 2>/dev/null || { echo "Subject: Cannot cd to /var/named, error $?" echo echo "The subject says it all" exit 1 } # Are we online? Ping a server at your ISP case 'ping -qnc 1 some.machine.net 2>&1' in *'100% packet loss'*) echo "Subject: root.hints NOT updated. The network is DOWN." echo echo "The subject says it all" exit 1 ;; esac dig @e.root-servers.net . ns >root.hints.new 2> errors case 'cat root.hints.new' in *NOERROR*) # It worked :;; *) echo "Subject: The root.hints file update has FAILED." echo echo "The root.hints update has failed" echo "This is the dig output reported:" echo cat root.hints.new errors exit 1 ;; esac echo "Subject: The root.hints file has been updated" echo echo "The root.hints file has been updated to contain the following information:" echo cat root.hints.new chown root.root root.hints.new chmod 444 root.hints.new rm -f root.hints.old errors mv root.hints root.hints.old mv root.hints.new root.hints ndc restart echo echo "The nameserver has been restarted to ensure that the update is complete" echo "The previous root.hints file is now called /var/named/root.hints.old." ) 2>&1 | /usr/lib/sendmail -t exit 0 ______________________________________________________________________ Unii dintre dvs v-ati prins ca fisierul root.hints este disponibil prin ftp din Internic. Va rog nu folositi ftp pentru a actualiza root.hints, metoda de mai sus este mult mai prietenoasa pentru net si Internic. 9. Conversia de la versiunea 4 la versiunea 8. Aceasta a fost la inceput o sectiune despre folosirea lui BIND 8 scrisa de David E. Smith (dave@bureau42.ml.org). Am editat cate ceva pentru a se potrivi noului nume al sectiunii. Nu sunt prea multe de spus. Cu exceptia inlocuirii fisierului named.boot cu named.conf, restul este identic. Iar BIND 8 vine cu un script PERL care converteste totul de la vechiul la noul format. Exemplu de fisier named.boot (vechiul stil) pentru caching nameserver: ______________________________________________________________________ directory /var/named cache . root.hints primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone primary localhost localhost.zone ______________________________________________________________________ In linia de comanda, in directorul bind8/src/bin/named (aceasta presupune ca aveti sursele distributiei). Daca aveti pachetul binar, scriptul e prin preajma... Dati comanda : ______________________________________________________________________ ./named-bootconf.pl < named.boot > named.conf ______________________________________________________________________ care va crea named.conf: ______________________________________________________________________ // generated by named-bootconf.pl options { directory "/var/named"; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "127.0.0.zone"; }; zone "localhost" { type master; file "localhost.zone"; }; ______________________________________________________________________ Functioneaza pentru orice intra intr-un fisier named.boot, desi nu adauga toate imbunatatirile si optiunile de configuratie pe care le permite BIND8. Aici este un named.conf care face aceleasi lucruri, dar ceva mai eficient: ______________________________________________________________________ // This is a configuration file for named (from BIND 8.1 or later). // It would normally be installed as /etc/named.conf. // The only change made from the tock' named.conf (aside from this // comment :) is that the directory line was uncommented, since I // already had the zone files in /var/named. options { directory "/var/named"; datasize 20M; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; }; zone "." IN { type hint; file "root.hints"; }; ______________________________________________________________________ In directorul bind8/src/bin/named/test din distributia BIND 8 gasiti aceasta si copii ale fisierelor zona, pe care multi utilizatori le pot instala si folosi ca atare. Formatele pentru fisierele root.hints si fisierele zone sunt identice, ca si comenzile pentru actualizarea lor. 10 Intrebari si raspunsuri. Va rog sa cititi aceasta sectiune inainte de a imi trimite e-mail. 1. named-ul meu "vrea" un fisier named.boot Cititi un HOWTO gresit.Vedeti vechea versiune a acestui HOWTO, care studiaza BIND4 la 2. Cum folosesc DNS-ul din interiorul unui firewall ? Indicatie: forward-only . Sau puteti folosi ___________________________________________________________________ query-source port 53; ___________________________________________________________________ in sectiunea "options" a lui named.conf. 3. Cum fac DNS-ul sa se "plimbe" prin adresele disponibile, pentru un serviciu, sa zicem www.busy.site, pentru a obtine un efect de egalizare a incarcarii (loadbalancing), sau similar? Faceti cateva inregistrari "A" pentru www.busy,site si folositi BIND 4.9.3 sau mai nou. Atunci, BIND va functiona ca perpetuum-mobile in cautare de raspunsuri. Nu va functiona cu versiuni mai vechi de BIND. 4. Vreau sa configurez un DNS intr-un Intranet (inchis). Cum fac? Lasati fisierul root.hints si ocupati-va numai de fisierele zone. Asta inseamna de asemeni ca nu trebuie sa actualizati fiserul .hint tot timpul 5. Cum configurez un server secundar (slave) ? Daca serverul primar/master are adresa 127.0.0.1, puneti o linie ca aceasta in named.conf-ul de la serverul secundar: ___________________________________________________________________ zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 127.0.0.1; }; }; ___________________________________________________________________ Puteti lista si alte servere master de unde pot fi copiate zonele, separate de punct si virgula ";" 6. Vreau sa rulez BIND cand sunt deconectat de la Internet. Sunt patru chestiuni privind aceasta problema: - Specific lui BIND 8, Adam L Rice mi-a trimis acest e-mail despre cum sa rulezi DNS fara dureri de cap pe o masina dialup: Am descoperit in noile versiuni ca acest fisier [ unde el explica modul in care face aceasta: Rulez named pe masina mea "masquerade" (cu mascaradare). Am doua fisiere root.hints, unul numita root.hints.real care contine numele reale ale root-serverelor si celalalt numit root.hints.fake care contine... ---- ; root.hints.fake ; this file contains no information ---- cand inchid conexiunea (dialup), copii root.hints.fake peste root.hints si restartez named. Cand pornesc conexiunea, copii root.hints.real peste root.hints si restartez named. Asta o fac din ip-up si ip-down. Prima data cand fac o interogare offline pe un nume de domeniu, named nu are detalii de oferit si pune o intrare ca aceasta in mesaje: Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN care nu ma deranjeaza. Deci functioneaza cu siguranta. Pot folosi nameserverul pentru masinile locale cand sunt deconectat de la Internet fara intarzieri de timeout pentru interogarile domeniilor externe. Peter Denison crede ca Ian nu a ajuns prea departe. El scrie: Cand sunt conectat) alimenteaza toate intrarile din cache (si reteaua locala) imediat, pentru intrarile reinregistrate in cache, forward catre nameserver-ul ISP-ului Cand nu sunt conectat) alimenteaza interogarile retelei locale imediat, abandoneaza orice alte interogari IMEDIAT Combinatia dintre schimbarea fisierului root cache si interogarile forward nu functioneaza. Deci am configurat (cu unele discutii pe Linux User Group-ul local) doua named-uri, dupa cum urmeaza: named-online: forwards to ISPs nameserver master for localnet zone master for localnet reverse zone (1.168.192.in-addr.arpa) master for 0.0.127.in-addr.arpa listens on port 60053 named-offline: no forwarding "fake" root cache file slave for 3 local zones (master is 127.0.0.1:60053) listens on port 61053 Si combinand aceasta cu port-forwarding-ul, pentru a trimite portul 53 catre portul 61053 cand suntem off-line si catre portul 60053 cand suntem online (folosesc noul pachet netfilter sub 2.3.18, dar si vechiul mecanism ipchains functioneaza). Observati ca aceasta nu va merge chiar "din tzeava" de vreme ce exista un mic bug in BIND 8.2 pe care l-am semnalat dezvoltatorilor, care impiedica un server slave sa aiba un master pe aceiasi adresa iP (chiar si pe un port diferit). - Am primit informatii despre cum BIND interactioneaza cu NFS si portmapper-ul pe o masina mai mult off-line, de la Karl-Max Wanger : Obisnuiesc sa rulez propriul meu named pe toate masinile care se conecteaza ocazional la Internet prin modem. Nameserverul singur actioneaza ca un cache, nu are nici o arie de autoritate, si interogheaza serverele din fisierul root.cache. Ca de obicei in Slackware, este pornit inainte de nfsd si mountd. Cu una dintre masinile mele (un notebook Libretto 30) am avut probleme ca adesea nu puteam sa il montez dintr-un sistem conectat la reteaua mea LAN. Aceleasi probleme le aveam si din punct de vedere al legaturilor PPP sau PLIP. Dupa ceva timp de cercetari si experimente am constatat ca named s-a incurcat in inregistrarea serviciilor initiate de nfsd si mountd precum si cu portmapper-ul. Pornind named-ul dupa nfsd si mountd, am scapat complet de probleme. Cum nu sunt dezavantaje de asteptat in urma unei asemenea modificari in ordinea de boot, recomand tuturor sa treaca la aceasta, pentru a preintampina necazurile. - In final, exista ceva informatii despre aceasta la Ask MR. DNS la . Este despre BIND 4, asa ca trebuie sa faceti adaptari la BIND 8. 7. Unde stocheaza caching-nameserver-ul cache-ul si cum pot controla dimensiunea acestuia? Cache-ul este stocat complet in memorie, nu este scris pe disc in nici un moment. De fiecare data cand dati kill lui named, cache-ul este pierdut. Cache-ul nu este controlabil nicicum, named il controleaza dupa cateva reguli simple, si cam asta e tot. Nu puteti controla cache-ul sau dimensiunea acestuia nicicum si pentru nici un motiv. Daca doriti neaparat, puteti incerca sa hackuiti named , dar nu este recomandat. 8. Named-ul salveaza cache-ul intre restart-uri? Pot sa il fac sa salveze? NU, named nu salveaza cache-ul cand dispare. Aceasta inseamna ca cache-ul trebuie reconstruit de la zero de fiecare data cand named este repornit. Nu exista nici o metoda de a-l face pe named sa salveze cache-ul intr-un fisier. 9. Cum imi procur un domeniu? Vreau sa imi configurez propriul domeniu, denumit de exemplu linux-rules.net. Cum pot sa obtin domeniul pe care il doresc alocat mie? Va rog sa va contactati provider-ul. Ei va vor putea ajuta cu aceasta. Aveti in vedere ca in cele mai multe parti ale lumii, aceast lucru costa (obtinerea unui nume de domeniu). 10. Cum securizez serverul meu DNS? Cum configurez un DNS split? (separat) Ambele sunt chestiuni avansate si sunt analizate in . de aceea nu le voi expune aici. 11. Cum sa devii un DNS de talie mare. Documentatii si utilitare. Exista documentatie "reala". Online si tiparita. Citirea acesteia este necesara pentru a face pasul de la un administrator DNS de mica anvergura la unul de talie mare. Am tiparit Ghidul Concis al DNS si BIND (Nicolai Langfeldt) publicata de QUE (ISDN 0-7897-2273-9). Cartea seamana cu acest HOWTO. Doar mai multe detalii si mai multe despre toate aspectele. Dar cartea standard este "DNS and BIND by C. Liu and P. Albitz from O'Reilly & Associates (ISBN 0-937175-82-X). Este excelenta. Faceti rost de editia a 3-a, care acopera BIND 8 ca si BIND 4. Exista de asemeni o sectiune DNS si in TCP/IP Network Administration Guide. by Craig Hunt from O'Reilly (ISBN 0-937175-82-X). O alta carte buna si pentru DNS si pentru orice este Zen and the Art of Motorcycle Maintenance (Zen si arta intretinerii motocicletei :-) de Robert M. Pirsig :-) ISBN 0688052304\ si altii. Online veti gasi multe chestii la: (DNS Resources Directory), ; FAQ si manual de referinta (BOG; BIND Operations Guide) ca si documente si definitii de protocol si "hack-uri" DNS (acestea - ma rog, nu toate- ca si RFC-urile sunt continute in distributia BIND). N-am citit chiar toate aceastea, dar nici mare administrator DNS nu sunt. Arnt Gulbrandsen pe de alta parte a citit BOG (BIND Operation Guide) si este extaziat de acesta :) Newsgrupul este despre DNS. Pe langa asta, exista un numar de RFC-uri despre DNS, cele mai importante sunt probabil cele listate aici. Cele care au BCP (Best Current Practice) sunt cele mai recomandate. RFC 2671 P. Vixie, Extension Mechanisms for DNS (EDNS0) August 1999. RFC 2317 , BCP 20, H. Eidnes et. al. Classless IN-ADDR.ARPA delegation, March 1998. This is about CIDR, or classless subnet reverse lookups. RFC 2308 , M. Andrews, Negative Caching of DNS Queries, March 1998. About negative caching and the $TTL zone file directive. RFC 2219 , BCP 17, M. Hamilton and R. Wright, Use of DNS Aliases for Network Services, October 1997. About CNAME usage. RFC 2182 , BCP 16, R. Elz et. al., Selection and Operation of Secondary DNS Servers, July 1997. RFC 2052 A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996 RFC 1918 Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996. RFC 1912 D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996. RFC 1912 Errors B. Barr Errors in RFC 1912, this is available at RFC 1713 A. Romao, Tools for DNS debugging, 11/03/1994. RFC 1712 C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994. RFC 1183 R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990. RFC 1035 P. Mockapetris, Domain names - implementation and specification, 11/01/1987. RFC 1034 P. Mockapetris, Domain names - concepts and facilities, 11/01/1987. RFC 1033 M. Lottor, Domain administrators operations guide, 11/01/1987. RFC 1032 M. Stahl, Domain administrators guide, 11/01/1987. RFC 974 C. Partridge, Mail routing and the domain system, 01/01/1986.