🌐 Jak skonfigurować serwer DNS na Ubuntu 20.04
System DNS (Domain Name System) jest fundamentalnym elementem infrastruktury internetowej, tłumaczącym przyjazne dla człowieka nazwy domen na adresy IP. W tym kompleksowym przewodniku przeprowadzimy Cię przez proces instalacji, konfiguracji i zabezpieczania własnego serwera DNS na Ubuntu 20.04 przy użyciu BIND9 - najpopularniejszego oprogramowania DNS na świecie.
⚡ Ekspresowe Podsumowanie:
- Instalacja BIND9 - prawidłowa instalacja pakietów i wstępna konfiguracja serwera DNS.
- Konfiguracja podstawowa - ustawienie plików konfiguracyjnych i stref DNS dla domen.
- Zaawansowane opcje - delegacja subdomen, konfiguracja DNSSEC i zabezpieczenia.
- Testy i diagnostyka - weryfikacja poprawności działania i rozwiązywanie typowych problemów.
🗺️ Spis Treści - Twoja Mapa Drogowa
📋 Podstawy DNS i przygotowanie środowiska
Zanim przystąpimy do instalacji, warto zrozumieć podstawowe koncepcje DNS oraz przygotować system.
Czym jest DNS i jak działa?
Domain Name System (DNS) to hierarchiczny, rozproszony system nazw, który tłumaczy nazwy domen na adresy IP:
- Resolver - klient DNS, który inicjuje zapytania (np. przeglądarka internetowa)
- Serwer rekursywny - serwer, który wykonuje pełne zapytanie dla klienta
- Serwer autorytatywny - serwer zawierający oficjalne rekordy dla domeny
- Strefa DNS - baza danych zawierająca rekordy dla domeny
- Rekord DNS - pojedynczy wpis w strefie (np. A, AAAA, MX, CNAME, TXT)
Przygotowanie systemu Ubuntu 20.04
Przed instalacją BIND9, upewnij się, że Twój system jest zaktualizowany:
sudo apt update
sudo apt upgrade
Zalecamy również skonfigurowanie statycznego adresu IP dla serwera DNS:
-
Otwórz plik konfiguracyjny Netplan:
sudo nano /etc/netplan/00-installer-config.yaml
-
Skonfiguruj statyczny adres IP:
network: ethernets: ens3: dhcp4: no addresses: [192.168.1.53/24] # Przykładowy adres IP i maska gateway4: 192.168.1.1 # Brama domyślna nameservers: addresses: [8.8.8.8, 8.8.4.4] version: 2
-
Zastosuj zmiany:
sudo netplan apply
Uwaga: Zastąp
ens3
, adresy IP i bramę własnymi wartościami odpowiednimi dla Twojej sieci. Możesz sprawdzić nazwę interfejsu sieciowego przy pomocy poleceniaip a
.
Wymagania systemowe
Dla efektywnego działania serwera DNS na Ubuntu 20.04, zalecane są następujące minimalne zasoby:
- CPU: 1 vCPU (dla małych i średnich wdrożeń)
- RAM: 1 GB (minimum), 2 GB (zalecane)
- Dysk: 10 GB przestrzeni dyskowej
- Sieć: Stabilne połączenie z internetem, najlepiej ze stałym adresem IP
✨ Pro Tip: W środowisku produkcyjnym zawsze warto mieć co najmniej dwa serwery DNS (główny i zapasowy) dla zapewnienia wysokiej dostępności.
🔧 Instalacja i podstawowa konfiguracja BIND9
Instalacja pakietów BIND9
Instalacja BIND9 na Ubuntu 20.04 jest prosta dzięki menedżerowi pakietów APT:
sudo apt install bind9 bind9utils bind9-doc dnsutils
Ten zestaw pakietów zawiera:
- bind9 - serwer DNS
- bind9utils - narzędzia do zarządzania BIND9
- bind9-doc - dokumentacja
- dnsutils - narzędzia diagnostyczne (dig, nslookup)
Po zakończeniu instalacji, BIND9 powinien automatycznie uruchomić się jako usługa systemowa. Możesz sprawdzić jej status:
sudo systemctl status bind9
Struktura katalogów i plików konfiguracyjnych
BIND9 używa następującej struktury katalogów w Ubuntu 20.04:
- /etc/bind/ - główny katalog konfiguracyjny
- /etc/bind/named.conf - główny plik konfiguracyjny
- /etc/bind/named.conf.options - opcje globalne
- /etc/bind/named.conf.local - konfiguracja lokalnych stref
- /etc/bind/named.conf.default-zones - standardowe strefy
- /var/cache/bind/ - miejsce przechowywania plików stref
Konfiguracja podstawowych opcji
Zacznijmy od edycji pliku opcji, aby skonfigurować podstawowe parametry serwera:
sudo nano /etc/bind/named.conf.options
Oto przykładowa konfiguracja z komentarzami:
options {
// Katalog dla plików stref
directory "/var/cache/bind";
// Nasłuchiwanie na wszystkich interfejsach
// (można ograniczyć do konkretnych adresów IP)
listen-on { any; };
listen-on-v6 { any; };
// Ograniczenie zapytań rekursywnych tylko do lokalnej sieci
allow-recursion {
127.0.0.1;
192.168.1.0/24; // Zastąp swoją siecią
};
// Przekazywanie zapytań do innych serwerów DNS (forwarders)
forwarders {
8.8.8.8; // Google DNS
8.8.4.4;
};
// Zabezpieczenia
version "not disclosed"; // Ukrycie wersji BIND
dnssec-validation auto; // Włączenie walidacji DNSSEC
auth-nxdomain no; // Zgodność ze standardem RFC1035
// Limity transferu stref
allow-transfer { none; };
// Zwiększenie wydajności
minimal-responses yes;
};
Po dokonaniu zmian, sprawdź poprawność składni:
sudo named-checkconf
Jeśli polecenie nie zwróci żadnego błędu, konfiguracja jest poprawna. Następnie zrestartuj BIND9, aby zastosować zmiany:
sudo systemctl restart bind9
📝 Konfiguracja stref DNS
Strefy DNS to zbiory rekordów dla konkretnych domen. W BIND9 konfigurujemy je w pliku named.conf.local
.
Tworzenie strefy do przodu (forward zone)
Strefa do przodu służy do tłumaczenia nazw domen na adresy IP. Edytuj plik konfiguracyjny:
sudo nano /etc/bind/named.conf.local
Dodaj definicję strefy dla swojej domeny:
zone "przyklad.pl" {
type master;
file "/var/cache/bind/db.przyklad.pl";
allow-transfer { 192.168.1.54; }; // Adres IP serwera zapasowego (jeśli istnieje)
};
Teraz utwórz plik strefy, najlepiej kopiując istniejący szablon:
sudo cp /etc/bind/db.local /var/cache/bind/db.przyklad.pl
sudo nano /var/cache/bind/db.przyklad.pl
Edytuj plik strefy tak, aby wyglądał podobnie do poniższego:
$TTL 604800
@ IN SOA ns1.przyklad.pl. admin.przyklad.pl. (
2023042901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.przyklad.pl.
@ IN NS ns2.przyklad.pl.
@ IN A 192.168.1.10
@ IN AAAA ::1
@ IN MX 10 mail.przyklad.pl.
www IN A 192.168.1.10
mail IN A 192.168.1.20
ns1 IN A 192.168.1.53
ns2 IN A 192.168.1.54
ftp IN CNAME www
W powyższym przykładzie:
$TTL
- Time To Live, określa jak długo rekord może być przechowywany w pamięci podręcznejSOA
- Start of Authority, zawiera informacje o strefieSerial
- numer seryjny, zwiększany przy każdej zmianieNS
- rekordy serwerów nazwA
- rekordy adresów IPv4AAAA
- rekordy adresów IPv6MX
- rekord serwera pocztowegoCNAME
- alias dla innego rekordu
Tworzenie strefy odwrotnej (reverse zone)
Strefa odwrotna służy do tłumaczenia adresów IP na nazwy (reverse DNS lookup). Dodaj definicję strefy odwrotnej do pliku named.conf.local
:
zone "1.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/db.192.168.1";
allow-transfer { 192.168.1.54; }; // Adres IP serwera zapasowego
};
Utwórz plik strefy odwrotnej:
sudo cp /etc/bind/db.127 /var/cache/bind/db.192.168.1
sudo nano /var/cache/bind/db.192.168.1
Edytuj plik strefy odwrotnej:
$TTL 604800
@ IN SOA ns1.przyklad.pl. admin.przyklad.pl. (
2023042901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.przyklad.pl.
@ IN NS ns2.przyklad.pl.
10 IN PTR przyklad.pl.
10 IN PTR www.przyklad.pl.
20 IN PTR mail.przyklad.pl.
53 IN PTR ns1.przyklad.pl.
54 IN PTR ns2.przyklad.pl.
W rekordach PTR (Pointer) łączymy adres IP (ostatni oktet) z pełną nazwą domenową (FQDN).
Sprawdzanie poprawności plików stref
Po utworzeniu plików stref, sprawdź ich poprawność:
sudo named-checkzone przyklad.pl /var/cache/bind/db.przyklad.pl
sudo named-checkzone 1.168.192.in-addr.arpa /var/cache/bind/db.192.168.1
Jeśli wszystko jest poprawne, zrestartuj BIND9:
sudo systemctl restart bind9
✨ Pro Tip: Zawsze zwiększaj numer seryjny (Serial
) w rekordzie SOA po każdej zmianie pliku strefy. Konwencja to często data w formacie YYYYMMDDNN, gdzie NN to numer rewizji danego dnia.
🛠️ Zaawansowana konfiguracja DNS
Delegacja subdomen
Delegacja pozwala na przekazanie kontroli nad subdomeną innemu serwerowi DNS. Dodaj następujące rekordy do pliku strefy głównej:
subdomena IN NS ns1.subdomena.przyklad.pl.
subdomena IN NS ns2.subdomena.przyklad.pl.
ns1.subdomena IN A 192.168.2.53
ns2.subdomena IN A 192.168.2.54
Ta konfiguracja informuje, że zapytania dotyczące subdomena.przyklad.pl
powinny być kierowane do serwerów ns1.subdomena.przyklad.pl
i ns2.subdomena.przyklad.pl
.
Konfiguracja DNSSEC
DNSSEC (Domain Name System Security Extensions) zapewnia dodatkowe zabezpieczenia przez podpisywanie cyfrowe rekordów DNS. Aby włączyć DNSSEC:
- Wygeneruj klucze dla strefy:
cd /etc/bind/keys
sudo dnssec-keygen -a RSASHA256 -b 2048 -n ZONE przyklad.pl
sudo dnssec-keygen -a RSASHA256 -b 4096 -n ZONE -f KSK przyklad.pl
-
Zaktualizuj plik strefy, dodając odniesienia do kluczy oraz zwiększając numer seryjny.
-
Podpisz strefę:
sudo dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o przyklad.pl -t /var/cache/bind/db.przyklad.pl
- Zaktualizuj konfigurację strefy w
named.conf.local
:
zone "przyklad.pl" {
type master;
file "/var/cache/bind/db.przyklad.pl.signed";
key-directory "/etc/bind/keys";
auto-dnssec maintain;
inline-signing yes;
allow-transfer { 192.168.1.54; };
};
- Zrestartuj BIND9:
sudo systemctl restart bind9
Konfiguracja serwera zapasowego (slave)
Serwer zapasowy zwiększa niezawodność i dostępność usług DNS. Na serwerze głównym (master), zaktualizuj opcje transferu:
zone "przyklad.pl" {
type master;
file "/var/cache/bind/db.przyklad.pl";
allow-transfer { 192.168.1.54; }; // Adres IP serwera zapasowego
also-notify { 192.168.1.54; }; // Powiadomienie o zmianach
};
Na serwerze zapasowym, skonfiguruj strefę jako slave:
zone "przyklad.pl" {
type slave;
file "/var/cache/bind/db.przyklad.pl";
masters { 192.168.1.53; }; // Adres IP serwera głównego
};
Inne zaawansowane opcje
Ograniczenie dostępu do zapytań
Możesz ograniczyć, które adresy IP mogą wysyłać zapytania do Twojego serwera DNS:
options {
// ...
allow-query {
localhost;
192.168.1.0/24; // Dozwolona sieć
};
// ...
};
Konfiguracja widoków (views)
Widoki pozwalają na prezentowanie różnych odpowiedzi DNS w zależności od źródła zapytania:
view "internal" {
match-clients { 192.168.1.0/24; };
zone "przyklad.pl" {
type master;
file "/var/cache/bind/internal/db.przyklad.pl";
};
};
view "external" {
match-clients { any; };
zone "przyklad.pl" {
type master;
file "/var/cache/bind/external/db.przyklad.pl";
};
};
Ta konfiguracja pozwala na różne odpowiedzi dla zapytań z sieci wewnętrznej i zewnętrznej.
🔍 Testowanie i diagnostyka serwera DNS
Podstawowe narzędzia diagnostyczne
dig - narzędzie do zapytań DNS
# Zapytanie o rekord A
dig @127.0.0.1 przyklad.pl A
# Zapytanie o rekord MX
dig @127.0.0.1 przyklad.pl MX
# Zapytanie o rekord NS
dig @127.0.0.1 przyklad.pl NS
# Zapytanie odwrotne (PTR)
dig @127.0.0.1 -x 192.168.1.10
nslookup - alternatywne narzędzie do zapytań DNS
# Zapytanie o rekord A
nslookup przyklad.pl 127.0.0.1
# Zapytanie o rekord MX
nslookup -type=MX przyklad.pl 127.0.0.1
host - proste narzędzie do konwersji między nazwami i adresami IP
host przyklad.pl 127.0.0.1
host 192.168.1.10 127.0.0.1
Monitorowanie logów BIND9
BIND9 zapisuje logi w systemowym dzienniku. Możesz je przeglądać:
sudo journalctl -u named
# lub
sudo tail -f /var/log/syslog | grep named
Aby zwiększyć poziom szczegółowości logów, zmodyfikuj plik named.conf.options
:
options {
// ...
logging {
channel default_debug {
file "/var/log/named/named.log";
severity dynamic;
};
};
// ...
};
Upewnij się, że katalog istnieje i ma odpowiednie uprawnienia:
sudo mkdir -p /var/log/named
sudo chown bind:bind /var/log/named
Rozwiązywanie typowych problemów
Problem: Serwer DNS nie uruchamia się
Rozwiązanie:
- Sprawdź logi:
sudo journalctl -u named
- Zweryfikuj składnię plików konfiguracyjnych:
sudo named-checkconf
- Sprawdź uprawnienia do plików:
sudo ls -la /etc/bind/ /var/cache/bind/
Problem: Strefa nie ładuje się prawidłowo
Rozwiązanie:
- Sprawdź poprawność pliku strefy:
sudo named-checkzone przyklad.pl /var/cache/bind/db.przyklad.pl
- Upewnij się, że numer seryjny został zwiększony
- Sprawdź uprawnienia do plików stref
Problem: Serwer nie odpowiada na zapytania
Rozwiązanie:
- Sprawdź, czy BIND nasłuchuje:
sudo ss -tulpn | grep named
- Sprawdź konfigurację zapory:
sudo ufw status
- Upewnij się, że port 53 (TCP i UDP) jest otwarty:
sudo ufw allow 53/tcp
isudo ufw allow 53/udp
✅ Checklista poprawnej konfiguracji:
- 🔍 Serwer DNS uruchamia się bez błędów
- 🔄 Odpowiada na zapytania z lokalnego hosta
dig @127.0.0.1 przyklad.pl
- 🔒 Port 53 jest otwarty dla ruchu TCP i UDP
- 📱 Strefy forwardowa i odwrotna są poprawnie skonfigurowane
- 🛡️ Ograniczenia dostępu są prawidłowo ustawione
- 📊 Rekordy MX, A, AAAA i inne są poprawnie skonfigurowane
💻 Integracja z systemem i automatyzacja
Konfiguracja klienta DNS
Aby wykorzystać lokalny serwer DNS na maszynie, na której jest zainstalowany:
sudo nano /etc/netplan/00-installer-config.yaml
Zmień konfigurację nameservers:
nameservers:
addresses: [127.0.0.1, 8.8.8.8]
Zastosuj zmiany:
sudo netplan apply
Alternatywnie, możesz edytować plik /etc/resolv.conf
(uwaga: może być nadpisany przez system):
nameserver 127.0.0.1
nameserver 8.8.8.8
Automatyczne aktualizacje stref
Dla dynamicznie zmieniających się środowisk, możesz zautomatyzować aktualizacje stref DNS za pomocą skryptów. Oto prosty przykład skryptu bash:
#!/bin/bash
# Zwiększ numer seryjny
SERIAL=$(date +%Y%m%d01)
sed -i "s/[0-9]\{10\}/$SERIAL/" /var/cache/bind/db.przyklad.pl
# Zrestartuj BIND9
systemctl restart bind9
Dla bardziej zaawansowanej automatyzacji, rozważ użycie narzędzi takich jak Ansible, Puppet lub Chef.
Kopie zapasowe konfiguracji
Regularne kopie zapasowe konfiguracji DNS są kluczowe. Prosty skrypt kopii zapasowej:
#!/bin/bash
BACKUP_DIR="/backup/bind/$(date +%Y-%m-%d)"
mkdir -p $BACKUP_DIR
cp -r /etc/bind/ $BACKUP_DIR/
cp -r /var/cache/bind/ $BACKUP_DIR/
Możesz uruchomić ten skrypt jako zadanie cron dla regularnych kopii zapasowych:
sudo crontab -e
Dodaj linię, aby wykonywać kopię zapasową codziennie o północy:
0 0 * * * /path/to/backup_script.sh
❓ FAQ - Odpowiedzi na Twoje Pytania
Czy mogę uruchomić BIND9 w kontenerze Docker?
Tak, BIND9 może być uruchomiony w kontenerze Docker. Istnieje wiele gotowych obrazów, np. internetsystemsconsortium/bind9
. Pamiętaj o udostępnieniu portów 53/TCP i 53/UDP oraz odpowiednim montowaniu woluminów dla plików konfiguracyjnych.
Jaka jest różnica między serwerem rekursywnym a autorytatywnym?
Serwer rekursywny wykonuje pełne zapytania w imieniu klienta, przechodząc przez hierarchię DNS. Serwer autorytatywny przechowuje rekordy dla konkretnych domen i odpowiada na zapytania dotyczące tylko tych domen.
Jak zabezpieczyć serwer DNS przed atakami DDoS?
Możesz ograniczyć ruch poprzez konfigurację zapory (iptables/ufw), wdrożyć limitowanie zapytań w BIND9 (rate-limiting), użyć usługi anty-DDoS lub umieścić serwer za odwrotnym proxy z funkcjami mitygacji DDoS.
Jak skonfigurować BIND9 jako serwer tylko dla cachingu?
Ustaw type
na recursor
w konfiguracji, wyłącz funkcje autorytatywne i skonfiguruj odpowiednie ograniczenia dostępu dla zapytań rekursywnych.
Jak często powinienem aktualizować BIND9?
Zalecamy regularne aktualizacje systemu, co najmniej raz w miesiącu lub natychmiast po ogłoszeniu poprawek bezpieczeństwa dla BIND9 lub systemu operacyjnego.
🏁 Podsumowanie - Twój serwer DNS gotowy do działania
Konfiguracja własnego serwera DNS na Ubuntu 20.04 przy użyciu BIND9 daje wiele korzyści, w tym pełną kontrolę nad rozwiązywaniem nazw, możliwość tworzenia niestandardowych stref i potencjalnie szybsze rozwiązywanie nazw w sieci lokalnej.
W tym przewodniku omówiliśmy:
- Instalację i podstawową konfigurację BIND9
- Tworzenie i konfigurację stref do przodu i odwrotnych
- Zaawansowane funkcje, takie jak DNSSEC i delegacja subdomen
- Testowanie, monitorowanie i rozwiązywanie problemów
- Integrację z systemem i automatyzację zadań
Pamiętaj, że prawidłowo skonfigurowany serwer DNS jest kluczowym elementem infrastruktury sieciowej. Regularnie monitoruj jego działanie, aktualizuj konfigurację i dbaj o bezpieczeństwo.
🚀 Potrzebujesz profesjonalnego hostingu z zarządzanymi serwerami DNS?
Sprawdź ofertę hostingu w IQHost
W IQHost oferujemy w pełni zarządzane, redundantne usługi DNS z globalną siecią dystrybucji, zapewniając maksymalną dostępność i wydajność dla Twojej domeny, bez potrzeby samodzielnej konfiguracji i zarządzania serwerami DNS.
Czy ten artykuł był pomocny?
Twoja strona WordPress działa wolno?
Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!
Sprawdź ofertę hostingu