Narzędzia użytkownika

Narzędzia witryny


Pasek boczny


O mnie


Dydaktyka:

Feedback


sk2:dns-config

To jest stara wersja strony!


Przygotowanie do pierwszej części laboratoriów

Krok 1 Pobierz skrypt dns_lab_setup.sh i wykonaj go z uprawnieniami roota, podając jako argument adres IP podany przez prowadzącego. Możesz użyć komend:

curl -JO https://www.cs.put.poznan.pl/jkonczak/_media/sk2:dns_lab_setup.sh
chmod +x dns_lab_setup.sh
sudo ./dns_lab_setup.sh 150.254.32.…

Krok 2 Wykonaj z uprawnieniami roota komendę rndc-confgen -a

Wybrane programy implementujące serwer DNS

W trakcie laboratoriów jest używany serwer DNS BIND w wersji 9, o którego rozwój dba ISC.
BIND9 pozwala tworzyć zarówno serwery authoritative jak i caching (i serwery pełniące obie role naraz, co zwykle jest odradzane).
Standardowa nazwa głównego programu BIND to named (od name daemon).

Inne popularne authoritative DNS to NSD i Knot DNS.
Inne popularne caching DNS to Unbound czy dnsmasq (który łączy w sobie serwer DNS i DHCP).

Format plików stref (zone files) opisujących informacje znajdujące się w DNS (a pochodzący z BIND) stał się standardem używanym do konfiguracji rekordów DNS w większości serwerów DNS.

Normalnie serwery DNS – jak inne usługi systemowe – są uruchamiane przez odpowiednie mechanizmy systemu operacyjnego, używają systemowych ścieżek do plików konfiguracji wewnątrz katalogu /etc i jednolitych metod logowania informacji o działaniu.
Dla uproszczenia w trakcie laboratoriów serwer BIND9 dla ułatwienia będzie uruchamiany pierwszoplanowo z użyciem wskazanego pliku konfiguracyjnego i opcjami nakazującymi wypisywanie informacji diagnostycznych na standardowe wyjście.

Przykładowa konfiguracja serwera cache / forward

Przykładowa konfiguracja serwera serwera cache znajduje się poniżej:

bind9-caching-server.conf
options {
  querylog yes;                   // loguje wszystkie zapytania
  recursion yes;                  // pozwala wykonywać zapytania rekursywne
  dnssec-validation no;           // wyłącza sprawdzanie podpisów DNSSEC
  // allow-query { any; };        // ogranicza kto może odpytywać serwer
  // allow-recursion { any; };    // ogranicza kto może wykonywać zapytania rekurencyjne
  // forwarders { 150.254.5.4; }; // ustawia, żeby w pierwszej kolejności pytać wskazany serwer,
                                  // a dopiero potem samemu wykonywać zapytanie iteracyjne
  // forward only;                // wyłącza dalsze rozwiązywanie jeśli forwarder nie udzieli odpowiedzi 
};

Zadanie 1

  1. stwórz nowy katalog i umieść w nim powyższy plik konfiguracyjny
  2. dodaj wszystkim uprawnienia do zapisu w tym katalogu (np. chmod a+w .)
  3. uruchom serwer DNS z tą konfiguracja komendą:
    named -4 -g -c bind9-caching-server.conf
  4. upewnij się że program działa i po uruchomieniu wyświetlił running oraz nie przerywaj jego działania
  5. odpytaj serwer DNS o wybrane domeny – wykonane zapytania powinny zostać zalogowane na wyjściu serwera

Program rndc pozwala na kontrolę działającego serwera DNS.

Zadanie 2 Wykonaj komendę rndc dumpdb -cache. W katalogu z którego została uruchomiona komenda named zostanie utworzony nowy plik. Obejrzyj jego zawartość.

Rozdział o konfiguracji serwerów caching w dokumentacji BIND9

Pliki stref i rekord SOA

Serwery DNS używają do zapisu informacji o domenie plików stref, w których są kolejno umieszczane rekordy zasobowe.
Zapis rekordów w pliku strefy jest identyczny do rekordów zwracanych przez komendę dig, ale format pliku strefy pozwala na stosowanie skrótów i uproszczeń.

Poniżej zaprezentowane są dwa równoważne pliki konfiguracyjne dla strefy example.com:



example.com.       3600  IN  SOA    ns.example.com. admin.example.com. 2024121600 21600 3600 604800 86400
example.com.       3600  IN  NS     ns.example.com.
example.com.       3600  IN  A      150.254.30.30
ns.example.com.    3600  IN  A      150.254.32.130
ns.example.com.    3600  IN  AAAA   2001:808:201::32:130
a.b.example.com.  86400  IN  TXT    "hic sunt leones"
www.example.com.   3600  IN  CNAME  example.com.
rev.example.com.   3600  IN  CNAME  elpmaxe.moc.
$ORIGIN example.com.
$TTL 1H
@           IN  SOA    ns  admin  2024121600 6H 1H 1W 1D
            IN  NS     ns
            IN  A      150.254.30.30
ns          IN  A      150.254.32.130
            IN  AAAA   2001:808:201::32:130
a.b  86400  IN  TXT    "hic sunt leones"
www         IN  CNAME  @
rev         IN  CNAME  elpmaxe.moc.
Dozwolone uproszczenia/skróty:

  • @ to wartość poprzedniej dyrektywy $ORIGIN lub, jeśli żadnej nie było, nazwę strefy wskazaną w konfiguracji serwera DNS,
  • za każdą nazwą domenową niekończącą się kropką wstawiane jest .@,
  • brak nazwy domenowej oznacza powtórzenie nazwy z poprzedniego rekordu,
  • brak wartości TTL ustawia wartość z poprzedniej dyrektywy $TTL (w przypadku braku BIND9 bierze jedną z wartości z rekordu SOA).

Komentarze zaczynają się od ; (średnika) i kończą z końcem linii.

Jeżeli kilka serwerów DNS odpowiada za jakąś domenę, jeden z nich, nazywany master / primary jest konfigurowany ręcznie, pozostałe, zwane slave / secondary regularnie go odpytują o rekord SOA zawierający serial number (wersję pliku stref) i jeśli zobaczą nowszy serial, kopiują od serwera master plik stref.

Rekord SOA od którego musi zaczynać się domena ma składnię:

                    ; ns.example.com. jest głównym serwerem DNS dla domeny
                                     ; root@example.com. jest adresem e-mail administratora domeny
example.com.  IN SOA  ns.example.com.  root.example.com. (
    2015121600 ; serial number, czyli wersja pliku strefy
    6H         ; |konfigracja| czas odśweżania przez serwer slave (co ten czas slave pyta o SOA)
    1H         ; |dla serwera| czas odśweżania przez serwer slave jeśli poprzednia próba zawiodła
    1W         ; | DNS slave | czas po jakim serwer slave uzna że już nie zna domeny
    1D         ; czas przez który wolno cache'ować odpowiedzi "nie ma takiej poddomeny"
  )
Wartość serial number musi być ręcznie zwiększana przy każdej zmianie w pliku strefy. Bez tego serwery slave nie skopiują strefy.

Informacje o formacie plików stref na wikipedii, podsumowanie czym jest strefa na stronie cloudflare.

Przygotowanie do kolejnej części laboratoriów

Krok 1 Dodaj swojemu komputerowi adres 192.168.X.1/16 do urządzenia br0, gdzie X to numer twojego komputera.
Możesz to zrobić np. komendą: ip address add 192.168.X.1/16 dev br0

Krok 2 Przestaw używany przez system serwer DNS wykonując:

  • zmień w pliku /etc/sysconfig/network/config wartość dla NETCONFIG_DNS_STATIC_SERVERS na 192.168.0.1,
  • wykonaj komendę netconfig update -f,
  • sprawdź czy na początku pliku /etc/resolv.conf pojawił się podany adres IP.

Do zmiany wspomianego pliku możesz użyć komendy:
sed -i 's/NETCONFIG_DNS_STATIC_SERVERS="[^"]*"/NETCONFIG_DNS_STATIC_SERVERS="192.168.0.1"/' /etc/sysconfig/network/config

Krok 3 Pobierz plik dns-lab-lxc.tar.xz i rozpakuj go jako root w katalogu /var/lib/lxc.
Możesz to zrobić komendą: cd /var/lib/lxc && curl https://www.cs.put.poznan.pl/jkonczak/_media/sk2:dns-lab-lxc.tar.xz | tar xvJ
Jeżeli w katalogu były wcześniej pliki www, mx i www2, to usuń z tych katalogów zawartość podkatalogu rootfs-overlay.
Możesz to zrobić komendą: rm -rf /var/lib/lxc/{www,mx,www2}/rootfs-overlay/*

Krok 4 Wybierz sobie nazwę domenową:

  • [jedna osoba z rzędu] z domeny najwyższego poziomu .put, tzn. X.put
  • [kolejna osoba z rzędu] z domeny wybranej przez poprzednią osobę, tzn. X.Y.put
  • [kolejne osoba z rzędu] z domeny wybranej przez poprzednią osobę, tzn. Z.X.Y.put.

Krok 5 Dla wybranej domeny wymyśl jedną (unikalną) nazwę poddomeny.

Krok 6 Zmień treść plików /var/lib/lxc/{www,mx,www2}/config:

  • popraw adresy IP zastępując X numerem twojego komputera
  • zmień wartość lxc.uts.name na nazwę twojej domeny w www i mx i nazwę twojej poddomeny w www2

Krok 7 Wykonaj kolejno (żadna z tych komend nie powinna zwrócić błędu):

  • systemctl start lxc
  • lxc-start www
  • lxc-start mx
  • lxc-start www2

następnie wejdź w przeglądarce na ustawione adresy http://192.168.… i sprawdź czy zgadzają się wybrane nazwy domenowe.

Konfiguracja serwera authoritative

Bliska minimalnej konfiguracja serwera authoritative:

bind9-authoritative-server.conf
options {
  querylog yes;
  // allow-transfer { 150.254.32.64; }; // pozwala pobierać plik strefy ze wskazanych adresów
};
zone "example.com" IN {
  type master;
  file "example.com.zone";
};
// zone "example.com" IN {
//   type slave;
//   file "example.com.zone";
//   masters { 150.254.32.128; };
//   masterfile-format text; // dodane dla czytelności pliku strefy
//   min-refresh-time 10;    // wymusza sprawdzanie czy strefa się zmieniła co 10 sekund
// };

Przykład pliku konfiguracyjnego serwera authoritative z podręcznika BIND.

Zauważ że w pliku konfiguracyjnym podana jest ścieżka do pliku strefy i nazwa strefy.
Normalnie jest ona względem katalogu zdefiniowanego w sekcji options jako directory "/sciezka/do/katalogu";.
Bez tego wpisu program serwera będzie szukać plików względem bieżącego katalogu.
Zwyczajowo nazwę pliku strefy tworzy się dodając za nazwą strefy .zone.

Minimalny plik dla strefy (z bardzo krótkimi czasami):

example.com.zone
$TTL 60
@           IN  SOA    ns  admin  2024121600 60 10 180 60
            IN  NS     ns
ns          IN  A      192.168.X.1

Uwaga: Do sprawdzenia konfiguracji możesz wykonać komendę:
named-checkconf sciezka/do/pliku/named.conf
natomiast do sprawdzenia pliku strefy:
named-checkzone example.com sciezka/do/pliku/example.com.zone

Zadanie 3

  1. stwórz nowy katalog
  2. umieść w tym katalogu powyższy plik konfiguracyjny i wpisz w nim nazwę swojej domeny
  3. umieść w tym katalogu plik strefy ustawiając mu właściwą nazwę
  4. dodaj wszystkim uprawnienia do zapisu w tym katalogu (np. chmod a+w .)
  5. uruchom serwer DNS z tą konfiguracja komendą:
    named -4 -g -c bind9-authoritative-server.conf
  6. upewnij się że program działa i po uruchomieniu nie wyświetlił zone … not loaded due to errors przed komunikatem all zones loaded oraz nie przerywaj jego działania
  7. odpytaj serwer DNS o rekord SOA i NS dla swojej domeny

Zadanie 4 Poproś administratora domeny nadrzędnej (inną osobę z rzędu bądź prowadzącego) o dodanie wpisu NS który wskaże na twój serwer nazw.
Po dodaniu rekordów w całym rzędzie sprawdź czy możesz odpytać o rekordy NS i SOA domyślnego serwera nazw (który przestawiłeś na adres 192.168.0.1).
Wykonaj też komendę ping używając właśnie skonfigurowanych nazw domenowych.

Uwaga: komenda rndc reload zażąda ponownego wczytania konfiguracji i plików stref od działającego serwera.
Komenda rndc reload example.com zażąda ponownego wczytania pliku strefy dla domeny example.com od działającego serwera.

Zadanie 5 Dodaj rekordy definiujące adresy IP dla twojej domeny i dla wybranej poddomeny. Poproś jedną osobę z innego rzędu żeby sprawdziła czy może wejść w przeglądarce internetowej na strony z tymi nazwami domenowymi.

Zadanie 6

  1. dodaj rekord MX dla swojej domeny wskazujący na swój serwer poczty (192.168.X.4); zauważ że żeby to zrobić, musisz zdefiniować dodatkowy rekord A
  2. poproś inną osobę z sali o wykonanie z roota polecenia:
    lxc-attach mx -- sh -c 'echo "To: ADREES_MAILOWY_ODBIORCY
    Subject: Temat
    
    Tresc" | sendmail -v -t -f ADREES_MAILOWY_NADAWCY'
    
  3. wejdź w przeglądarce na adres swojego serwera poczty (http://192.168.X.4) i sprawdź czy mail dotarł

Zadanie 7 Dodaj rekord CNAME który pozwoli dostawać się w przeglądarce do twojej domeny jeśli ktoś zamiast http://⟨twoja.domena⟩.put wpisze adres http://www.⟨twoja.domena⟩.put

Przykładowy plik strefy dla odwzorowania odwrotnego z dwoma obowiązkowymi rekordami (SOA i NS) i jednym rekordem odwzorowania odwrotnego (zwróć uwagę na kropki na końcach nazw domenowych - bez tego na końcu będzie dodane X.168.192.in-addr.arpa):

X.168.192.in-addr.arpa.zone
$TTL 10M
@    IN  SOA  nic.example.com. admin.example.com. 2024121700 6H 1H 1W 10M
     IN  NS   nic.example.com.
1    IN  PTR  nic.example.com.

Zadanie 8 Stwórz plik strefy dla odwzorowania odwrotnego, czyli domeny X.168.192.in-addr.arpa..
Dodaj sekcję w pliku konfiguracyjnym serwera DNS tak, by obsługiwał on zapytania o te adresy.
Przetestuj zapytania odwrotne dla swoich IP.

Serwery master i slave

Serwery slave periodycznie sprawdzają numer seryjny (zawarty w rekordzie SOA) i jeśli zobaczą większą wartość niż w posiadanym przez siebie, to ściągają cały plik strefy. Używają do tego zapytania AXFR, zwanego też zone transfer.

Zadanie 9 Wykonaj zone transfer dla domeny zonetransfer.me i porównaj wyniki z zapytaniem o wszystkie rekordy:

  • zone transfer:
    host -al zonetransfer.me nsztm1.digi.ninja
    dig @nsztm1.digi.ninja zonetransfer.me axfr
  • pytanie o wszystkie rekordy:
    host -a zonetransfer.me nsztm1.digi.ninja
    dig @nsztm1.digi.ninja zonetransfer.me any

Zadanie 10 Dodaj linię która pozwoli wybranemu IP na wykonywanie (zone) transferów (zapytań AXFR).
Wykonaj z tego komputera zapytanie AXFR programem dig lub host.

Zadanie 11 Skonfiguruj serwer DNS działający pod tym IP jako serwer slave dla twojej domeny, dodając do jego konfiguracji sekcję opisującą twoją strefę i ustawiając jej typ na slave i wskazując serwery master (patrz komentarze we wcześniejszej konfiguracji).
Sprawdź czy serwer slave poprawnie rozwiązuje zapytania.

Zadanie 12 Dodaj nowy rekord na serwerze master. Po jakim czasie serwer slave nauczy się tego rekordu?

Podsumowanie czym jest serwer master i slave na stronie cloudflare.

Dynamiczne dodawanie wpisów

Niektóre serwery DNS wspierają dynamiczne aktualizacje treści plików stref (RFC 3007).

W serwerze BIND przykładowa prosta konfiguracja dynamicznej strefy wygląda następująco:

key my_update_key {
        algorithm hmac-sha256;
        secret "vVSfERi6kXOZ0Ezw0AJ8BVrpwXrUy0PkaBBt1UYrpvI=";
};
zone "example.com" {
        type master;
        file "example.com.zone";
        allow-update { key my_update_key; };
};

Potrzebny klucz można wygenerować np. komendą rndc-confgen (lub nawet ręcznie, klucz jest losową 256-bitową liczbą zakodowaną w base64).

Do zmiany wpisów w takiej strefie używa się (interaktywnego) narzędzia nsupdate.
Przykładowa (nieinteraktywna) komenda dodająca rekord A dla nazwy foo.example.com wygląda następująco:

echo '
       server 192.168.X.1
       update add foo.example.com 60 A 192.168.X.5
     ' | nsupdate -dy hmac-sha256:my_update_key:vVSfERi6kXOZ0Ezw0AJ8BVrpwXrUy0PkaBBt1UYrpvI=

Uwaga: pliki stref które można zmieniać dynamicznie są modyfikowane i przeformatowane przez serwer DNS w trakcie pracy. Powoduje to między innymi usunięcie komentarzy.
Żeby ręcznie zmienić pliki stref dynamicznych lub zobaczyć ich pełną bieżącą treść, trzeba najpierw zatrzymać przyjmowanie zmian komendą rndc freeze (co również spowoduje wpisanie najnowszych zmian do plików stref). Przywrócenie akceptowania zmian wykonuje się komendą rndc thaw.

Zadanie 13 Stwórz nową strefę która pozwala dynamicznie zmieniać swoją zawartość.
Dodaj do niej nowy rekord z innego komputera.

Informacje o dynamicznej aktualizacji rekordów w strefie w podręczniku do BIND.
Zwróć uwagę, że czym innym jest Dynamic DNS (opisany skrótowo np. na stronie cloudflare.
DDNS ma realizować 'biznesowe zadanie' aktualizować IP istniejącego rekordu, a dynamic update jest mechanizmem do aktualizacji rekordów.

sk2/dns-config.1734441905.txt.gz · ostatnio zmienione: 2024/12/17 14:25 przez jkonczak