🌐 DNS Fundamentals & BIND9 Self-Hosting

Filosofi: DNS adalah hal pertama yang harus working sebelum service apapun jalan. Tapi juga hal paling sering dianggap remeh β€” sampai ada outage dan semua app β€œConnection refused” karena resolver gak bisa resolve.


DNS Resolution Flow

Browser Anda
    β”‚
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    1     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Stub Resolver    │────────▢│  Recursive        β”‚
β”‚  (/etc/resolv.conf)β”‚         β”‚  Resolver (ISP/   β”‚
β”‚  192.168.1.1      │◀────────│  8.8.8.8/1.1.1.1) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    6     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                        β”‚ 2
                                        β–Ό
                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                β”‚  Root Nameserver  β”‚
                                β”‚  (.)              β”‚
                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                        β”‚ 3 β€” "ask .id"
                                        β–Ό
                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                β”‚  TLD Nameserver   β”‚
                                β”‚  (.id)            β”‚
                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                        β”‚ 4 β€” "ask ns1.domain.com"
                                        β–Ό
                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                β”‚  Authoritative    │◀── BIND9 HERE
                                β”‚  Nameserver       β”‚
                                β”‚  (BIND9)          β”‚
                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚ 5 β€” "A record: 203.x.x.x"
                                    β”‚
                                    β–Ό
                              Answer to client

Record Types β€” Yang Sering Dipakai

RecordFungsiContoh
AIPv4 addressdomain.com. IN A 203.0.113.1
AAAAIPv6 addressdomain.com. IN AAAA 2001:db8::1
CNAMEAlias ke domain lainwww IN CNAME domain.com.
MXMail server prioritydomain.com. IN MX 10 mail.domain.com.
TXTTeks (SPF, DKIM, verification)domain.com. IN TXT "v=spf1 mx ~all"
NSNameserver delegationdomain.com. IN NS ns1.domain.com.
SOAStart of Authority β€” master dataWajib di setiap zone
SRVService location_sip._tcp IN SRV 10 5 5060 sip.domain.com

TTL Strategy

TTL rendah (60-300s) untuk record yang sering berubah (failover, CDN). TTL tinggi (3600-86400s) untuk MX, NS, TXT.


Authoritative vs Recursive

AspekAuthoritativeRecursive
TugasJawab query untuk zone yang di-manageCari jawaban dari rantai resolver
DataZone file lokal β€” source of truthHasil cache dari upstream
ContohBIND9 sebagai primary/secondaryUnbound, systemd-resolved, 8.8.8.8
Homelab useHost domain sendiriLebih baik pake upstream (Cloudflare/Google)

Jangan Campur

BIND9 bisa jadi authoritative + recursive sekaligus. Tapi jangan. Authoritative harus bisa diakses publik. Recursive cuma boleh untuk internal. Campur = open resolver β†’ DDoS amplification vector.


BIND9 β€” Basic Setup (Authoritative Only)

Install

apt install bind9 bind9utils bind9-doc

Zone File Example β€” db.domain.com

$TTL 3600
@   IN  SOA     ns1.domain.com. admin.domain.com. (
                2026071101  ; serial (YYYYMMDDNN)
                3600        ; refresh
                900         ; retry
                86400       ; expire
                600 )       ; minimum TTL
 
; Nameservers
@       IN  NS      ns1.domain.com.
@       IN  NS      ns2.domain.com.
 
; Records
@       IN  A       203.0.113.10
ns1     IN  A       203.0.113.10
ns2     IN  A       203.0.113.20
www     IN  CNAME   @
mail    IN  A       203.0.113.10
@       IN  MX 10   mail.domain.com.
@       IN  TXT     "v=spf1 mx -all"

Named.conf β€” named.conf.local

zone "domain.com" {
    type master;
    file "/etc/bind/db.domain.com";
    allow-transfer { 203.0.113.20; };   // secondary NS
    also-notify { 203.0.113.20; };
};

Testing

# Verifikasi config
named-checkconf
named-checkzone domain.com /etc/bind/db.domain.com
 
# Query test
dig @localhost domain.com A
dig @localhost domain.com MX
dig @localhost domain.com TXT

Homelab Use Cases

SkenarioSetupComplexity
Local dev domains (*.test)BIND9 + dnsmasqMudah
Ad blockingPi-hole (DNS sinkhole)Mudah
Internal service discoveryBIND9 + SRV recordsMedium
Public nameserverBIND9 + DDNS + monitoringAdvanced
Secondary (slave)BIND9 zone transferMedium

Failure Mode β€” Ketika DNS Gagal

GejalaKemungkinanTest
”ping: name not resolved”Resolver brokendig @1.1.1.1 domain.com
Website buka, email gak bisaMX record salahdig domain.com MX
Lambat banget buka webResolver slow/lossdig +stats domain.com
”SERVFAIL”Authoritative NS errordig +trace domain.com
Port 53 filteredFirewall blocknmap -sU -p 53 -Pn host
Serial mismatchZone transfer gagalCek serial di SOA vs secondary


🧠 Berpikir β€” Metodologi Penyusunan Catatan

Catatan ini disusun melalui proses berpikir terstruktur sebagai berikut:

1. Thinking Type yang Digunakan

TypeKenapaBagian
Cognitive ThinkingMembangun fondasi pemahaman DNS dari resolusi flow β€” siapa yang ngomong sama siapa, urutannya gimanaDNS Resolution Flow diagram
Analytical ThinkingMemecah record types berdasarkan fungsi dan use case β€” kapan pake A vs CNAME vs MX vs SRVRecord Types table
Systems ThinkingMenganalisis Authoritative vs Recursive β€” bagaimana koneksi keduanya, kenapa bahaya kalau digabungAuthoritative vs Recursive
Concrete ThinkingBIND9 setup step-by-step β€” install, zone file, named.conf, testingBIND9 Basic Setup
Futures ThinkingFailure mode analysis β€” apa yang terjadi ketika DNS gagal di tiap layerFailure Mode table

2. Background Knowledge (Pra-Penulisan)

  • DNS resolution chain: stub β†’ recursive β†’ root β†’ TLD β†’ authoritative. 7 hops minimal
  • SOA fields: serial (YYYYMMDDNN β€” wajib increment), refresh/retry/expire/TTL β€” hubungan satu sama lain
  • Open resolver danger: pengalaman BIND9 config salah β†’ recursive terbuka β†’ jadi DDoS amplifier
  • dig diagnostic: +trace buat debug rantai, +stats buat ukur latency, +short buat output bersih
  • TTL strategy: MX dan NS sebaiknya TTL tinggi β€” jarang berubah, dan caching membantu stability
  • Serial number convention: format YYYYMMDDNN β€” NN untuk multiple changes dalam sehari. Git hook bisa auto-increment

3. RAG Vault β€” Dokumen yang Dikonsultasi

DokumenKontribusi
Network SecurityOSI layer context, port UDP 53, TCP 53 untuk zone transfer
Infrastructure AdministratorServer layout β€” namespace atau VM dedicated untuk BIND9
Podman Networking & UFWPort exposure untuk BIND9 β€” UFW allow 53, routing rules

4. Sintesis β€” Bagaimana Bagian Bergabung

Background Knowledge (DNS protocol + BIND9 ops + dig diagnostics)
    β”‚
    β–Ό
RAG Vault (server architecture context)
    β”‚
    β–Ό
Cognitive:   Resolution flow β†’ siapa ngomong sama siapa
    β”‚
    β–Ό
Analytical:  Record types β†’ decompose per function β†’ comparison table
    β”‚
    β–Ό
Systems:     Auth vs Recursive β†’ kenapa gabung itu bahaya β†’ DDoS amplification
    β”‚
    β–Ό
Concrete:    BIND9 config β†’ install β†’ zone file β†’ named.conf β†’ testing
    β”‚
    β–Ό
Futures:     Failure modes β†’ tiap gejala β†’ diagnosis β†’ fix

5. Sequential Thinking Steps

Thought 1 (Cognitive):   "DNS resolution flow: stub β†’ recursive β†’ root β†’ TLD β†’ authoritative β†’ answer."
                           "Butuh diagram urutan biar jelas."
Thought 2 (Analytical):  "Ada 8 record types yang sering dipakai. Masing-masing punya format dan use case beda."
                           "A untuk IPv4, AAAA untuk IPv6, CNAME untuk alias, MX untuk mail."
Thought 3 (Systems):     "Authoritative = punya data. Recursive = cari data. Kalau digabung = open resolver."
                           "Open resolver = DDoS amplification vector. Jangan."
Thought 4 (Concrete):    "BIND9 config: install β†’ zone file β†’ named.conf β†’ named-checkconf β†’ dig test."
                           "Exact file content, bukan placeholder."
Thought 5 (Critical):    "Serial number lupa di-increment = zone transfer gak jalan, slave serve stale data."
                           "Ini bug paling sering dan paling silent."
Thought 6 (Futures):     "Kalau DNS down, apa yang terjadi? 'name not resolved', MX fail, SERVFAIL."
                           "Bikin table gejala β†’ kemungkinan β†’ test β†’ fix."

πŸ”— Lihat Juga