w poprzednim artykule z tej dwuczęściowej serii, Wprowadzenie do DNS (Domain Name System), opisałem, jak struktura bazy danych DNS i jak skonfigurować usługi nazw na kliencie. Wymieniłem również i opisałem niektóre z bardziej powszechnych rekordów DNS, które możesz napotkać podczas budowania serwera nazw lub po prostu próbując zinterpretować wyniki polecenia dig.

w tym artykule pokażę Ci jak zbudować własny serwer nazw za pomocą BIND (Berkeley Internet Name Domain)., Nie jest to tak trudne, jak mogłoby się wydawać, zwłaszcza, że można to zrobić w dwóch etapach.

w tym artykule dowiesz się, jak utworzyć buforujący serwer nazw, a następnie przejdziesz dalej i dowiesz się, jak uaktualnić go do kompletnego podstawowego (głównego) serwera nazw domen dla Twojej sieci, wraz z plikami strefowymi do przodu i do tyłu.

Konfiguracja serwera DNS za pomocą BIND

Konfiguracja serwera nazw za pomocą BIND jest dość prosta, więc pokażę Ci, jak to zrobić na dowolnym komputerze, który możesz mieć do eksperymentowania., Ten mały projekt laboratoryjny pokaże Ci, jak zainstalować i skonfigurować BIND na komputerze jako buforujący serwer nazw, przetestować go, a następnie skonfigurować jako podstawowy serwer nazw z plikiem strefowym, którego możesz użyć jako resolver nazwy dla sieci lub po prostu do testowania.

skonfigurowanie serwera nazw na dowolnym dostępnym komputerze GNU / Linux jest technicznie możliwe, ponieważ nie będzie kolidować z innymi hostami w sieci ani ich działaniem. Jednak prawdopodobnie nie powinieneś tego robić na komputerze, którego nie posiadasz lub nie masz prawa do modyfikowania, chyba że masz na to wyraźną zgodę.,

moja konfiguracja

do wykonania wszystkich zadań w tym projekcie laboratoryjnym potrzebny jest tylko jeden komputer. Używam tej konfiguracji na moim znacznie potężniejszym ThinkPad, ponieważ serwery nazw dostarczane przez DHCP (Dynamic Host Configuration Protocol), gdy podłączam się do sieci innych niż domowe za pomocą połączeń przewodowych lub bezprzewodowych, czasami mogą być zawodne. Aby pokazać, że prawie każdy host może działać dobrze jako serwer nazw, przetestowałem ten projekt na Starym netbooku ASUS EeePC 900.,

użyję prywatnego adresu IP mojego Asusa do tego projektu, ale powinieneś użyć adresu IP hosta, którego używasz.

plik hosts

najpierw przyjrzyjmy się plikowi /etc/hosts. W domyślnym stanie powinny być tylko dwie linie w pliku hosts, pierwsze dwie linie widoczne na liście 1, poniżej.

Listing 1: możesz utrzymywać prosty plik hosts, aby wykonywać funkcję resolvera w małych sieciach.,

chociaż można dodać nazwy hostów i ich odpowiednie adresy IP, jak pokazano w liście 1, nie jest to optymalne rozwiązanie do nazywania usług, szczególnie podczas podróży. Jeśli w pliku hosts znajdują się inne wpisy, może być konieczne skomentowanie ich na czas trwania projektu, jeśli zakłócają one nazewnictwo lub adresy IP. Większość z Was nie będzie miała żadnych wpisów innych niż dwie domyślne linie.,

przygotowanie

buforujący serwer nazw nie może zastąpić/etc / hosts do rozwiązywania nazw hostów w sieci wewnętrznej; jednak w porównaniu z używaniem ISP lub innego serwera nazw publicznych buforujący serwer nazw może poprawić wydajność podczas rozwiązywania powszechnie używanych nazw zewnętrznych, takich jak www.cnn.com. najlepsze jest to, że konfiguracja serwera nazw buforowania jest dość łatwa.

przed rozpoczęciem należy przygotować się wykonując następujące czynności.

najpierw wykonaj kopie zapasowe plików /etc/hosts, /etc/named.conf, resolv.conf i/etc/sysconfig / iptables.,

Jeśli nie są one jeszcze zainstalowane, użyj menedżera pakietów twojej dystrybucji, aby zainstalować następujące Bind RPMs: bind, bind-chroot i bind-utils. Aby umożliwić hostowi laboratoryjnemu korzystanie z buforującego serwera nazw, należy dodać linię name server, która wskazuje na własny host w pliku / etc / resolv.conf. Na przykład, jeśli twój adres IP hosta laboratoryjnego to 192.168.0.203, podobnie jak mój epc, Dodaj następujący wiersz na górze listy nazw serwerów w /etc / resolv.conf:

name server 192.168.0.203

pamiętaj, aby użyć adresu IP hosta, na którym wykonujesz ten projekt.,

Możesz użyć adresu IP swojego localhost, 127.0.0.1 zamiast zewnętrznego adresu IP. Powinieneś również komentować wszelkie linie wskazujące na inne hosty jako serwery nazw. Pamiętaj, aby zapisać poprawioną rozdzielczość.plik conf.

zmiany te wejdą w życie natychmiast i nie jest wymagany restart ani restart usługi. Teraz spróbuj ping wspólnego hosta publicznego, który nie blokuje pakietów ICMP (Internet Control Message Protocol); zapraszam do korzystania z mojej zapory, która jest Raspberry Pi.,

ping wally2.both.org

powinieneś uzyskać błąd „nieznany host” lub „nazwa lub usługa nieznana”, ponieważ obecnie nie masz działającej usługi DNS lub resolver zdefiniowanej w resolv.plik conf. Teraz użyj polecenia dig, aby sprawdzić, czy name services działa.

dig wally2.both.com

powinien pojawić się błąd, ” czas połączenia jest wyłączony; nie można dotrzeć do żadnych serwerów.”

Skonfiguruj buforujący serwer nazw

buforujący serwer nazw nie jest autorytatywnym źródłem dla żadnej domeny., Po prostu buforuje wyniki wszystkich żądań resolvera nazw z sieci, której służy, aby przyspieszyć odpowiedzi na przyszłe żądania tego samego zdalnego hosta.

Uwaga: nazwa.plik conf jest bardzo szczególny pod względem składni, a zwłaszcza interpunkcji. Średniki są używane do wyznaczania końca wejścia i końca strofy, a także końca linii. Pamiętaj, aby dodać je poprawnie, jak pokazano w próbkach.

do wstępnej konfiguracji serwera nazw buforujących dokonującej kilku modyfikacji domyślnego /etc/named.plik conf jest niezbędny, więc edytuj ten plik za pomocą ulubionego edytora., Po pierwsze, Dodaj adres IP lokalnego hosta testowego do linii „listen-on port 53”, Jak pokazano w liście 2, poniżej. Umożliwia to named nasłuchiwanie zewnętrznego adresu IP Twojego hosta, dzięki czemu inne komputery mogą używać go również jako serwera nazw.

domyślnie BIND odnosi się do głównych serwerów nazw w Internecie, aby zlokalizować autorytatywne serwery nazw dla domeny. Możliwe jest określenie innych serwerów, które są nazywane „spedytorami”, do których lokalna instancja BIND będzie wysyłać żądania zamiast serwerów root. Zwiększa to możliwość przejęcia DNS.,

Dodaj linię „spedytorów”, jak pokazano poniżej. Informuje to serwer DNS buforowania, gdzie uzyskać adresy IP, gdy nie są one jeszcze buforowane lokalnie. Adresy IP na poniższej liście są przeznaczone dla publicznych serwerów DNS Google, których możesz użyć jako spedytora lokalnego ISP lub OpenDNS lub innego serwera nazw publicznych. Nie jest konieczne definiowanie żadnych spedytorów i w takim przypadku BIND użyłby internetowych serwerów głównych zdefiniowanych w pliku / var/named / named.ca do zlokalizowania autorytatywnych serwerów nazw dla domen, jeśli nie zostaną zdefiniowane żadne spedytory., Ale dla tego ćwiczenia, proszę określić spedytorów, jak mam w liście 2.

Skomentuj linię IPV6, ponieważ nie używamy IPV6 w środowisku laboratoryjnym. Zauważ, że dwa ukośniki „/ / ” oznaczają komentarze w nazwie.plik conf.

Listing 2: The/etc / named.plik conf zapewnia prostą konfigurację wymaganą do skonfigurowania buforującego serwera nazw. Linie, które należy dodać lub zmienić, są zaznaczone pogrubioną czcionką.

Dodaj adres sieci lokalnej, 192.168.0.0 / 24, do linii allow-query., Ta linia określa sieć(sieci), z których zapytania DNS będą akceptowane przez ten serwer DNS.

Uruchom usługę nazwaną

Teraz uruchom usługę nazwaną i skonfiguruj usługę nazwaną tak, aby uruchamiała się przy każdym rozruchu. Używam polecenia systemctl na moim komputerze Fedora 25, ale polecenie może być inne na twoim komputerze, w zależności od używanej dystrybucji. Zauważ, że nazwa usługi bind resolver została nazwana.,

systemctl enable named
systemctl start named

pierwszym testem, który możesz wykonać, aby upewnić się, że działa serwer nazw buforowania, jest użycie dig do zlokalizowania Informacji bazy danych DNS dla wally2.both.org. aby jeszcze bardziej przetestować serwer nazw buforowania, użyj polecenia dig, aby uzyskać adres IP dla niektórych popularnych stron internetowych, takich jak www.opensource.com, CNN, Wired i inne, które lubisz. Wyniki powinny teraz pokazywać twój host jako odpowiadający serwer.,

w tym momencie Twój buforujący serwer nazw poprawnie rozwiąże hosty w Internecie, a to dlatego, że te żądania DNS dla hostów publicznych są przesyłane do publicznych serwerów nazw Google—patrz linia „spedytorów” w nazwie.conf. Jednak nadal jesteś zależny od pliku/etc / hosts dla wewnętrznych usług nazw. Utworzenie podstawowego serwera nazw może rozwiązać ten problem.

Tworzenie podstawowego serwera nazw

Po utworzeniu buforującego serwera nazw, przekształcenie go w pełnoprawny podstawowy serwer nazw nie jest zbyt trudne., Główny serwer nazw jest autorytatywnym źródłem reprezentowanej przez niego domeny.

musisz zmienić nazwę.conf ponownie i utworzyć kilka nowych plików. Utworzysz domenę o nazwie Example.com, która jest nazwą domeny zarezerwowaną na przykład w dokumentach takich jak ten. Na Example.com domena ma adres IP w Internecie i bardzo rzadką stronę internetową, ale możesz użyć tej nazwy w pozostałej części projektu laboratoryjnego, nie sprawiając nikomu problemów. Użyjesz Example.com domena jako wewnętrzna nazwa domeny do końca tego ćwiczenia.,

dwa nowe pliki, które utworzysz, to pliki strefy forward I reverse, które umieścisz w katalogu/var / named. Ta lokalizacja jest określona przez dyrektywę „directory” w nazwie.plik konfiguracyjny conf.

Utwórz plik strefy forward

plik strefy forward zawiera rekordy „a”, które łączą nazwy hostów w strefie, czyli domeny, z ich odpowiednimi adresami IP. Może również zawierać rekordy CNAME, które są aliasami dla rzeczywistych nazw hostów w rekordach A i rekordów MX dla serwerów pocztowych.

Utwórz podstawowy plik strefy forward,/var/named / example.com.,strefy i dodaj do niej następujące linie. Twój plik strefy powinien wyglądać jak przykładowy plik strefy w liście 3, poniżej, po zakończeniu.

; 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.

Listing 3: plik strefy forward dla Example.com domena zawiera nazwy hostów i ich adresy IP dla tej domeny.

pierwsza linia Bez komentarza w notowaniu 3 to czas na żywo, który w tym przypadku jest jednym dniem dla wszystkich rekordów, które nie są określone inaczej. D oznacza dzień. Specyfikatory w linii SOA (Start of Authority) są równie oczywiste., Szczegóły parametrów w rekordzie SOA są opisane tutaj.

rekord NS musi posiadać FQDN (Fully Qualified Domain Name) hosta, na którym wykonujesz ten projekt laboratoryjny. W pliku musi być również rekord A z prawidłowym adresem IP dla hosta. W takim przypadku należy użyć adresu IP localhost 127.0.0.1.

powyższe wpisy dają Ci kilka nazw hostów, z którymi możesz eksperymentować.

pamiętaj, aby użyć dzisiejszej daty i dołączyć licznik zaczynający się od 01 dla numeru seryjnego. Numer seryjny powyżej to pierwsza zmiana z 4 marca 2017 roku., Numer seryjny jest zwiększany przy każdej zmianie pliku strefy. Gdyby istniały serwery nazw drugorzędnych, które używały tej nazwy jako podstawowej, nie byłyby one aktualizowane, chyba że numer seryjny zostanie zwiększony.

Dodaj pliki strefy forward do nazw.conf

zanim twój serwer DNS będzie działał, musisz jednak utworzyć wpis w /etc/named.conf, który wskaże Twój nowy plik strefy. Dodaj następujące linie poniżej wpisu dla strefy podpowiedzi najwyższego poziomu, ale przed liniami „Dołącz”.

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

Listing 4: Dodaj te linie do nazwanych.plik conf do dodania przykładu.,plik com zone do konfiguracji resolvera.

Teraz uruchom ponownie nazwane, aby te zmiany weszły w życie. Przetestuj swój serwer nazw za pomocą poleceń dig i nsloookup, aby uzyskać adresy IP dla hostów skonfigurowanych w pliku strefy forward. Należy pamiętać, że host nie musi istnieć w sieci, aby polecenia dig i nslookup zwróciły adres IP.

należy pamiętać, że używanie FQDN dla tych poleceń jest konieczne z wyjątkiem polecenia nslookup, o ile wpisy domeny i wyszukiwania Example.com są podane w /etc / resolv.plik conf., W tym przypadku prawdopodobnie nie są, więc po prostu użyj FQDNs dla wszystkich testów w tym projekcie.

korzystając z serwerów nazw głównych

zauważ, że serwery nazw głównych są podane jako serwery autorytatywne dla Amazon.com / align = „left” / Pamiętaj jednak, że używasz publicznych serwerów nazw Google jako spedytorów. Teraz skomentuj linię spedytorów w nazwie.conf i restart nazwane. Uruchom powyższe polecenia ponownie, aby porównać zwracane wyniki. Wyniki powinny wyglądać podobnie do tych poniżej w liście 5.

Listing 5: the results of a lookup on www.Amazonka.,com mają kilka ciekawych informacji, w tym czasy, aby żyć dla różnych typów rekordów.

Kiedy to zrobiłem, pierwsze wezwanie do rozwiązania zewnętrznego adresu dla Amazon zajęło 3857ms, podczas gdy dane były zlokalizowane i zwrócone. Kolejne wyniki do wykonania tego samego zapytania to 1ms, co pokazuje zaletę buforowania wyników resolver lokalnie. Zwróć uwagę na liczby 1800, 300 i 60 w liniach sekcji odpowiedzi i 1831 w liniach sekcji autorytetów—są to TTL (czasy życia) w sekundach., Jeśli przeszukiwanie zostanie przeprowadzone wiele razy, liczby te ulegną zmianie, pokazując ilość czasu, jaki rekordy pozostały do życia w lokalnej pamięci podręcznej.

Tworzenie pliku odwróconej strefy

odwrócona strefa dla Twojej domeny zapewni możliwość odwróconego wyszukiwania. Wiele organizacji nie robi tych wewnętrznie, ale reverse lookups może być pomocne w robieniu określenia problemu. Wiele konfiguracji walki ze spamem, takich jak SpamAssassin, szuka odwróconych wyszukiwań, aby zweryfikować poprawne serwery poczty e-mail.

Utwórz plik strefy odwrotnej, / var / named / example. com. rev i dodaj następującą zawartość., Pamiętaj, aby użyć odpowiedniego numeru seryjnego.

; 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.

Listing 6: Użyj tego pliku odwróconej strefy, example.com.rev, dla serwera nazw.

Możesz również nazwać swój plik strefy odwrotnej /var/named/25.168.192.in-addr.arpa, który jest zgodny ze starszymi konwencjami. Możesz właściwie nazwać to, co chcesz, ponieważ wskażesz na to wyraźnie w nazwie.plik conf, ale użycie jednej z dwóch konwencji ułatwi innym śledzenie Twojej pracy.

Dodaj strefę odwrotną do nazwanej.conf:

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

Listing 7: dodanie tej strofy do nazwy.,plik conf umożliwia wyszukiwanie odwrotne.

Dodaj strofę w notowaniu 7 do/etc / named.plik conf wskazujący nową strefę odwrotną. Teraz przeładuj nazwę i przetestuj swoją strefę odwrotną za pomocą poleceń z Listing 8. Twoje wyniki powinny wyglądać podobnie do tych poniżej.

Listing 8: po ponownym uruchomieniu named powinieneś zobaczyć wyniki podobne do tych, gdy wykonujesz odwrotne wyszukiwanie na adresie IP w strefie odwrotnej.

pamiętaj, aby przetestować niektóre z innych odwrotnych wpisów w Twojej sieci, a także wypróbować następujące, a także inne odwrotne wyszukiwania, z którymi chcesz eksperymentować., Opcja-x oznacza odwrotne wyszukiwanie.

dig -x 192.168.25.23
dig -x 192.168.25.1

zauważ, że nie wszystkie hosty, które mają wpisy w strefie forward muszą mieć wpisy w strefie odwrotnej, ale to sprawia, że bardziej spójne wyniki, jeśli tak się stanie.

w tym momencie masz działający serwer nazw używając BIND. Jednak hosty zewnętrzne nie mogą jeszcze używać tego serwera nazw, ponieważ zapora sieciowa nie powinna być jeszcze skonfigurowana tak, aby zezwalała na żądania DNS.

Konfigurowanie IPTables dla DNS

możesz zrobić ten krok, jeśli chcesz, aby inne hosty w Twojej sieci lokalnej używały twojego hosta jako serwera nazw.,

zapora na Twoim Hostie testowym prawdopodobnie blokuje dostęp do twojego hosta dla usług nazw. IPTables musi być skonfigurowany tak, aby zezwalać na pakiety UDP (User Datagram Protocol) przychodzące na serwerze nazw, aby inne hosty mogły go używać do rozpoznawania nazw. Użyj następujących poleceń, aby dodać wymagane wpisy i zapisać je.

Dodaj regułę do zapory IPTables lub firewalld, która pozwala na przychodzące pakiety na porcie 53 (domena) dla UDP i zapisz nowy zestaw reguł., Pamiętaj, aby wstawić nową regułę po-A INPUT-m state –State RELATED, ustanowionej linii-j ACCEPT, więc będziesz musiał policzyć liczbę linii wejściowych w tabeli filtrów, aby to zrobić. Liczba 7 w poniższym poleceniu oznacza, że reguła ta zostanie wstawiona na pozycję numer 7 w istniejących regułach wprowadzania.

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

Możesz zapisać nowe reguły zapory sieciowej, jeśli chcesz, i zrobiłbyś to, gdyby była to stała instalacja, a nie projekt laboratoryjny. Następnie przetestuj to z jednego z innych hostów za pomocą polecenia na liście 9, poniżej., Argument @epc mówi komendzie dig, aby używała podanej nazwy serwera z nazwą hosta epc. Należy zastąpić adres IP właśnie utworzonego serwera DNS lub rozwiązalną nazwę hosta w sieci, która wskazuje na nowy serwer nazw. Oczywiście zawsze możesz dodać nazwę hosta wraz z jego adresem IP do pliku /etc/hosts hosta, którego używasz do zdalnego testu.

Listing 9: testowanie nazwy resolvera, którą utworzyłeś z innego hosta w tej samej sieci.,

Cleanup

w przypadku cleanup należy wykonać następujące zadania przy użyciu narzędzi odpowiednich dla danej dystrybucji. Możesz po prostu chcieć zachować ten serwer nazwy dla swojej sieci, jeśli jeszcze go nie masz.

  1. Przywróć oryginalny plik/etc / hosts.
  2. Stop nazwany na Hostie resolvera używanym w tym projekcie laboratoryjnym.
  3. Wyłącz nazwaną usługę.
  4. Usuń pliki stref.
  5. Przywróć oryginalną nazwę.plik conf.
  6. Przywróć oryginalną rozdzielczość.plik conf.,

myśli końcowe

funkcjonowanie usług nazw wydawało mi się bardzo niejasne, dopóki nie stworzyłem serwera nazw dla mojej sieci za pomocą BIND. Jest to dość proste i może poprawić wydajność wyszukiwania DNS. Posiadanie własnego serwera nazw może również zapobiec wielu stosunkowo niewielkim, ale irytującym przerwom w usługach nazw spowodowanych przez źle utrzymane serwery nazw ISP.

zauważ, że chociaż mój mały EeePC działa ze 100% zużyciem procesora dla Seti@Home, bardzo szybko reaguje na żądania rozdzielczości., Powinieneś być w stanie wypróbować ten projekt na dowolnym hostu Linuksa, który masz dostępny z minimalnym wpływem. Mam nadzieję, że wielu z was spróbuje założyć własny serwer nazw i poeksperymentować z nim. Specyfika instalacji serwera nazw zależy od szczegółów hosta i sieci.