în articolul precedent din această serie din două părți, introducere în DNS (Domain Name System), am descris modul în care este structurată baza de date DNS și cum se configurează serviciile de nume pe un client. De asemenea, am enumerat și descris unele dintre cele mai frecvente înregistrări DNS pe care este posibil să le întâlniți atunci când construiți un server de nume sau doar încercați să interpretați rezultatele unei comenzi dig.

în acest articol, vă arăt cum să vă construiți propriul server de nume folosind BIND (Berkeley Internet name Domain)., Nu este la fel de dificil cum ai putea crede, mai ales pentru că o poți face în două etape.

în acest articol, veți începe prin a învăța cum să creați un server de nume de cache, apoi veți trece mai departe și veți învăța cum să faceți upgrade la un server de nume de domeniu primar (master) complet pentru rețeaua dvs., complet cu fișiere de zonă înainte și înapoi.

Configurarea unui server DNS folosind BIND

Configurarea unui server de nume folosind BIND este destul de simplă, așa că vă voi arăta cum să faceți acest lucru pe orice computer pe care l-ați putea avea disponibil pentru experimentare., Acest mic proiect de laborator vă va arăta cum să instalați și să configurați BIND pe computer ca un server de nume de cache, testați-l, apoi setați-l ca un server de nume principal cu un fișier de zonă pe care îl puteți utiliza ca un rezolvator de nume pentru rețeaua dvs. sau doar pentru testare.

Configurarea unui server de nume pe orice computer GNU / Linux pe care îl aveți disponibil este posibilă din punct de vedere tehnic, deoarece nu va interfera cu alte gazde din rețea sau cu funcționarea lor. Cu toate acestea, probabil că nu ar trebui să faceți acest lucru pe un computer pe care nu îl dețineți sau nu aveți dreptul să îl modificați decât dacă aveți permisiunea explicită în acest sens.,

configurarea mea

aveți nevoie de un singur computer pentru a efectua toate sarcinile din acest proiect de laborator. Folosesc această configurație pe ThinkPad-ul meu mult mai puternic, deoarece serverele de nume furnizate de DHCP (Dynamic Host Configuration Protocol) atunci când mă conectez la rețele non-home folosind conexiuni cu fir sau fără fir pot fi uneori nesigure. Pentru a arăta că aproape orice gazdă poate funcționa bine ca un server de nume, am testat acest proiect pe un vechi netbook ASUS EeePC 900.,

voi folosi adresa IP privată a ASUS-ului meu pentru acest proiect, dar ar trebui să utilizați adresa IP a gazdei pe care o utilizați.

fișierul hosts

În primul rând, să aruncăm o privire la fișierul /etc/hosts. În starea sa implicită, ar trebui să existe doar două linii în fișierul hosts, primele două linii văzute în lista 1, de mai jos.

listarea 1: Puteți menține un fișier hosts simplu pentru a efectua funcția de resolver în rețele mici.,

deși puteți adăuga nume de gazdă și adresele IP respective, așa cum se arată în lista 1, Aceasta nu este o soluție optimă pentru a denumi serviciile, în special atunci când călătoriți. Dacă există alte intrări în fișierul hosts, poate fi necesar să le comentați pe durata acestui proiect dacă interferează cu denumirea sau adresele IP. Cei mai mulți dintre voi nu vor avea alte intrări decât cele două linii implicite.,

de Pregătire

Un cache server de nume nu poate înlocui utilizarea de /etc/hosts pentru a rezolva hostname pe rețeaua internă; cu toate acestea, în comparație cu folosind un ISP sau alte publice numele server de stocare server de nume poate îmbunătăți performanța atunci când rezolvarea frecvent utilizate externe nume, cum ar fi www.cnn.com. Cea mai bună parte este că înființarea unui cache server de nume este destul de usor.înainte de a începe, trebuie să vă pregătiți efectuând următorii pași.

Mai întâi, faceți copii de rezervă ale fișierelor/etc /hosts,/etc / numite.conf, resolv.conf, și / etc / sysconfig / iptables.,dacă acestea nu sunt deja instalate, Utilizați managerul de pachete al distribuției pentru a instala următoarele rpm-uri BIND: bind, bind-chroot și bind-utils. Pentru a activa gazda dvs. de laborator pentru a utiliza serverul de nume cache, trebuie să adăugați o linie de server de nume pentru a indica propria gazdă în / etc / resolv.conf. De exemplu, dacă adresa IP a laboratorului dvs. este 192.168.0.203, la fel ca epc-ul meu, adăugați următoarea linie în partea de sus a listei serverului de nume din /etc/resolv.conf:

name server 192.168.0.203

asigurați-vă că utilizați adresa IP a gazdei pe care faceți acest proiect.,

ai putea folosi adresa IP a localhost, 127.0.0.1 în loc de adresa IP externă. De asemenea, ar trebui să comentați orice linii care indică alte gazde ca servere de nume. Asigurați-vă că salvați rezoluția revizuită.fișier conf.aceste modificări vor intra în vigoare imediat și nu este necesară repornirea sau repornirea serviciului. Acum încercați să ping o gazdă publică comună, care nu blochează ICMP (Internet Control Message Protocol) pachete; nu ezitați să utilizați firewall-ul meu, care este un Raspberry Pi.,

ping wally2.both.org

ar trebui să obțineți un „unknown host” sau „Numele sau serviciul nu este cunoscut” eroare deoarece în prezent nu au de lucru DNS serviciu sau resolver definite în resolv.fișier conf. Acum folosiți comanda dig pentru a vedea dacă name services funcționează.

dig wally2.both.com

ar trebui să primiți eroarea, ” conexiunea a expirat; nu s-a putut ajunge la servere.”

Configurarea unui server de nume de cache

un server de nume de cache nu este o sursă autoritară pentru niciun domeniu., Pur și simplu memorează în cache rezultatele tuturor cererilor de rezolvare a numelui din rețea pe care le servește pentru a accelera răspunsurile la cererile viitoare pentru aceeași gazdă la distanță.

notă: numit.fișierul conf este foarte particular în ceea ce privește sintaxa și mai ales punctuația. Punct și virgulă sunt folosite pentru a delimita sfârșitul unei intrări și sfârșitul unei strofe, precum și sfârșitul unei linii. Asigurați-vă că le adăugați corect, așa cum se arată în eșantioane.

pentru configurarea inițială a serverului de nume caching face câteva modificări la implicit/etc / numit.fișierul conf este necesar, deci editați fișierul folosind editorul preferat., Mai întâi, adăugați adresa IP a gazdei dvs. locale de testare la linia „ascultați portul 53”, așa cum se arată în Lista 2 de mai jos. Acest lucru permite numit să asculte pe adresa IP externă a gazdei dvs., astfel încât alte computere să o poată folosi și ca server de nume.

în mod implicit, BIND se referă la serverele de nume rădăcină ale Internetului pentru a localiza serverele de nume autoritare pentru un domeniu. Este posibil să specificați alte servere numite „expeditori” la care instanța locală BIND va trimite solicitări în locul serverelor root. Acest lucru crește posibilitatea de deturnare DNS.,

adăugați o linie „forwarders” așa cum se arată mai jos. Acest lucru spune serverul DNS cache în cazul în care pentru a obține adrese IP atunci când acestea nu sunt deja cache la nivel local. Adresele IP din lista de mai jos sunt pentru serverele DNS publice Google pe care le puteți utiliza ISP-ul local sau OpenDNS sau un alt server de nume public ca expeditor. Nu este necesar să se definească orice expeditori și, în acest caz, BIND ar folosi serverele root Internet așa cum sunt definite în fișierul /var/named/named.ca pentru a localiza serverele de nume autoritare pentru domenii dacă nu sunt definite expeditori., Dar pentru acest exercițiu, vă rugăm să definiți expeditorii așa cum am în Lista 2.

comentați linia IPV6 deoarece nu folosim IPV6 în mediul de laborator. Rețineți că „/ / ” două slash-uri înainte denotă comentarii în numele.fișier conf.

Lista 2:/etc / numit.conf fișier oferă configurația simplă necesară pentru a configura un server de nume cache. Liniile care trebuie adăugate sau modificate sunt evidențiate cu caractere aldine.

adăugați adresa rețelei locale, 192.168.0.0 / 24, la linia allow-query., Această linie specifică rețeaua(rețelele) din care interogările DNS vor fi acceptate de acest server DNS.

porniți serviciul nume

acum porniți serviciul numit și configurați serviciul numit pentru a porni la fiecare pornire. Eu folosesc comanda systemctl pe gazda mea Fedora 25, dar comanda poate fi diferită pe gazda dvs., în funcție de distribuția pe care o utilizați. Rețineți că numele serviciului BIND resolver este numit.,

systemctl enable named
systemctl start named

primul test, puteți efectua pentru a vă asigura că cache server de nume este de lucru este de a utiliza sap pentru a localiza baza de date DNS informații pentru wally2.both.org. Pentru a testa în continuare tău cache server de nume, de a folosi sape comandă pentru a obține Adresa IP(es) pentru unele comune de pe Internet site-uri web, cum ar fi www.opensource.com, CNN, cu Fir, și altele care iti place. Rezultatele ar trebui să arate acum gazda dvs. ca server de răspuns.,

în acest moment, serverul dvs. de nume de cache va rezolva corect gazdele de pe Internet și acest lucru se datorează faptului că acele solicitări DNS pentru gazdele publice sunt redirecționate către serverele de nume publice Google—consultați linia „expeditori” din numit.conf. Cu toate acestea, sunteți încă dependent de fișierul /etc/hosts pentru serviciile de nume interne. Crearea unui server de nume principal poate rezolva această problemă.

crearea unui server de nume primar

după ce creați un server de nume în cache, transformarea acestuia într-un server de nume primar cu drepturi depline nu este prea dificilă., Un server de nume principal este sursa autoritară pentru domeniul pe care îl reprezintă.

trebuie să schimbați numele.conf din nou și de a crea un cuplu de fișiere noi. Veți crea un domeniu numit Example.com, care este un nume de domeniu rezervat pentru scopuri de exemplu în documente ca acesta. În Example.com domeniul are o adresă IP pe Internet și un site web foarte rar, dar puteți utiliza numele în restul proiectului dvs. de laborator fără a cauza probleme nimănui. Vei folosi Example.com domeniu ca nume de domeniu intern pentru restul acestui exercițiu.,cele doua fisiere noi pe care le vei crea sunt fisierele forward si reverse zone, pe care le vei plasa in directorul /var/named. Această locație este specificată de Directiva „director”din numele.fișier de configurare conf.

creați fișierul forward zone

fișierul forward zone conține înregistrări „A” care asociază numele gazdelor din zonă, aka domain, cu adresele lor IP respective. De asemenea, poate conține înregistrări CNAME, care sunt pseudonime pentru numele de gazdă reale din înregistrările A și înregistrări MX pentru serverele de poștă.

creați un fișier de bază forward zone, / var/named / example.com.,și adăugați următoarele linii la ea. Fișierul dvs. de zonă ar trebui să arate ca fișierul de zonă eșantion din lista 3, de mai jos, când ați terminat.

; Authoritative data for example.com zone
;
$TTL 1D
@ IN SOA epc.example.com root.epc.example.com. (
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
$ORIGIN example.com.
example.com. IN NS epc.example.com.
epc IN A 127.0.0.1
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
test1 IN A 192.168.25.21
t1 IN CNAME test1
test2 IN A 192.168.25.22
test3 IN A 192.168.25.23
test4 IN A 192.168.25.24
; Mail server MX record
example.com. IN MX 10 mail.example.com.

Listare 3: înainte de fișiere zonă pentru Example.com domeniu conține nume de gazdă și adresele lor IP pentru acest domeniu.

prima linie non-comentariu în listarea 3 este timpul pentru a trăi specificator, care, în acest caz, este o zi pentru toate înregistrările care nu sunt specificate altfel. D vine de la Day. Specificatorii din linia SOA (Start of Authority) sunt la fel de evidenti., Detaliile parametrilor din înregistrarea SOA sunt descrise în detaliu aici.

înregistrarea NS trebuie să aibă FQDN (nume de domeniu complet calificat) al gazdei pe care efectuați acest proiect de laborator. De asemenea, trebuie să existe o înregistrare A În fișier cu o adresă IP validă pentru gazdă. În acest caz, ar trebui să utilizați adresa IP localhost din 127.0.0.1.

intrările prezentate mai sus vă vor oferi câteva nume de gazdă cu care să experimentați.

asigurați-vă că utilizați data de astăzi și adăugați un contor care începe la 01 pentru numărul de serie. Numărul de serie de mai sus este prima modificare Din 4 martie 2017., Numărul de serie este incrementat ori de câte ori fișierul zonă este schimbat. Dacă ar exista servere de nume secundare care l-au folosit pe acesta pentru un primar, acestea nu ar fi actualizate decât dacă numărul de serie este incrementat.

adăugați fișierele zonei înainte la nume.conf

înainte ca serverul DNS să funcționeze, cu toate acestea, trebuie să creați o intrare în /etc/numită.conf care va indica noul fișier zonă. Adăugați următoarele linii sub intrarea pentru zona de indicii de nivel superior, dar înainte de liniile „include”.

zone "example.com" IN {
type master;
file "example.com.zone";
};

listarea 4: Adăugați aceste linii la numele.fișier conf pentru a adăuga exemplul.,fișier zona com la configurația resolver.

acum reporniți numit pentru a face aceste modificări să aibă efect. Testați-vă serverul de nume utilizând comenzile dig și nsloookup pentru a obține adresele IP pentru gazdele pe care le-ați configurat în fișierul forward zone. Rețineți că gazda nu trebuie să existe în rețea pentru comenzile dig și nslookup pentru a returna o adresă IP.

rețineți că utilizarea FQDN pentru aceste comenzi este necesară, cu excepția comenzii nslookup, atâta timp cât domeniul și intrările de căutare ale Example.com sunt furnizate în/etc / resolv.fișier conf., În acest caz, probabil că nu sunt, așa că folosiți FQDNs pentru toate testele din acest proiect.

utilizarea serverelor de nume rădăcină

observați că serverele de nume rădăcină sunt date ca servere autoritare pentru Amazon.com căutare. Dar amintiți-vă că utilizați serverele de nume publice Google ca expeditori. Acum comentați linia expeditorilor în nume.conf și reporniți numit. Rulați din nou comenzile de mai sus pentru a compara rezultatele returnate. Rezultatele ar trebui să arate similar cu cele de mai jos în lista 5.

listă 5: rezultatele unei căutări pe www.amazon.,com au unele informații interesante, inclusiv ori să trăiască pentru diferitele tipuri de înregistrări.când am făcut acest lucru, primul apel pentru a rezolva adresa externă pentru Amazon a luat 3857ms în timp ce datele au fost localizate și returnate. Rezultatele ulterioare pentru a efectua aceeași interogare a fost 1ms, care arată avantajul cache resolver rezultate la nivel local. Observați numerele 1800, 300 și 60 în liniile secțiunii de răspuns și 1831 în liniile secțiunii de autoritate—acestea sunt TTL (timpii de trăit) în câteva secunde., Dacă efectuați căutarea de mai multe ori, aceste numere se vor schimba, arătând perioada de timp în care înregistrările au rămas să trăiască în memoria cache locală.

crearea fișierului zonă inversă

o zonă inversă pentru domeniul dvs. va oferi posibilitatea de a face căutări inverse. Multe organizații nu fac aceste intern, dar căutări inversă poate fi de ajutor în a face determinarea problemei. Multe configurații de combatere a spamului, cum ar fi SpamAssassin, caută căutări inverse pentru a verifica serverele de e-mail valide.

creați fișierul zonei inverse,/var/named / example.com.rev și adăugați următorul conținut., Asigurați-vă că utilizați un număr de serie corespunzător.

; Authoritative data for example.com reverse zone
;
$TTL 1D
@ IN SOA test1.example.com root.test1.example.com. (
2017031501 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS epc.example.com.
example.com. IN NS epc.example.com.
1 IN PTR mail.example.com.
1 IN PTR server.example.com.
21 IN PTR test1.example.com.
22 IN PTR test2.example.com.
23 IN PTR test3.example.com.
24 IN PTR test4.example.com.

listarea 6: Utilizați acest fișier de zonă inversă, example.com.rev, pentru serverul dvs. de nume.

ai putea numi, de asemenea, fișierul zona inversă/var/numit / 25.168.192.in-addr.arpa, care urmează convenții mai vechi. Puteți să-l numiți de fapt orice doriți, deoarece îl veți indica în mod explicit în numele.conf fișier, dar folosind una dintre cele două convenții va face mai ușor pentru alții să urmeze munca ta.

adăugați zona inversă la numele.conf:

zone "25.168.192.in-addr.arpa" IN {
type master;
file "example.com.rev";
};

listarea 7: adăugarea acestei strofe la numele.,conf fișier permite căutări inverse.

adăugați strofa în lista 7 la/etc / numit.conf fișier pentru a indica noua zonă inversă. Acum reîncărcați numit și testați zona inversă folosind comenzile din lista 8. Rezultatele dvs. ar trebui să arate similar cu cele de mai jos.

listarea 8: După repornirea numită, ar trebui să vedeți rezultate similare cu acestea atunci când efectuați o căutare inversă pe o adresă IP din zona inversă.asigurați-vă că testați unele dintre celelalte intrări inverse din rețeaua dvs. și încercați, de asemenea, următoarele, precum și alte căutări inverse cu care doriți să experimentați., Opțiunea-x înseamnă căutare inversă.

dig -x 192.168.25.23
dig -x 192.168.25.1

rețineți că nu toate gazdele care au intrări în zona înainte trebuie să aibă intrări în zona inversă, dar se face pentru rezultate mai consistente în cazul în care o fac.

în acest moment, aveți un server de nume de lucru folosind BIND. Cu toate acestea, gazdele externe nu pot utiliza încă acest server de nume, deoarece firewall-ul nu ar trebui să fie încă configurat pentru a permite solicitările DNS.

Configurarea IPTables pentru DNS

puteți face acest pas dacă doriți ca alte gazde din rețeaua locală să utilizeze gazda dvs. ca server de nume.,

firewall-ul gazdei tale de test blochează probabil accesul la serviciile gazdei pentru nume. IPTables trebuie să fie configurat pentru a permite UDP (User Datagram Protocol) pachete de intrare pe serverul de nume pentru ca alte gazde să-l folosească pentru rezolvarea numelui. Utilizați următoarele comenzi pentru a adăuga intrările necesare și a le salva.

adăugați o regulă la firewall-ul IPTables sau firewalld care permite pachetele primite pe portul 53 (domeniu) pentru UDP și salvați noul set de reguli., Asigurați-vă că introduceți noua regulă după-A intrare-M state –State legate,stabilit-J ACCEPT line, deci va trebui să numărați numărul de linii de intrare din tabelul de filtrare pentru a face acest lucru. Numărul 7 din următoarea comandă înseamnă că această regulă va fi introdusă în poziția numărul 7 în regulile de intrare existente.

iptables -t filter -I INPUT 7 -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

puteți salva noile reguli de firewall dacă doriți și ați face-o dacă aceasta ar fi o instalare permanentă și nu un proiect de laborator. Apoi testați acest lucru de la unul dintre celelalte gazde folosind comanda din lista 9, de mai jos., Argumentul @epc spune comenzii dig să utilizeze serverul de nume specificat cu numele de gazdă epc. Ar trebui să înlocuiți fie adresa IP a serverului DNS pe care tocmai l-ați creat, fie un nume de gazdă rezolvabil în rețeaua dvs. care indică noul dvs. server de nume. Desigur, puteți adăuga întotdeauna acel nume de gazdă cu adresa IP în fișierul/etc / hosts al gazdei pe care o utilizați pentru testul de la distanță.

listarea 9: testarea rezolvatorului de nume pe care l-ați creat dintr-o altă gazdă din aceeași rețea.,

curățare

pentru curățare, trebuie să efectuați următoarele sarcini utilizând instrumentele adecvate pentru distribuția dvs. Poate doriți doar să păstrați acest server de nume pentru rețeaua dvs. dacă nu aveți deja unul.

  1. restaurați fișierul original/etc / hosts.
  2. Stop numit pe resolver host folosit pentru acest proiect de laborator.
  3. dezactivați serviciul numit.
  4. ștergeți fișierele de zonă.
  5. restaurați originalul numit.fișier conf.
  6. restaurați rezolvarea originală.fișier conf.,

gânduri finale

funcționarea serviciilor de nume mi s-a părut foarte obscură până când am creat de fapt un server de nume pentru rețeaua mea folosind BIND. Este destul de simplu și poate îmbunătăți performanța de căutare DNS. Având propriul server de nume poate preveni, de asemenea, multe dintre întreruperile relativ minore, dar enervante ale serviciului de nume cauzate de serverele de nume ISP prost întreținute.

rețineți că, chiar dacă micul meu EeePC rulează cu utilizarea procesorului 100% pentru SETI@Home, acesta răspunde extrem de rapid la solicitările de rezolvare., Ar trebui să puteți încerca acest proiect pe orice gazdă Linux pe care o aveți disponibilă cu un impact minuscul. Sper că mulți dintre voi vor încerca să vă configurați propriul server de nume și să experimentați cu acesta. Specificul instalării serverului dvs. de nume va depinde de detaliile gazdei și rețelei dvs.