 Autor: [Miłka Teroy](/autorzy/milka-teroy) Analityk rynku hostingowego · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  BIND9 — konfiguracja DNS

# BIND9 — konfiguracja autoritative DNS, slave i DNSSEC

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / DNS

BIND9 (Berkeley Internet Name Domain) to najstarszy i wciąż najpopularniejszy serwer DNS w internecie — stoi za dużą częścią infrastruktury rejestratorów i hostingów. W tym przewodniku postawimy BIND9 jako autorytatywny serwer dla własnej domeny, skonfigurujemy slave na drugim VPS, dodamy rekordy email (SPF/DKIM/DMARC) i na koniec podpiszemy strefę DNSSEC. Całość na Debian/Ubuntu, ale komendy przenoszą się na inne dystrybucje.

## Instalacja i struktura plików

sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils

# Struktura katalogów
# /etc/bind/named.conf              - główny plik (includes)
# /etc/bind/named.conf.options      - opcje globalne (listen-on, forwarders, allow-query)
# /etc/bind/named.conf.local        - definicje stref
# /etc/bind/zones/                  - pliki zone (utwórz ręcznie)
# /var/cache/bind/                  - runtime data i dynamic zones

sudo mkdir -p /etc/bind/zones
sudo chown -R bind:bind /etc/bind/zones

## named.conf.options — globalne ustawienia

Autorytatywny serwer DNS NIE powinien odpowiadać na zapytania rekursywne od obcych — to otwarty resolver, który może być wykorzystany do ataków DNS amplification. Wyłączamy rekursję i ograniczamy zapytania do strefy, którą obsługujemy:

// /etc/bind/named.conf.options
options {
    directory "/var/cache/bind";

    // Tylko publiczny IP serwera (nie 0.0.0.0)
    listen-on { 203.0.113.10; 127.0.0.1; };
    listen-on-v6 { any; };

    // Autoritative only — zero rekursji
    recursion no;
    allow-recursion { none; };
    allow-query { any; };
    allow-query-cache { none; };

    // Kto może zrobić transfer strefy (tylko slave)
    allow-transfer { 198.51.100.20; };

    // Bezpieczeństwo
    version "redacted";
    hostname none;
    server-id none;

    // DNSSEC walidacja dla queries iteracyjnych (jeśli kiedyś włączysz recursion)
    dnssec-validation auto;
};

## Definicja strefy — named.conf.local

// /etc/bind/named.conf.local
zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
    allow-transfer { 198.51.100.20; };  // slave IP
    also-notify { 198.51.100.20; };     // powiadom slave po zmianie
};

zone "113.0.203.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.203.0.113";  // reverse DNS
};

## Zone file — rekordy A/AAAA/MX/TXT/SPF/DKIM

; /etc/bind/zones/db.example.com
$TTL    3600
$ORIGIN example.com.

@       IN  SOA     ns1.example.com. admin.example.com. (
                        2026040901      ; Serial YYYYMMDDNN - zwieksz przy kazdej zmianie
                        3600            ; Refresh  (slave pyta co 1h)
                        900             ; Retry    (ponow po 15 min)
                        1209600         ; Expire   (14 dni)
                        86400           ; Minimum TTL (negative cache)
)

; Rekordy NS - autoritative nameservers
@               IN  NS      ns1.example.com.
@               IN  NS      ns2.example.com.

; Glue records dla NS
ns1             IN  A       203.0.113.10
ns2             IN  A       198.51.100.20

; A i AAAA dla apex i www
@               IN  A       203.0.113.10
@               IN  AAAA    2001:db8::10
www             IN  A       203.0.113.10
www             IN  AAAA    2001:db8::10

; CNAME
blog            IN  CNAME   www
mail            IN  A       203.0.113.11

; MX - priority lower = preferred
@               IN  MX      10 mail.example.com.

; SPF w TXT
@               IN  TXT     "v=spf1 mx ip4:203.0.113.11 -all"

; DKIM (skrocony - prawdziwy klucz jest dluzszy)
default.\_domainkey IN TXT   "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb..."

; DMARC
\_dmarc          IN  TXT     "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

; CAA - kto moze wystawiac certyfikaty SSL
@               IN  CAA     0 issue "letsencrypt.org"
@               IN  CAA     0 iodef "mailto:security@example.com"

**Ważne:** zawsze inkrementuj numer serial (format YYYYMMDDNN). Slave porównuje serial i nie pobiera strefy jeśli jest taki sam. Jeśli zapomnisz, slave nie zsynchronizuje zmian.

## Walidacja konfiguracji i restart

\# Sprawdz skladnie named.conf
sudo named-checkconf

# Sprawdz zone file
sudo named-checkzone example.com /etc/bind/zones/db.example.com

# Reload bez restartu (szybsze)
sudo rndc reload

# Albo restart
sudo systemctl restart bind9

# Sprawdz status
sudo systemctl status bind9
sudo rndc status

## Slave server (secondary)

Na drugim VPS instalujemy BIND9 identycznie, ale strefa ma typ `slave` — BIND automatycznie pobierze dane z mastera przez AXFR i zaktualizuje przy każdym NOTIFY:

// Slave - /etc/bind/named.conf.local
zone "example.com" {
    type slave;
    file "/var/cache/bind/db.example.com";
    masters { 203.0.113.10; };
    allow-notify { 203.0.113.10; };
};

## Rekordy DNS — typy i zastosowanie

Typ

Zastosowanie

Przykład

A

IPv4 dla hosta

`www IN A 203.0.113.10`

AAAA

IPv6 dla hosta

`www IN AAAA 2001:db8::10`

CNAME

Alias (przekierowanie nazwowe)

`blog IN CNAME www`

MX

Serwer pocztowy (z priority)

`@ IN MX 10 mail`

TXT

Dowolny tekst (SPF, DKIM, weryfikacje)

`@ IN TXT "v=spf1..."`

NS

Delegacja do innego serwera DNS

`@ IN NS ns1.example.com.`

PTR

Reverse DNS (IP to nazwa)

`10 IN PTR mail.example.com.`

CAA

Autoryzacja CA do wystawiania SSL

`@ IN CAA 0 issue "letsencrypt.org"`

## DNSSEC — podpisanie strefy

Nowoczesny BIND9 obsługuje automatyczne podpisywanie strefy — wystarczy włączyć `dnssec-policy` i BIND sam wygeneruje i rotuje klucze. Tryb auto-maintain pilnuje też rollover ZSK.

// named.conf.options - polityka DNSSEC
dnssec-policy "default" {
    keys {
        ksk lifetime P1Y algorithm ECDSAP256SHA256;
        zsk lifetime P30D algorithm ECDSAP256SHA256;
    };
};

// named.conf.local - wlaczenie dla strefy
zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
    dnssec-policy "default";
    inline-signing yes;
};

\# Po reload - zobacz wygenerowane DS record
sudo rndc reload
sudo rndc dnssec -status example.com

# Pokaz DS record (wklej u rejestratora domeny)
sudo dnssec-dsfromkey /var/cache/bind/K\*.key

# Weryfikacja - odpytaj serwer z flaga +dnssec
dig +dnssec example.com @203.0.113.10

**Kluczowy krok:** DS record wygenerowany przez BIND musisz opublikować u rejestratora domeny (panel zarządzania NS) — bez tego parent zone nie potwierdza kluczy i DNSSEC nie działa. Weryfikacja: `dnssec-analyzer.verisignlabs.com`.

## Troubleshooting

-   **Slave nie aktualizuje się** — sprawdź czy zwiększyłeś serial, czy master ma `allow-transfer` z IP slave, czy firewall przepuszcza TCP 53 (AXFR używa TCP, nie UDP).
-   **SERVFAIL dla wszystkich zapytań** — błąd składni w zone file. Uruchom `named-checkzone` i sprawdź logi `journalctl -u bind9`.
-   **Domena dalej wskazuje stary IP** — TTL. Jeśli TTL=3600, musisz czekać godzinę na wygaśnięcie cache u resolverów. Przed migracją obniż TTL do 300 na 24h.
-   **DNS amplification — skargi od ISP** — masz włączoną rekursję. Ustaw `recursion no` i `allow-query-cache { none; }`.
-   **Rejestrator odrzuca NS** — brakuje glue record. Zarejestruj hostname + IP ns1.example.com u rejestratora przed ustawieniem NS.

## Najczęstsze pytania

Czy warto stawiać własny BIND9 zamiast używać DNS u rejestratora? +

Dla prostych domen (kilka rekordów A/MX) DNS u rejestratora albo Cloudflare jest prostszy i szybszy — globalny anycast, brak utrzymania. Własny BIND9 ma sens gdy: (1) zarządzasz dziesiątkami domen i chcesz pełnej automatyzacji przez API, (2) potrzebujesz nietypowych rekordów lub własnej logiki, (3) budujesz wewnętrzny DNS dla VPC/kubernetes, (4) wymagasz DNSSEC podpisanego własnym kluczem. W 90% przypadków Cloudflare DNS lub rejestrator wystarczy.

Ile serwerów DNS potrzebuję dla domeny produkcyjnej? +

Minimum dwa — jeden master (primary) i jeden slave (secondary), najlepiej w różnych lokalizacjach/sieciach. Większość rejestratorów wymaga co najmniej 2 NS records. Dla ważnych usług rekomenduję 3-4 serwery w różnych AS — jeśli jeden ma awarię, inne odpowiadają. BIND obsługuje transfer strefy (AXFR/IXFR) z master do slave automatycznie po każdej zmianie, dzięki mechanizmowi NOTIFY.

Jak DNSSEC chroni przed atakami DNS spoofing? +

DNSSEC podpisuje każdą odpowiedź DNS kryptograficznie — resolver może zweryfikować że odpowiedź faktycznie pochodzi od autorytatywnego serwera i nie została zmodyfikowana po drodze. Chroni przed cache poisoning (np. Kamiński atak z 2008). Implementacja w BIND9: generujesz ZSK (Zone Signing Key) i KSK (Key Signing Key), podpisujesz strefę (auto-dnssec maintain), publikujesz DS record w strefie nadrzędnej (u rejestratora). Bez DS record w parent DNSSEC nie działa.

Co to jest glue record i kiedy go potrzebuję? +

Glue record to rekord A (IP) dla serwera NS który sam jest subdomeną tej samej domeny. Przykład: chcesz ustawić ns1.example.com jako NS dla example.com. Resolver musi znać IP ns1.example.com żeby zapytać o example.com, ale żeby znaleźć to IP musiałby... zapytać ns1.example.com. Krąg. Rozwiązanie: u rejestratora rejestrujesz glue record (hostname + IP) dla ns1.example.com. Jeśli używasz zewnętrznych NS (ns.cloudflare.com) glue nie jest potrzebny.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z statycznym IP — idealny pod własny BIND9 master + slave

VPS DNS

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS do testowania konfiguracji DNS zanim przełączysz produkcję

Test VPS

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z wygodnym panelem DNS — alternatywa bez własnego BIND9

Managed

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [Domeny i DNS — konfiguracja](/baza-wiedzy/domeny-dns-konfiguracja)
-   [SPF, DKIM, DMARC — konfiguracja email](/baza-wiedzy/spf-dkim-dmarc-konfiguracja)
-   [Cloudflare — konfiguracja z hostingiem](/baza-wiedzy/cloudflare-konfiguracja-z-hostingiem)
-   [Wszystkie artykuły](/baza-wiedzy/)