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

⚡ W skrócie · 9 min czytania

-   Kompletny przewodnik po BIND9: named.conf.options, zone files z rekordami A/AAAA/CNAME/MX/TXT/SPF/DKIM, slave server przez AXFR, podpisanie strefy DNSSEC i troubleshooting.
-   Instalacja i struktura plików.
-   named.conf.options - globalne ustawienia.
-   Definicja strefy - named.conf.local.
-   Zone file - rekordy A/AAAA/MX/TXT/SPF/DKIM.

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 "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 "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 "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/)
-   [Prometheus Alertmanager - konfiguracja reguł alertów i routingu
    
    Prometheus Alertmanager krok po kroku: alert rules YAML, routing drzewo receivers Slack/PagerDuty/email, grupowanie,…
    
    ](/baza-wiedzy/prometheus-alertmanager-konfiguracja/)
-   [Elasticsearch na VPS - instalacja, konfiguracja i podstawy Query DSL
    
    Elasticsearch: instalacja na Ubuntu, konfiguracja JVM heap, tworzenie indeksów i mappingów, podstawy Query DSL (match,…
    
    ](/baza-wiedzy/elasticsearch-instalacja-vps/)
-   [WireGuard VPN na VPS - instalacja i konfiguracja
    
    WireGuard jako nowoczesny VPN: instalacja na Ubuntu/Debian, generowanie kluczy, konfiguracja peer-to-peer i…
    
    ](/baza-wiedzy/wireguard-vpn-vps/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 9 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)