🌐 Jak zainstalować i skonfigurować serwer DNS na Ubuntu 20.04
System DNS (Domain Name System) stanowi fundament współczesnego internetu, tłumacząc przyjazne dla człowieka nazwy domen na adresy IP zrozumiałe dla komputerów. W tym kompleksowym przewodniku pokażemy, jak skonfigurować własny serwer DNS oparty na BIND9 na Ubuntu 20.04. Niezależnie od tego, czy chcesz stworzyć lokalny serwer nazw dla swojej sieci, czy skonfigurować autorytatywny serwer DNS dla swoich domen, ten poradnik krok po kroku przeprowadzi Cię przez cały proces.
⚡ Ekspresowe Podsumowanie:
- Instalacja BIND9:
sudo apt update && sudo apt install bind9 bind9utils bind9-doc dnsutils
- Podstawowa konfiguracja: Edycja plików /etc/bind/named.conf.* do skonfigurowania ogólnych parametrów
- Konfiguracja stref DNS: Tworzenie stref forward i reverse dla tłumaczenia nazw domen na adresy IP i odwrotnie
- Zabezpieczenia i optymalizacja: Implementacja DNSSEC, filtrowania zapytań i monitoringu dla bezpieczeństwa i wydajności
🗺️ Spis Treści - Twoja Mapa Drogowa
📚 Podstawy DNS i BIND9
Zanim przejdziemy do instalacji, warto zrozumieć podstawowe koncepcje DNS i BIND9.
Czym jest DNS i dlaczego jest ważny?
DNS (Domain Name System) to hierarchiczny, zdecentralizowany system, który tłumaczy nazwy domen (np. iqhost.pl) na adresy IP (np. 192.168.1.1). Działa on jak książka telefoniczna internetu, umożliwiając użytkownikom korzystanie z łatwych do zapamiętania nazw zamiast ciągów liczbowych.
DNS jest kluczowy dla funkcjonowania internetu z kilku powodów:
- Umożliwia intuicyjne nawigowanie po sieci
- Zapewnia elastyczność - adresy IP mogą się zmieniać, ale nazwy domen pozostają stałe
- Umożliwia równoważenie obciążenia i redundancję poprzez wskazywanie wielu adresów IP dla jednej nazwy
Co to jest BIND9?
BIND (Berkeley Internet Name Domain) to najpopularniejsze oprogramowanie serwera DNS na świecie. BIND9 to jego najnowsza stabilna wersja, która oferuje:
- Pełną zgodność ze standardami DNS
- Wsparcie dla DNSSEC (DNS Security Extensions)
- Dynamiczne aktualizacje DNS
- Wysoką wydajność i skalowalność
- Zaawansowane funkcje zabezpieczeń
Rodzaje serwerów DNS
W ekosystemie DNS istnieje kilka typów serwerów:
- Rekursywny resolver - przyjmuje zapytania od klientów (komputerów) i wykonuje niezbędne zapytania do innych serwerów DNS, aby znaleźć odpowiedź
- Autorytatywny serwer - przechowuje rekordy DNS dla konkretnych domen i udziela "autorytatywnych" odpowiedzi
- Forwarding serwer - przekazuje zapytania do innych serwerów DNS
- Root serwer - najwyższy poziom hierarchii DNS, kieruje zapytania do odpowiednich serwerów TLD
W tym przewodniku skonfigurujemy BIND9 jako kombinację rekursywnego resolvera i autorytatywnego serwera dla naszych własnych domen.
💿 Krok 1: Instalacja BIND9 na Ubuntu 20.04
Przygotowanie systemu
Przed instalacją BIND9, upewnij się, że Twój system jest aktualny:
sudo apt update
sudo apt upgrade
Warto również ustawić stały adres IP dla serwera DNS. Możesz to zrobić poprzez edycję pliku Netplan:
sudo nano /etc/netplan/00-installer-config.yaml
Przykładowa konfiguracja statycznego IP:
network:
ethernets:
enp0s3:
addresses: [192.168.1.53/24]
gateway4: 192.168.1.1
nameservers:
addresses: [127.0.0.1, 8.8.8.8]
version: 2
Po wprowadzeniu zmian, zastosuj nową konfigurację:
sudo netplan apply
Uwaga: Upewnij się, że adresy IP dostosowane są do Twojej sieci. 192.168.1.53 to przykładowy adres dla serwera DNS (tradycyjnie używa się adresów kończących się na .53 dla serwerów DNS, ponieważ DNS używa portu 53).
Instalacja pakietów BIND9
Teraz zainstalujmy BIND9 i powiązane narzędzia:
sudo apt install bind9 bind9utils bind9-doc dnsutils
Te pakiety zawierają:
bind9
- główny pakiet serwera DNSbind9utils
- narzędzia do zarządzania BIND9bind9-doc
- dokumentacjadnsutils
- dodatkowe narzędzia, takie jak dig i nslookup
Weryfikacja instalacji
Po instalacji sprawdź, czy BIND9 działa poprawnie:
sudo systemctl status bind9
Powinieneś zobaczyć informację, że usługa jest aktywna (running). Jeśli nie, uruchom ją:
sudo systemctl start bind9
Aby upewnić się, że BIND9 uruchamia się automatycznie przy starcie systemu:
sudo systemctl enable bind9
✨ Pro Tip: BIND9 działa pod nazwą usługi named
(co jest skrótem od "name daemon"). Więc możesz również używać komend takich jak sudo systemctl status named
.
🔧 Krok 2: Podstawowa konfiguracja BIND9
BIND9 używa kilku plików konfiguracyjnych w katalogu /etc/bind/
. Główne z nich to:
named.conf
- główny plik konfiguracyjny, który włącza pozostałenamed.conf.options
- zawiera globalne opcje konfiguracyjnenamed.conf.local
- służy do definiowania stref lokalnychnamed.conf.default-zones
- zawiera definicje domyślnych stref DNS
Konfiguracja opcji BIND9
Zacznijmy od skonfigurowania podstawowych opcji. Otwórz plik named.conf.options
:
sudo nano /etc/bind/named.conf.options
Oto przykładowa konfiguracja z komentarzami:
options {
// Katalog roboczy dla BIND
directory "/var/cache/bind";
// Jeśli nie ma innej konfiguracji, przekazuj zapytania do Google DNS
forwarders {
8.8.8.8;
8.8.4.4;
};
// Do not query bogus/malicious servers
dnssec-validation auto;
// Zezwalaj na zapytania rekursywne z sieci lokalnej
recursion yes;
allow-recursion { localnets; localhost; };
// Aktywuj querylog dla celów debugowania
querylog yes;
// Ukryj wersję BIND dla bezpieczeństwa
version none;
// BIND będzie nasłuchiwał na wszystkich interfejsach
listen-on { any; };
listen-on-v6 { any; };
};
Po wprowadzeniu zmian sprawdź konfigurację pod kątem błędów:
sudo named-checkconf
Jeśli polecenie nie zwróci żadnego wyjścia, oznacza to, że konfiguracja jest poprawna. Następnie zrestartuj BIND9:
sudo systemctl restart bind9
Weryfikacja działania forwardingu
Aby sprawdzić, czy przekazywanie zapytań działa poprawnie, użyj polecenia dig:
dig google.com @127.0.0.1
Powinieneś otrzymać odpowiedź zawierającą adres IP google.com, co oznacza, że Twój serwer DNS poprawnie przekazuje zapytania do forwarderów.
🏗️ Krok 3: Konfiguracja stref DNS
Teraz zajmiemy się konfiguracją własnych stref DNS. Strefy DNS dzielą się na dwa główne typy:
- Strefa forward - tłumaczy nazwy domen na adresy IP
- Strefa reverse - tłumaczy adresy IP na nazwy domen (tzw. reverse DNS)
Konfiguracja strefy forward
Załóżmy, że chcemy skonfigurować strefę dla domeny przyklad.local
. Otwórz plik named.conf.local
:
sudo nano /etc/bind/named.conf.local
Dodaj definicję strefy:
// Strefa forward dla przyklad.local
zone "przyklad.local" {
type master;
file "/etc/bind/zones/db.przyklad.local";
allow-update { none; };
};
Teraz utwórz katalog na pliki stref i skopiuj domyślny plik strefy jako szablon:
sudo mkdir -p /etc/bind/zones
sudo cp /etc/bind/db.local /etc/bind/zones/db.przyklad.local
Edytuj plik strefy:
sudo nano /etc/bind/zones/db.przyklad.local
Oto przykładowa zawartość:
; BIND data file for przyklad.local
$TTL 604800
@ IN SOA ns1.przyklad.local. admin.przyklad.local. (
2023091201 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; Rekord NS
@ IN NS ns1.przyklad.local.
; Rekordy A
@ IN A 192.168.1.53
ns1 IN A 192.168.1.53
www IN A 192.168.1.100
mail IN A 192.168.1.101
; Rekordy MX
@ IN MX 10 mail.przyklad.local.
; Rekordy CNAME
ftp IN CNAME www.przyklad.local.
Objaśnienie rekordów:
SOA
(Start Of Authority) - zawiera podstawowe informacje o strefieNS
(Name Server) - wskazuje serwer nazw odpowiedzialny za domenęA
(Address) - mapuje nazwę hosta na adres IPv4MX
(Mail Exchanger) - wskazuje serwer pocztowy dla domenyCNAME
(Canonical Name) - tworzy alias dla innej nazwy
Konfiguracja strefy reverse
Strefa reverse pozwala na tłumaczenie adresów IP na nazwy domen. Wróć do pliku named.conf.local
:
sudo nano /etc/bind/named.conf.local
Dodaj definicję strefy reverse:
// Strefa reverse dla sieci 192.168.1.0/24
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
allow-update { none; };
};
Utwórz plik strefy reverse:
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.1
sudo nano /etc/bind/zones/db.192.168.1
Edytuj plik:
; BIND reverse data file for 192.168.1.0/24
$TTL 604800
@ IN SOA ns1.przyklad.local. admin.przyklad.local. (
2023091201 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.przyklad.local.
; Rekordy PTR
53 IN PTR ns1.przyklad.local.
100 IN PTR www.przyklad.local.
101 IN PTR mail.przyklad.local.
Weryfikacja plików stref
Sprawdź poprawność konfiguracji strefy forward:
sudo named-checkzone przyklad.local /etc/bind/zones/db.przyklad.local
Oraz strefy reverse:
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1
Jeśli wszystko jest OK, zrestartuj BIND9:
sudo systemctl restart bind9
🔍 Krok 4: Testowanie serwera DNS
Po skonfigurowaniu stref, najwyższy czas przetestować nasz serwer DNS.
Testowanie rozwiązywania nazw
Użyj polecenia dig
do przetestowania strefy forward:
dig www.przyklad.local @127.0.0.1
Powinieneś zobaczyć w sekcji ANSWER odpowiedź z adresem IP 192.168.1.100.
Przetestuj strefę reverse:
dig -x 192.168.1.100 @127.0.0.1
Powinieneś otrzymać odpowiedź z nazwą www.przyklad.local.
Konfiguracja klienta do korzystania z Twojego serwera DNS
Aby komputery w sieci mogły korzystać z Twojego serwera DNS, musisz skonfigurować ich ustawienia DNS.
W Ubuntu/Debian, edytuj plik /etc/resolv.conf
lub skonfiguruj Network Manager:
sudo nano /etc/resolv.conf
Dodaj linię:
nameserver 192.168.1.53
Uwaga: Na wielu systemach plik
/etc/resolv.conf
jest automatycznie generowany. W takim przypadku lepiej jest skonfigurować DNS w ustawieniach sieci.
W Windows, przejdź do:
- Panel sterowania > Sieć i Internet > Połączenia sieciowe
- Kliknij prawym przyciskiem myszy na połączenie i wybierz "Właściwości"
- Zaznacz "Protokół internetowy w wersji 4 (TCP/IPv4)" i kliknij "Właściwości"
- Wybierz "Użyj następujących adresów serwerów DNS" i wprowadź adres 192.168.1.53
🔒 Krok 5: Zabezpieczanie serwera DNS
Bezpieczeństwo serwera DNS jest kluczowe, ponieważ ataki na DNS mogą prowadzić do przekierowania ruchu, kradzieży danych czy ataków DDoS.
Ograniczanie dostępu
Edytuj plik named.conf.options
:
sudo nano /etc/bind/named.conf.options
Dodaj sekcję ACL (Access Control List):
acl "trusted" {
192.168.1.0/24; // Cała podsieć
localhost;
localnets;
};
options {
// ... istniejące opcje ...
allow-query { trusted; };
allow-transfer { none; };
allow-recursion { trusted; };
// ... pozostałe opcje ...
};
To ograniczy zapytania, transfery stref i rekursję tylko do zaufanych hostów.
Implementacja DNSSEC
DNSSEC (Domain Name System Security Extensions) dodaje warstwę uwierzytelniania i integralności do DNS.
- Wygeneruj klucze DNSSEC dla strefy:
cd /etc/bind/zones
sudo dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE przyklad.local
sudo dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE przyklad.local
- Ustaw odpowiednie uprawnienia:
sudo chown -R bind:bind /etc/bind/zones/K*
- Aktualizuj plik strefy, aby zawierał klucze DNSSEC:
sudo nano /etc/bind/zones/db.przyklad.local
Dodaj na końcu pliku:
; DNSKEY records
$INCLUDE Kprzyklad.local.+008+xxxxx.key ; ZSK
$INCLUDE Kprzyklad.local.+008+yyyyy.key ; KSK
Gdzie xxxxx i yyyyy to identyfikatory wygenerowanych kluczy.
- Podpisz strefę:
sudo dnssec-signzone -A -3 $(head -c 16 /dev/random | od -t x -A n | tr -d ' \n') -N INCREMENT -o przyklad.local -t db.przyklad.local
- Zaktualizuj plik konfiguracyjny strefy:
sudo nano /etc/bind/named.conf.local
Zmień definicję strefy:
zone "przyklad.local" {
type master;
file "/etc/bind/zones/db.przyklad.local.signed";
allow-update { none; };
inline-signing yes;
key-directory "/etc/bind/zones";
auto-dnssec maintain;
};
- Zrestartuj BIND9:
sudo systemctl restart bind9
Monitorowanie i logowanie
Skonfiguruj rozszerzone logowanie w BIND9, edytując plik named.conf.logging
:
sudo nano /etc/bind/named.conf.logging
Dodaj konfigurację logowania:
logging {
channel default_log {
file "/var/log/named/default.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel query_log {
file "/var/log/named/query.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default { default_log; };
category queries { query_log; };
};
Utwórz katalog logów i ustaw odpowiednie uprawnienia:
sudo mkdir -p /var/log/named
sudo chown bind:bind /var/log/named
Włącz konfigurację logowania, dodając include do głównego pliku konfiguracyjnego:
sudo nano /etc/bind/named.conf
Dodaj linię:
include "/etc/bind/named.conf.logging";
Zrestartuj BIND9:
sudo systemctl restart bind9
🚀 Krok 6: Optymalizacja wydajności
Optymalizacja serwera DNS może znacznie poprawić wydajność i zmniejszyć opóźnienia.
Buforowanie i optymalizacja pamięci
Edytuj plik named.conf.options
:
sudo nano /etc/bind/named.conf.options
Dodaj opcje związane z buforowaniem:
options {
// ... istniejące opcje ...
// Rozmiar bufora pamięci podręcznej
max-cache-size 256M;
// Czas przechowywania rekordów negatywnych w cache
max-ncache-ttl 3600;
// Prefetch cache dla często używanych rekordów
prefetch 2 9;
// ... pozostałe opcje ...
};
Optymalizacja zapytań rekursywnych
Dodaj opcje, które pomogą w optymalizacji zapytań rekursywnych:
options {
// ... istniejące opcje ...
// Maksymalna liczba jednoczesnych zapytań rekursywnych
recursive-clients 2000;
// Minimalna wielkość pamięci podręcznej dla rekursji
min-cache-size 10M;
// ... pozostałe opcje ...
};
Zrównoleglenie obsługi zapytań
BIND9 może wykorzystać wiele rdzeni procesora:
options {
// ... istniejące opcje ...
// Liczba wątków obsługujących zapytania (dostosuj do liczby CPU)
clients-per-query 100;
max-clients-per-query 1000;
// ... pozostałe opcje ...
};
Po wprowadzeniu zmian, zrestartuj BIND9:
sudo systemctl restart bind9
📊 Zaawansowane konfiguracje i przypadki użycia
Konfiguracja serwera DNS jako slave
Dla zwiększenia niezawodności, możesz skonfigurować dodatkowy serwer DNS jako slave (secondary):
Na serwerze master, zmodyfikuj definicję strefy, aby zezwolić na transfer do slave:
zone "przyklad.local" {
type master;
file "/etc/bind/zones/db.przyklad.local";
allow-transfer { 192.168.1.54; }; // Adres IP serwera slave
notify yes;
};
Na serwerze slave, dodaj definicję strefy:
zone "przyklad.local" {
type slave;
file "/var/cache/bind/db.przyklad.local";
masters { 192.168.1.53; }; // Adres IP serwera master
};
Konfiguracja dynamicznych aktualizacji DNS
Aby umożliwić dynamiczne aktualizacje rekordów DNS (np. dla DHCP):
- Wygeneruj klucz TSIG:
sudo dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST dhcp-key
- Skonfiguruj strefę, aby akceptowała aktualizacje:
zone "przyklad.local" {
type master;
file "/etc/bind/zones/db.przyklad.local";
allow-update { key "dhcp-key"; };
};
- Zintegruj z serwerem DHCP (np. ISC DHCP):
key "dhcp-key" {
algorithm hmac-sha512;
secret "wygenerowany-klucz";
};
zone przyklad.local. {
primary 127.0.0.1;
key dhcp-key;
}
Konfiguracja Split-Horizon DNS
Split-Horizon (lub Split-View) DNS umożliwia dostarczanie różnych odpowiedzi w zależności od źródła zapytania:
view "internal" {
match-clients { 192.168.1.0/24; };
zone "przyklad.local" {
type master;
file "/etc/bind/zones/internal/db.przyklad.local";
};
};
view "external" {
match-clients { any; };
zone "przyklad.local" {
type master;
file "/etc/bind/zones/external/db.przyklad.local";
};
};
❓ FAQ - Odpowiedzi na Twoje Pytania
Jak sprawdzić, czy mój serwer DNS działa poprawnie?
Użyj narzędzi takich jak dig
, nslookup
lub host
do testowania rozwiązywania nazw. Na przykład: dig www.przyklad.local @192.168.1.53
Jak często należy aktualizować seryjny numer SOA?
Numer seryjny powinien być zwiększany za każdym razem, gdy wprowadzasz zmiany w pliku strefy. Zalecany format to YYYYMMDDNN, gdzie NN to numer zmiany w danym dniu.
Czy mogę używać BIND9 jako cachującego resolwera DNS?
Tak, domyślna konfiguracja BIND9 działa jako cachujący resolver. Wystarczy skonfigurować forwarders i włączyć recursion.
Jak długo trwa propagacja zmian DNS?
Zależy to od ustawień TTL (Time To Live) dla rekordów. Domyślnie może to trwać od kilku minut do 24 godzin.
Jak zabezpieczyć serwer DNS przed atakami cache poisoning?
Włącz DNSSEC, używaj losowych portów źródłowych, aktualizuj regularnie BIND9 i ogranicz rekursję tylko do zaufanych klientów.
Czy BIND9 obsługuje protokół DNS over TLS lub DNS over HTTPS?
BIND9 od wersji 9.16 obsługuje DNS over TLS (DoT). DNS over HTTPS (DoH) wymaga dodatkowego proxy.
🏁 Podsumowanie - Twój własny serwer DNS
Gratulacje! Udało Ci się skonfigurować własny serwer DNS na Ubuntu 20.04 przy użyciu BIND9. Teraz masz pełną kontrolę nad rozwiązywaniem nazw w swojej sieci i możesz:
- Zarządzać własnymi domenami - konfigurować rekordy DNS dla swoich witryn i usług
- Przyspieszyć przeglądanie internetu - dzięki lokalnemu buforowaniu zapytań DNS
- Zwiększyć bezpieczeństwo sieci - filtrując i monitorując ruch DNS
- Zapewnić niezawodność usług sieciowych - poprzez redundancję i zaawansowane konfiguracje
Pamiętaj o regularnych aktualizacjach BIND9, monitorowaniu logów i tworzeniu kopii zapasowych konfiguracji. DNS jest krytycznym elementem infrastruktury sieciowej, więc warto poświęcić czas na jego właściwe utrzymanie.
✅ Twoja checklista DNS:
- 🔍 Regularnie sprawdzaj logi pod kątem błędów lub podejrzanej aktywności
- 🔄 Twórz kopie zapasowe konfiguracji i plików stref
- 🔒 Zabezpiecz serwer poprzez DNSSEC i właściwe ACL
- 🛠️ Monitoruj wydajność i dostępność serwera
- 📊 Dostosowuj konfigurację do zmieniających się potrzeb sieci
- 🚀 Regularnie aktualizuj BIND9 i system operacyjny
🚀 Potrzebujesz profesjonalnego hostingu z zaawansowaną konfiguracją DNS?
Sprawdź ofertę serwerów wirtualnych IQHost
Nasze serwery VPS oferują pełną kontrolę nad konfiguracją DNS wraz z profesjonalnym wsparciem technicznym, które pomoże Ci w optymalizacji i zabezpieczeniu Twojej infrastruktury sieciowej. Z naszymi usługami możesz skoncentrować się na rozwijaniu swojego biznesu, a nie na zarządzaniu infrastrukturą.
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