Dari Domain ke IP Address
Saat kamu ketik google.com di browser, komputer tidak tahu dimana server Google berada. DNS (Domain Name System) adalah buku telepon internet: translate nama domain ke IP address.
Resolusi DNS: Perjalanan Satu Query
Browser: "Apa IP google.com?"
│
▼
Recursive Resolver (ISP / 1.1.1.1 / 8.8.8.8)
│ (cek cache — kalau ada, balas langsung)
▼
Root DNS (.) "Tanya TLD .com ke: 192.5.6.30"
│
▼
TLD DNS (.com) "Tanya authoritative google.com ke: ns1.google.com"
│
▼
Authoritative NS "google.com = 142.250.80.46"
│
▼
Balas ke browser + cache di resolver sesuai TTL
Record Types (yang Sering Dipakai)
A → map domain ke IPv4 myapp.com → 203.0.113.5
AAAA → map domain ke IPv6 myapp.com → 2001:db8::1
CNAME → alias ke domain lain www.myapp.com → myapp.com
MX → mail server myapp.com → mail.google.com (priority 10)
TXT → teks bebas (verifikasi, myapp.com → "v=spf1 include:_spf.google.com ~all"
SPF, DKIM, DMARC)
NS → nameserver authoritative myapp.com → ns1.cloudflare.com
SRV → service discovery _sip._tcp.example → port + target (VoIP, chat)
TTL & Propagasi
TTL (Time To Live) = berapa detik resolver boleh cache jawaban sebelum query ulang. Misal TTL = 3600 → cache 1 jam.
- TTL panjang (86400 = 1 hari) — performa bagus (jarang query), tapi perubahan DNS butuh 1 hari "propagasi"
- TTL pendek (300 = 5 menit) — perubahan cepat terlihat, tapi resolver sering query authoritative
- Best practice: turunkan TTL ke 300 beberapa hari sebelum DNS migration, lalu naikkan lagi setelah selesai
"Propagasi DNS lambat" biasanya bukan masalah protocol — itu cache TTL yang belum expired di resolver di seluruh dunia.
A vs CNAME: Tradeoff
# A record — langsung ke IP
myapp.com A 203.0.113.5
# CNAME — alias ke domain lain, resolver lookup lagi
www.myapp.com CNAME myapp.com
app.vercel.com CNAME cname.vercel-dns.com
- A record — 1 DNS lookup, tapi kamu harus tahu IP (berubah = update manual). Cocok untuk server statis
- CNAME — 2 DNS lookup (resolusi double), tapi provider bisa ganti IP tanpa kamu update. Cocok untuk PaaS/CDN (Vercel, Cloudflare, S3)
- Batasan: CNAME tidak boleh di apex domain (
myapp.com, hanya di subdomainwww.myapp.com). Solusi:ALIAS/ANAME(vendor-specific) atau pakai provider yang support flattening (Cloudflare)
Internal DNS
DNS tidak hanya untuk internet publik. Infrastruktur modern pakai internal DNS untuk service discovery:
- Docker Compose — service bisa akses
postgres:5432, bukan IP — Docker punya DNS internal - Kubernetes — service DNS:
myservice.default.svc.cluster.local - AWS Route 53 private hosted zone — DNS internal untuk VPC
- Consul / etcd — service registry dengan DNS interface
DNS-Based Load Balancing
# Round-robin: multiple A records untuk domain sama
myapp.com A 203.0.113.5
myapp.com A 203.0.113.6
myapp.com A 203.0.113.7
# Resolver pilih salah satu (atau client iterate jika pertama gagal)
# Geographic: Route 53 Geo Routing
# User dari Asia → asia-server IP
# User dari US → us-server IP
# Latency-based: pilih origin dengan latency terendah
# Failover: jika primary unhealthy, swap ke secondary
Load balancing via DNS sederhana tapi bukan yang paling presisi — health check di sisi DNS lag beberapa menit. Untuk failover cepat, kombinasikan dengan load balancer di layer 4/7.
Tools untuk Debugging DNS
# dig — paling informatif
dig google.com # A record
dig google.com MX # mail record
dig google.com ANY # semua record
dig @1.1.1.1 google.com # pakai resolver tertentu
dig +trace google.com # trace dari root ke authoritative
# nslookup — versi sederhana, ada di Windows juga
nslookup google.com
nslookup google.com 8.8.8.8
# host — ringkas
host google.com
# Cek DNS cache OS (Linux)
sudo systemd-resolve --statistics
sudo systemd-resolve --flush-caches
Contoh Pattern: Migrasi Domain ke Server Baru
# 1 minggu sebelum cutover: turunkan TTL
myapp.com A 203.0.113.5 TTL=300
# Cutover: update A record
myapp.com A 203.0.113.99 TTL=300
# Traffic beralih dalam ~5 menit (bukan 1 hari)
# Setelah stable: naikkan TTL lagi
myapp.com A 203.0.113.99 TTL=86400