DNS Basics — DevOps

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…

DNS (Domain Name System) adalah buku kontak internet: dia menerjemahkan nama seperti catatan.example.com jadi alamat IP seperti 203.0.113.10, karena komputer cuma bisa tersambung lewat IP. Bayangin kontak di HP-mu. Kamu cukup mengetik "Sari", HP yang mencarikan nomornya. Kalau Sari ganti nomor, kontak di HP teman-temannya masih nomor lama sampai mereka memperbaruinya. DNS persis begitu, termasuk masalah nomor lamanya.

🧪 Tebakan cepat: record A catatan.example.com punya TTL 3600. Jam 09:50, resolver 1.1.1.1 bertanya dan dapat 203.0.113.10 (web-1). Jam 10:00 kamu ganti record itu ke 203.0.113.20 (web-2). Sampai jam berapa resolver itu masih menjawab IP lama? Tebak dulu, jawabannya ada di bagian "TTL: kenapa perubahan butuh waktu".

Record di zona example.com

Semua record sebuah domain dikumpulkan di satu zona, yang dipegang authoritative nameserver: server yang punya jawaban resmi. example.com adalah domain yang dicadangkan khusus untuk contoh, jadi di pelajaran ini anggap zonanya milik tim catatan-api. Authoritative-nya a.iana-servers.net dan b.iana-servers.net, dan record untuk catatan-api, sama dengan yang ada di Lab:

catatan.example.com.      3600  IN  A      203.0.113.10
catatan.example.com.      3600  IN  AAAA   2001:db8::10
www.catatan.example.com.  3600  IN  CNAME  catatan.example.com.
catatan.example.com.      3600  IN  MX     1 smtp.google.com.
catatan.example.com.      3600  IN  TXT    "v=spf1 include:_spf.google.com ~all"

Tiap baris: nama, TTL (detik), kelas (IN = internet), tipe, nilai. Titik di akhir nama menandai nama lengkap.

Bertanya dengan dig

dig menanyakan record ke DNS dan mencetak jawabannya. @1.1.1.1 artinya bertanya ke resolver Cloudflare. +noall +answer artinya cetak bagian jawabannya saja:

$ dig @1.1.1.1 www.catatan.example.com +noall +answer
www.catatan.example.com. 3600   IN      CNAME   catatan.example.com.
catatan.example.com.    3600    IN      A       203.0.113.10

Perjalanan satu pertanyaan

Resolver (misalnya 1.1.1.1 milik Cloudflare atau 8.8.8.8 milik Google) adalah server yang mencarikan jawaban untukmu dan menyimpannya di cache. Kalau belum ada di cache, dia bertanya berjenjang, dan dig +trace mengulang perjalanan itu langkah demi langkah:

Langkah Yang ditanya Jawabannya
1 resolver 1.1.1.1 daftar 13 root server, a.root-servers.net sampai m
2 root server, misalnya l.root-servers.net "aku gak tahu, tanya server .com" (a.gtld-servers.net sampai m)
3 server TLD .com, misalnya e.gtld-servers.net "example.com diurus a.iana-servers.net dan b"
4 authoritative a.iana-servers.net catatan.example.com A 203.0.113.10, TTL 3600

Dua langkah terakhir di output dig @1.1.1.1 +trace +nodnssec catatan.example.com (+nodnssec menyembunyikan tanda tangan DNSSEC supaya ringkas):

example.com.            172800  IN      NS      a.iana-servers.net.
example.com.            172800  IN      NS      b.iana-servers.net.
;; Received 96 bytes from 192.12.94.30#53(e.gtld-servers.net) in 24 ms

catatan.example.com.    3600    IN      A       203.0.113.10
;; Received 64 bytes from 199.43.135.53#53(a.iana-servers.net) in 8 ms

Root dan TLD gak tahu IP catatan.example.com. Mereka cuma menunjuk ke server berikutnya, sampai authoritative yang menjawab. Cache browser dan OS sebelum semua ini dibahas di pelajaran DNS di Web Fundamentals.

TTL: kenapa perubahan butuh waktu

TTL (Time To Live) adalah berapa detik sebuah jawaban boleh disimpan di cache. Selama TTL belum habis, resolver menjawab dari cache tanpa bertanya lagi, dan dig menampilkan sisa TTL-nya, yang terus berkurang. Dengan TTL 3600:

Jam Kejadian Jawaban resolver 1.1.1.1
09:50 resolver bertanya ke authoritative, menyimpan jawabannya 3600 detik 203.0.113.10, TTL 3600
10:00 kamu ganti A ke 203.0.113.20 203.0.113.10, sisa 3000
10:30 authoritative sudah menjawab IP baru 203.0.113.10, sisa 1200
10:50 cache habis, resolver bertanya lagi 203.0.113.20, TTL 3600

Resolver itu baru ikut jam 10:50. Itu jawaban tebakannya. Yang disebut "propagasi DNS" sebenarnya cuma menunggu cache di ribuan resolver di seluruh dunia habis satu per satu. Gak ada yang mengirim perubahanmu ke mereka.

Resep pindah server catatan-api dari web-1 ke web-2:

  1. Sehari sebelumnya, turunkan TTL record A dan AAAA ke 300 (5 menit). Tunggu minimal TTL lama (1 jam) supaya semua cache menyimpan versi TTL 300.
  2. Ganti IP-nya ke web-2. Paling lama 5 menit kemudian, semua resolver ikut.
  3. Biarkan web-1 tetap menyala sampai lalu lintasnya habis, lalu naikkan TTL lagi ke 3600 supaya resolver gak terlalu sering bertanya.

Mengikuti CNAME di kode

Di latihan, kamu menulis resolver mini: zona berupa array { name, type, value, ttl }, dan function yang mengikuti CNAME sampai ketemu tipe yang diminta:

function resolveDns(zone, domain, type) {
  const chain = [];
  let current = domain;
  for (let hop = 0; hop < 10; hop++) {
    chain.push(current);
    const direct = zone.find((r) => r.name === current && r.type === type);
    if (direct) return { value: direct.value, ttl: direct.ttl, chain };
    const alias = zone.find((r) => r.name === current && r.type === "CNAME");
    if (!alias) return { error: "NXDOMAIN" };
    current = alias.value;
  }
  return { error: "NXDOMAIN" };
}
Panggilan Hasil
resolveDns(zone, "catatan.example.com", "A") { value: "203.0.113.10", ttl: 3600, chain: ["catatan.example.com"] }
resolveDns(zone, "www.catatan.example.com", "A") { value: "203.0.113.10", ttl: 3600, chain: ["www.catatan.example.com", "catatan.example.com"] }
resolveDns(zone, "blog.catatan.example.com", "A") { error: "NXDOMAIN" }

⚠️ Jebakan yang sering ketemu

TL;DR: DNS menerjemahkan nama jadi IP. Record utama: A (IPv4), AAAA (IPv6), CNAME (alias ke nama lain, gak boleh di apex), MX (server email, dengan prioritas), TXT (teks bebas, misalnya SPF dan verifikasi), NS (siapa authoritative-nya). Resolver mencari dari root, lalu server TLD, lalu authoritative, dan dig +trace menampilkan perjalanan itu; dig @1.1.1.1 nama bertanya ke resolver, dig @a.iana-servers.net nama ke authoritative. Resolver menyimpan jawaban selama TTL, jadi perubahan baru terlihat setelah cache lama habis: turunkan TTL ke sekitar 300 sebelum pindah server, supaya perubahan IP cepat terlihat.

Yang akan kamu pelajari