przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
sk2
»
dns-config
sk2:dns-config
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Przygotowanie do pierwszej części laboratoriów ===== <html> <style type="text/css" scoped> .autonumbering_Krok { font-style: italic; text-decoration: #2b73b7 underline; } </style> </html> ~~Krok.#~~ Pobierz skrypt {{:sk2: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: <html><div style="margin-top:-1.2em"></div></html> 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.#~~ Wykonaj z uprawnieniami roota komendę ''rndc-confgen -a'' ===== Wybrane programy implementujące serwer DNS ===== W trakcie laboratoriów jest używany serwer DNS [[https://www.isc.org/bind/|BIND]] w wersji 9, o którego rozwój dba [[https://en.wikipedia.org/wiki/Internet_Systems_Consortium|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 [[https://www.nlnetlabs.nl/projects/nsd|NSD]] i [[https://www.knot-dns.cz/|Knot DNS]]. \\ Inne popularne caching DNS to [[https://www.nlnetlabs.nl/projects/unbound/about/|Unbound]] czy [[https://pl.wikipedia.org/wiki/Dnsmasq|dnsmasq]] (który łączy w sobie serwer DNS i DHCP). Format [[https://en.wikipedia.org/wiki/Zone_file|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 [[https://en.wikipedia.org/wiki/Init?useskin=vector#Other_implementations|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: <html><div style="margin-top:-1.2em"></div></html> <code - 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 }; </code> ~~Zadanie.#~~ <html><div style="margin-top:-1.2em"></div></html> - stwórz nowy katalog i umieść w nim powyższy plik konfiguracyjny - dodaj wszystkim uprawnienia do zapisu w tym katalogu (np. ''chmod a+w .'') - uruchom serwer DNS z tą konfiguracja komendą: \\ ''named -4 -g -c bind9-caching-server.conf'' - upewnij się że program działa i po uruchomieniu wyświetlił ''running'' oraz nie przerywaj jego działania - 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.#~~ Wykonaj komendę ''rndc dumpdb -cache''. W katalogu z którego została uruchomiona komenda ''named'' zostanie utworzony nowy plik. Obejrzyj jego zawartość. <small> Rozdział o konfiguracji serwerów caching w [[https://bind9.readthedocs.io/en/stable/chapter3.html#resolver-caching-name-servers|dokumentacji BIND9]] </small> ===== 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//: <html><div style="margin-top:-1.2em; margin-bottom:-1.2em; display:table"> <div style="display:table-cell; max-width:412px; padding-right:4px"> <pre style="padding-left:2px; padding-right:2px; transform-origin: left; transform: scaleX(0.9); width:450px"> 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. </pre> </div> <div style="display:table-cell; max-width:412px"> <pre style="padding-left:2px; padding-right:2px; transform-origin: left; transform: scaleX(0.9); width:450px"> $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. </pre> </div></div> </html> Dozwolone uproszczenia/skróty: <html><div style="margin-top:-1.2em"></div></html> * **''@''** 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'' (<small>w przypadku braku BIND9 bierze jedną z wartości z rekordu SOA</small>). <html><div style="margin-top:-1.2em"></div></html> 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ę: <html> <pre style="margin-top:-1.2em; margin-bottom: 0em"> <span style="color:gray">; ns.example.com. jest głównym serwerem DNS dla domeny</span> <span style="color:gray">; root@example.com. jest adresem e-mail administratora domeny</span> example.com. IN SOA ns.example.com. root.example.com. ( 2015121600 <span style="color:gray">; serial number, czyli wersja pliku strefy</span> 6H <span style="color:gray">; |konfigracja| czas odśweżania przez serwer slave (co ten czas slave pyta o SOA)</span> 1H <span style="color:gray">; |dla serwera| czas odśweżania przez serwer slave jeśli poprzednia próba zawiodła</span> 1W <span style="color:gray">; | DNS slave | czas po jakim serwer slave uzna że już nie zna domeny</span> 1D <span style="color:gray">; czas przez który wolno cache'ować odpowiedzi "nie ma takiej poddomeny"</span> ) </pre></html> Wartość **serial number musi być ręcznie zwiększana** przy każdej zmianie w pliku strefy. Bez tego serwery slave nie skopiują strefy. <small>Informacje o formacie plików stref na [[https://en.wikipedia.org/wiki/Zone_file|wikipedii]], podsumowanie czym jest strefa na stronie [[https://www.cloudflare.com/learning/dns/glossary/dns-zone/|cloudflare]]. </small> ===== 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. \\ <small> Możesz to zrobić np. komendą: ''ip address add 192.168.//X//.1/16 dev br0'' </small> ~~Krok.#~~ 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. <html><div style="margin-top:-1.2em"></div></html> <small>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'' </small> ~~Krok.#~~ Pobierz plik {{sk2:dns-lab-lxc.tar.xz}} i rozpakuj go jako //root// w katalogu ''/var/lib/lxc''. \\ <small> 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%%'' </small> \\ Jeżeli w katalogu były wcześniej pliki ''www'', ''mx'' i ''www2'', to usuń z tych katalogów zawartość podkatalogu ''rootfs-overlay''. \\ <small> Możesz to zrobić komendą: ''rm -rf /var/lib/lxc/{www,mx,www2}/rootfs-overlay/*''</small> ~~Krok.#~~ 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.#~~ Dla wybranej domeny wymyśl jedną (unikalną) nazwę poddomeny. ~~Krok.#~~ 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.#~~ Wykonaj kolejno (żadna z tych komend nie powinna zwrócić błędu): * ''systemctl start lxc'' * ''lxc-start www'' * ''lxc-start mx'' * ''lxc-start www2'' <html><div style="margin-top:-1.2em"></div></html> 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: <html><div style="margin-top:-1.2em"></div></html> <code - 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 // }; </code> <small>Przykład pliku konfiguracyjnego serwera authoritative z [[https://bind9.readthedocs.io/en/stable/chapter3.html#primary-authoritative-name-server|podręcznika BIND]]. </small> 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): <html><div style="margin-top:-1.2em"></div></html> <code - example.com.zone> $TTL 60 @ IN SOA ns admin 2024121600 60 10 180 60 IN NS ns ns IN A 192.168.X.1 </code> //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.#~~ <html><div style="margin-top:-1.2em"></div></html> - stwórz nowy katalog - umieść w tym katalogu powyższy plik konfiguracyjny i wpisz w nim nazwę swojej domeny - umieść w tym katalogu plik strefy ustawiając mu właściwą nazwę - dodaj wszystkim uprawnienia do zapisu w tym katalogu (np. ''chmod a+w .'') - uruchom serwer DNS z tą konfiguracja komendą: \\ ''named -4 -g -c bind9-authoritative-server.conf'' - upewnij się że program działa i po uruchomieniu wyświetlił **''all zones loaded''** i ''running'' oraz nie przerywaj jego działania - odpytaj serwer DNS o rekord SOA i NS dla swojej domeny ~~Zadanie.#~~ 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.#~~ 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.#~~ Wykonaj zapytanie iteracyjne (''dig +trace …'') o nazwę domenową składającą się z największej liczby etykiet w rzędzie w którym siedzisz. ~~Zadanie.#~~ <html><div style="margin-top:-1.2em"></div></html> - 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 - poproś inną osobę z sali o wykonanie z roota polecenia:<html><pre style="margin-bottom:0"> lxc-attach mx -- sh -c 'echo "To: <i>ADREES_MAILOWY_ODBIORCY</i> Subject: Temat Tresc" | sendmail -v -t -f <i>ADREES_MAILOWY_NADAWCY</i>' </pre></html> - wejdź w przeglądarce na adres swojego serwera poczty (//%%http://192.168.X.4%%//) i sprawdź czy mail dotarł ~~Zadanie.#~~ Dodaj rekord CNAME który pozwoli dostawać się w przeglądarce do twojej domeny jeśli ktoś zamiast <html><span style="white-space:nowrap; font-style: italic;">http://⟨twoja.domena⟩.put</span></html> wpisze adres <html><span style="white-space:nowrap; font-style: italic;">http://www.⟨twoja.domena⟩.put</span></html> ~~Zadanie.#~~ 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.#~~ Wykonaj zone transfer dla domeny [[https://digi.ninja/projects/zonetransferme.php|zonetransfer.me]] i porównaj wyniki z zapytaniem o wszystkie rekordy: <html><div style="margin-top:-1.2em"></div></html> * 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.#~~ 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.#~~ 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.#~~ Dodaj nowy rekord na serwerze master. Po jakim czasie serwer slave nauczy się tego rekordu? <small>Podsumowanie czym jest serwer master i slave na stronie [[https://www.cloudflare.com/learning/dns/glossary/primary-secondary-dns/|cloudflare]]. </small> ===== Dynamiczne dodawanie wpisów ===== Niektóre serwery DNS wspierają dynamiczne aktualizacje treści plików stref ([[https://datatracker.ietf.org/doc/html/rfc3007|RFC 3007]]). W serwerze BIND przykładowa prosta konfiguracja dynamicznej strefy wygląda następująco: <html><div style="margin-top:-1.2em"></div></html> <code> key my_update_key { algorithm hmac-sha256; secret "vVSfERi6kXOZ0Ezw0AJ8BVrpwXrUy0PkaBBt1UYrpvI="; }; zone "example.com" { type master; file "example.com.zone"; allow-update { key my_update_key; }; }; </code> <html><div style="margin-top:-1.2em"></div></html> Potrzebny klucz można wygenerować np. komendą ''rndc-confgen'' (<small>lub nawet ręcznie, klucz jest losową 256-bitową liczbą zakodowaną w base64</small>). 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: <html><div style="margin-top:-1.2em"></div></html> <code> 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= </code> //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.#~~ Stwórz nową strefę która pozwala dynamicznie zmieniać swoją zawartość. \\ Dodaj do niej nowy rekord z innego komputera. <small>Informacje o dynamicznej aktualizacji rekordów w strefie w [[https://bind9.readthedocs.io/en/v9.18.14/chapter6.html#dynamic-update|podręczniku do BIND]]. \\ Zwróć uwagę, że czym innym jest Dynamic DNS (opisany skrótowo np. na stronie [[https://www.cloudflare.com/learning/dns/glossary/dynamic-dns/|cloudflare]]. \\ DDNS ma realizować 'biznesowe zadanie' aktualizować IP istniejącego rekordu, a dynamic update jest mechanizmem do aktualizacji rekordów. </small>
sk2/dns-config.1734439456.txt.gz
· ostatnio zmienione: 2024/12/17 13:44 (edycja zewnętrzna)
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry