Dydaktyka:
FeedbackTo jest stara wersja strony!
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
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 serwera cache znajduje się poniżej:
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
chmod a+w .
)named -4 -g -c bind9-caching-server.conf
running
oraz nie przerywaj jego działania
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
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.
@
to wartość poprzedniej dyrektywy $ORIGIN
lub, jeśli żadnej nie było, nazwę strefy wskazaną w konfiguracji serwera DNS,.@
,$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.
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:
/etc/sysconfig/network/config
wartość dla NETCONFIG_DNS_STATIC_SERVERS
na 192.168.0.1
,netconfig update -f
,/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ą:
.put
, tzn. X.put
X.Y.put
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
:
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.
Bliska minimalnej konfiguracja serwera authoritative:
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):
$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
chmod a+w .
)named -4 -g -c bind9-authoritative-server.conf
zone … not loaded due to errors
przed komunikatem all zones loaded
oraz nie przerywaj jego działania
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
lxc-attach mx -- sh -c 'echo "To: ADREES_MAILOWY_ODBIORCY Subject: Temat Tresc" | sendmail -v -t -f ADREES_MAILOWY_NADAWCY'
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
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 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:
host -al zonetransfer.me nsztm1.digi.ninja
dig @nsztm1.digi.ninja zonetransfer.me axfr
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.
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.