সরাসরি পর্বে যান
পর্ব ২৯ · ৮১-এর মধ্যে · মডিউল ৫

Cloud DNS — record, TTL, health check আর traffic routing

Cloud DNS — Records, TTL, Health Checks and Traffic Routing

Taught in Bangla, this lesson covers public and private hosted zones, the record types used in operations, why a CNAME cannot sit at the apex and how alias records help, what TTL and propagation really mean, moving a site without downtime, weighted, latency, geo and failover routing, calculating failover time, split-horizon and hybrid resolvers, and DNS security including registrar lock, DNSSEC and dangling records, with simulators and worked examples.

এই পর্বে যা শিখবেন

  • Public আর private hosted zone বানানো, আর registrar-এর সাথে জোড়া
  • A, AAAA, CNAME, alias, MX, TXT, NS আর CAA কোন কাজে লাগে
  • TTL কমিয়ে downtime ছাড়া site সরানো, আর পুরোনো server কখন বন্ধ করবেন
  • Weighted, latency, geo আর failover routing বাছাই, সাথে failover-এর সময়ের হিসাব
  • Split-horizon, VPC resolver, hybrid forwarding আর DNS-এর নিরাপত্তা

১ · Hosted zone — আপনার domain-এর রেজিস্টার খাতা

রাত দুইটায় একটি কাল্পনিক অনলাইন বাজার অ্যাপের দল নতুন region-এ সরে গেল। Server ঠিক আছে, load balancer ঠিক আছে, তবু ঢাকার কিছু ব্যবহারকারী পুরোনো site দেখছেন। অথচ চট্টগ্রামের অন্য কেউ দেখছেন নতুনটি। কেউ ভাবলেন, “DNS এখনো propagate হয়নি।” এই একটি বাক্যে যে ভুল ধারণা লুকিয়ে আছে, এই পর্ব সেটি ভাঙবে।

DNS-এর protocol আর নামের গাছের তত্ত্ব আছে Computer Networks · DNS পর্বে। সংক্ষেপে: resolver আপনার হয়ে root, TLD আর authoritative server-কে জিজ্ঞেস করে উত্তর আনে, তারপর cache করে। এখানে আমরা দেখব অন্য দিকটি। আপনি যখন একটি সেবা চালান, তখন DNS কীভাবে সাজাবেন, বদলাবেন, আর বিপদে কীভাবে ব্যবহার করবেন।

Cloud-এ authoritative server আপনাকে বানাতে হয় না। আপনি একটি hosted zone তৈরি করেন। এটি একটি domain-এর সব record-এর managed খাতা, আর provider সেটি দুনিয়াজুড়ে ছড়ানো name server থেকে পরিবেশন করে। এই server-গুলো সাধারণত anycast-এ চলে।

লঞ্চঘাটের টিকিট কাউন্টারের কথা ভাবুন। Registrar হলো যে অফিসে ঘাটের নাম নিবন্ধন হয়। Hosted zone হলো কাউন্টারের খাতা, যেখানে লেখা কোন লঞ্চ কোন পন্টুনে। আর resolver হলো সেই কুলি, যিনি একবার জেনে নিয়ে খাতায় না গিয়ে কিছুক্ষণ মনে রাখা তথ্যেই যাত্রীদের পথ দেখান।

Public আর private zone

  • Public hosted zone: Internet-এর যে কেউ জিজ্ঞেস করতে পারে। ওয়েবসাইট, API আর mail-এর record এখানে থাকে।
  • Private hosted zone: শুধু আপনার নির্বাচিত VPC-র ভেতর থেকে উত্তর মেলে। Database বা ভেতরের সেবার নাম এখানে রাখা হয়।

একটি ধাপ নতুনরা প্রায়ই ভুলে যান। Public zone বানালে provider আপনাকে কয়েকটি name server-এর নাম দেয়, যেমন Route 53-এ সাধারণত চারটি। এগুলো registrar-এ বসাতে হবে। তবেই TLD আপনার zone-এর দিকে পথ দেখাবে। এই কাজ না করলে zone-এ যত record-ই লিখুন, কেউ দেখবে না। Zone মুছে আবার বানালে নাম বদলে যেতে পারে, তাই তখনো registrar-এ মিলিয়ে দেখুন।

Resolver থেকে hosted zone আর routing policy

From a recursive resolver to a hosted zone with a routing policy

Resolver থেকে hosted zone, routing policy আর target ব্যবহারকারী ১ · নাম জিজ্ঞাসা Recursive resolver cache · TTL শেষ হলেই আবার প্রশ্ন ২ · NS কে? ৩ · A? Root TLD (.com) Hosted zone · example.com Routing policy www → weighted · blue 90, green 10 Health check অসুস্থ target উত্তর থেকে বাদ blue · ৯০% 198.51.100.20 green · ১০% 198.51.100.21
ছবি ২৯.১ — Routing policy শুধু উত্তর বাছাই করে। উত্তর পাওয়ার পর ব্যবহারকারীর HTTP traffic সরাসরি target-এ যায়, DNS তার পথে থাকে না। সিদ্ধান্ত হয় নাম খোঁজার সময়, প্রতিটি অনুরোধের সময় নয়।

একই কাজ তিন provider-এ এই নামে পাবেন। নামগুলো লেখার সময়ের; নতুন সুবিধা আসতে থাকে, তাই official docs মিলিয়ে নিন।

কাজAWSAzureGoogle Cloud
Public zoneRoute 53 public hosted zoneAzure DNS public zoneCloud DNS public zone
Private zonePrivate hosted zone, VPC-র সাথে যুক্তPrivate DNS zone, VNet linkCloud DNS private zone
Traffic routingRoute 53 routing policyTraffic ManagerCloud DNS routing policy
Health checkRoute 53 health checkTraffic Manager endpoint monitoringHealth check, কোন target-এ চলে তা docs-এ দেখুন
Hybrid DNSResolver endpoint আর ruleDNS Private ResolverForwarding zone আর server policy

২ · Record-এর ধরন — চালানোর সময় যেগুলো হাতে লাগে

প্রতিটি record-এর চারটি অংশ: নাম, TTL, ধরন আর মান। এদের তাত্ত্বিক রূপ আছে Computer Networks-এর DNS পর্বে। এখানে দেখুন কোনটি কখন, আর কোথায় ঠকতে হয়।

ধরনকাজচালানোর সময়ের সতর্কতা
A / AAAAনাম থেকে IPv4 / IPv6 ঠিকানাLoad balancer-এর IP বদলাতে পারে, তাই সরাসরি IP লিখবেন না। Alias বা CNAME দিন।
CNAMEএক নামকে আরেক নামের ডাকনাম করাApex-এ বসে না। একই নামে অন্য record-ও বসে না।
ALIAS / ANAMEProvider-এর বাড়তি সুবিধা: apex-এও নাম দিয়ে target বলাএটি standard record নয়, provider-ভেদে আলাদা। Zone অন্য provider-এ সরালে হুবহু যায় না।
MXএই domain-এর mail কোন server নেবেমান IP নয়, নাম হবে। ভুল হলে mail নীরবে হারিয়ে যেতে পারে।
TXTSPF, DKIM, DMARC আর domain যাচাই (যেমন DNS-01)Secret রাখবেন না; সবাই পড়তে পারে। পুরোনো যাচাই record জমতে দেবেন না।
NSএই zone বা sub-zone কোন server সামলায়Registrar-এর NS আর zone-এর NS মিলতে হবে। TLD-তে থাকা NS-এর TTL আপনার হাতে নেই।
CAAকোন Certificate Authority এই domain-এ certificate দিতে পারবেনতুন CA-তে যাওয়ার আগে আপডেট করুন, নইলে certificate নবায়ন আটকে যাবে।
SOAZone-এর প্রশাসনিক তথ্য, negative cache-এর TTLCloud-এ সাধারণত provider বসিয়ে দেয়। শেষ মানটি অংশ ৪-এ কাজে লাগবে।

CAA-র একটি নিয়ম মনে রাখা দরকার। CA/Browser Forum-এর নিয়মে ২০১৭ সাল থেকে public CA-কে certificate দেওয়ার আগে CAA দেখতে হয়। Standard-টি এখন RFC 8659 (২০১৯)। তাই এটি একটি ছোট কিন্তু সত্যিকারের নিরাপত্তা-স্তর। এটি অন্য CA-কে ভুল করে আপনার নামে certificate দেওয়া থেকে থামায়।

৩ · Apex-এ CNAME কেন বসে না, আর alias কী করে

Zone apex মানে domain-এর নিজের নাম, www ছাড়া example.com. ধরুন আপনার site একটি load balancer-এর পেছনে, যার নাম lb-demo.example.net. www-এর জন্য CNAME বসানো সহজ। কিন্তু example.com-এ বসাতে গেলে console আপত্তি করবে।

কারণটি provider-এর খেয়াল নয়, DNS-এর নিয়ম। RFC 1034 (১৯৮৭) বলে, কোনো নামে CNAME থাকলে সেই নামে অন্য কোনো record থাকতে পারবে না। আর RFC 2181 (১৯৯৭) তা আরও স্পষ্ট করে। অথচ apex-এ SOA আর NS থাকতেই হবে, সাধারণত MX আর TXT-ও থাকে। দুই নিয়ম একসাথে মানা যায় না।

একটি ঠিকানায় “এই বাড়ি নেই, ওই বাড়িতে যান” লেখা সাইনবোর্ড ঝোলালে সেখানে আর কোনো চিঠির বাক্স রাখা চলে না। CNAME ঠিক এই সাইনবোর্ড। কিন্তু apex বাড়িতে তো দলিল (SOA) আর মালিকের নাম (NS) থাকতেই হবে।

Alias record এই গিঁট খোলে কৌশলে। আপনি provider-কে বলেন, “apex-এর A উত্তরের জন্য এই target-এর ঠিকানাগুলো দেখে নিন।” Authoritative server নিজের দিক থেকে target-এর বর্তমান IP বের করে, আর resolver-কে একটি সাধারণ A উত্তর দেয়। Resolver CNAME দেখেই না। তাই নিয়ম ভাঙে না, আর load balancer-এর IP বদলালেও আপনাকে কিছু করতে হয় না।

বিষয়CNAMEAlias
Apex-এ চলে?নাহ্যাঁ
Resolver কী দেখে?CNAME, তারপর নিজেই target খোঁজেসরাসরি A/AAAA
Targetযেকোনো DNS নামসাধারণত provider-এর সমর্থিত target; কিছু provider যেকোনো নাম নেয়
Standard?হ্যাঁনা, provider-এর নিজস্ব সুবিধা

উদাহরণ: Route 53-এর alias, Azure DNS-এর alias record set, আর কিছু DNS provider-এর ALIAS, ANAME বা CNAME flattening. Google Cloud DNS-এ এই সুবিধার অবস্থা সময়ের সাথে বদলেছে, তাই docs দেখে নিন। নাম কাছাকাছি হলেও ভেতরের কাজ আর target-এর সীমা provider-ভেদে আলাদা।

৪ · TTL আর “propagation” — আসলে কী ছড়ায়

“DNS propagate হতে ৪৮ ঘণ্টা লাগে” কথাটি শুনে মনে হয়, নতুন record ঢেউয়ের মতো দুনিয়ায় ছড়াচ্ছে। বাস্তব উল্টো। Propagation বলে কিছু push হয় না। Provider-এর নিজের name server-গুলো সাধারণত দ্রুত মিলে যায়। তারপর কিছুই ছড়ায় না। শুধু দুনিয়ার লাখো resolver-এর cache একে একে মেয়াদোত্তীর্ণ হয়। প্রত্যেকে নিজের সময়ে আবার জিজ্ঞেস করে।

মূল ধারণা

TTL একটি প্রতিশ্রুতি: “এই উত্তর সর্বোচ্চ এতক্ষণ রাখা যাবে।” উত্তরটি যে মুহূর্তে cache-এ ঢুকল, সেই TTL তখনই ঠিক হয়ে গেল। পরে authoritative-এ TTL কমালে আগে নেওয়া কপির ওপর তার কোনো প্রভাব নেই। তাই TTL কমাতে হয় আগে, অন্তত এক পুরোনো TTL সময় অপেক্ষা করে।

নিজের চোখে দেখতে পারেন। Resolver-এর কাছে থাকা TTL কমতে থাকে, আর authoritative সবসময় পুরো মান দেখায়। আউটপুট নমুনা; নাম আর মান আলাদা হবে।

# ask the resolver you normally use (cached copy, TTL counts down)
dig +noall +answer www.example.com A
# ask the authoritative server directly (full TTL)
dig +noall +answer @ns1.example.net www.example.com A

# নমুনা আউটপুট — version-ভেদে আলাদা হতে পারে
# www.example.com.   47   IN   A   198.51.100.20
# www.example.com.   60   IN   A   198.51.100.20

Site সরানো: TTL আগে কমানোর পুরো ধাপ

নিচের কাল্পনিক site-এর পুরোনো ঠিকানা old = 198.51.100.10, নতুন new = 203.0.113.50. Record-এর TTL 86400 s, অর্থাৎ ১ দিন। T হলো cutover, অর্থাৎ যে মুহূর্তে record বদলে নতুন ঠিকানায় যাওয়া হবে। R1 একটি resolver, যে T-এর ২৬ ঘণ্টা আগে উত্তরটি নিয়েছিল।

shop.example.com · পুরোনো TTL 86400 s · নতুন TTL 60 s
সময়
Authoritative-এর উত্তর
R1-এর cache
Old-এ traffic
New-এ traffic
Old server
  1. T-26h. R1 উত্তরটি নিল। এই কপি ২৪ ঘণ্টা বৈধ, অর্থাৎ T-2h পর্যন্ত। দল ঠিক করল T-25h-এ TTL কমাবে।
  2. T-25h. Authoritative-এ TTL হলো 60, ঠিকানা একই। R1-এর কোনো পরিবর্তন নেই; তার কপিতে এখনো 82800 s বাকি। এই ধাপের ফল চোখে পড়ে না, আর সেখানেই ফাঁদ: কেউ ভাবতে পারেন কাজ শেষ, এখনই ঠিকানা বদলাই।
  3. T-2h. R1-এর ২৪ ঘণ্টার কপি শেষ। সে নতুন করে নিল, এবার TTL 60. এখন থেকে প্রতিটি কপির আয়ু এক মিনিট। T-25h-এর ঠিক আগে কপি নেওয়া resolver-ও T-1h-এ শেষ করবে, তাই ১ ঘণ্টা হাতে থাকে।
  4. T. Record-এ new বসল। এই মুহূর্তে সবার হাতে এখনো old, কিন্তু সর্বোচ্চ ৬০ সেকেন্ডের জন্য। Rollback চাইলে এখন এক মিনিটেই ফেরা যাবে।
  5. T+60 s. TTL মেনে চলা resolver-রা new নিয়েছে। প্রায় ২% traffic (ধরে নেওয়া মান) এখনো old-এ: TTL না মানা client আর চালু connection. তাই old এখনো চলবে, আর চালু সংযোগগুলো ধীরে শেষ হতে দেওয়া হবে (drain).
  6. T+24h. Old-এর log-এ অনুরোধ নেই। এবার old বন্ধ করা যায়। TTL-ও বাড়িয়ে 3600 করা যায়, যাতে query আর খরচ কমে।

যদি TTL না কমিয়েই সরাতেন? নিচের planner দুই পথের তুলনা করে। ধরে নেওয়া হয়েছে, ২% ট্রাফিক TTL না মেনে ২ ঘণ্টা পর্যন্ত পুরোনো ঠিকানা ধরে রাখে। এই সংখ্যা ধারণা, বাস্তবে আপনার log দেখে ঠিক করতে হবে। Resolver-দের cache-এর বাকি সময় সমভাবে ছড়ানো ধরা হয়েছে।

// TTL migration planner. Share of traffic still reaching the OLD address after cutover.
function mulberry32(a) {
  return () => {
    a = (a + 0x6D2B79F5) | 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
const OLD_TTL = 86400, NEW_TTL = 60, SAFETY = 3600;
const STUCK = 0.02;    // assumption: 2% of traffic ignores TTL and holds the old name
const STUCK_FOR = 7200; // assumption: such clients let go within 2 hours
console.log("lower TTL at T-" + (OLD_TTL + SAFETY) + " s (old TTL + 1 h safety)");

function oldShare(ttl, t, n = 20000) {
  const r = mulberry32(2026);
  let old = 0;
  for (let i = 0; i < n; i++) {
    const stuck = r() < STUCK;
    const left = stuck ? r() * STUCK_FOR : r() * ttl; // time until this client re-asks
    if (left > t) old++;
  }
  return (100 * old / n).toFixed(1).padStart(6) + "%";
}
const times = [0, 30, 60, 300, 1800, 3600, 7200, 21600, 86400];
console.log("t after cutover   TTL 60 first   no lowering (TTL 86400)");
for (const t of times) {
  console.log((t + " s").padEnd(18) + oldShare(NEW_TTL, t).padEnd(15) + oldShare(OLD_TTL, t));
}
console.log("retire old server: not before T+" + STUCK_FOR + " s, and only when its log is quiet");

প্রথম লাইন আসল পরামর্শ: lower TTL at T-90000 s, অর্থাৎ T-এর ২৫ ঘণ্টা আগে। TTL 60-এর সারিতে 60 s-এ পুরোনো ঠিকানায় মাত্র 2.1%, যার প্রায় সবটাই সেই “জেদি” দল। আর ডানে 3600 s-এ এখনো 94.7%, 21600 s-এ 73.4%. কমানো ছাড়া ১ দিন ধরে দুই server চালাতে হতো। শেষ লাইন বলে, হিসাবের ন্যূনতম সময়ের পরও old বন্ধ করার আসল সংকেত হলো তার log.

যা TTL-এর হিসাবে ধরা পড়ে না

  • TTL না মানা client: কিছু resolver খুব ছোট TTL বাড়িয়ে নেয়। JVM-এর মতো runtime বা library নিজের মতো cache রাখতে পারে, সেটি version আর setting-নির্ভর।
  • চালু connection: DNS শুধু নতুন সংযোগের আগে দেখা হয়। Connection pool আর keep-alive পুরোনো IP-তে থেকে যায়।
  • NS বদলানো: DNS provider বদলালে TLD-তে থাকা NS-এর দীর্ঘ TTL কাজ করে, যা অনেক TLD-তে ১–২ দিন। এজন্য দুই zone-ই কিছুদিন একই record নিয়ে চালু রাখুন।
  • Negative caching: নতুন record বসানোর আগে কেউ নামটি খুঁজে NXDOMAIN পেয়ে থাকলে, সেই “নেই” উত্তরও cache হয়। সময় ঠিক হয় SOA থেকে (RFC 2308, ১৯৯৮)। তাই নতুন record বসানোর আগে নামটি পরীক্ষা করে ফেলবেন না।

TTL কত রাখবেন — খরচসহ হিসাব

ছোট TTL মানে দ্রুত বদল, কিন্তু বেশি query. ধরে নিই ১০,০০০টি resolver সবসময় সক্রিয়, আর প্রতি ১০ লাখ query-র দাম $০.৫০ (ধরে নেওয়া সংখ্যা; আসল দাম provider-এর pricing পাতায় দেখুন)। ৩০ দিনের মাস ধরে হিসাব:

  • TTL 3600: 10,000 × 1 × 720 = ৭২ লাখ query, প্রায় $৩.৬০।
  • TTL 60: 10,000 × 60 × 720 = ৪৩.২ কোটি query, প্রায় $২১৬।

এটি সর্বোচ্চ সীমার হিসাব, তবু অনুপাতটি (৬০ গুণ) সত্যি। আরেকটি দাম আছে: ছোট TTL-এ provider-এর সমস্যা সাথে সাথে ব্যবহারকারীর গায়ে লাগে, কারণ cache-এর আড়াল থাকে না। তাই সাধারণ অবস্থায় 300–3600 s, migration-এর আগে 60 s, আর failover record-এ provider-এর পরামর্শমতো ছোট মান রাখা একটি প্রচলিত পথ। এটি নিয়ম নয়, শুরু করার জায়গা।

Zone file-এর ভুল চোখে ধরা কঠিন। Zone file হলো record-এর সাধারণ লেখা রূপ, যা export করা যায়। নিচের ছোট audit apex-এর CNAME, CNAME-এর সাথে অন্য record আর ঝুঁকিপূর্ণ দীর্ঘ TTL খোঁজে। ঠিকানা-জাতীয় record-এই শুধু দেখে, কারণ NS আর SOA-তে দীর্ঘ TTL স্বাভাবিক।

set -euo pipefail
cat > example.zone <<'EOF'
$ORIGIN example.com.
$TTL 3600
@       86400 IN SOA   ns1.example.net. ops.example.com. 2026103001 7200 3600 1209600 300
@       86400 IN NS    ns1.example.net.
@       86400 IN NS    ns2.example.net.
@       300   IN CNAME lb-demo.example.net.
@       3600  IN MX    10 mail.example.com.
www     60    IN CNAME lb-demo.example.net.
api     86400 IN A     198.51.100.20
pay           IN A     198.51.100.30
blog    300   IN CNAME blog-demo.example.net.
blog    300   IN TXT   "site-verification=demo"
EOF

awk -v max=3600 '
/^\$TTL/ { dflt = $2; next }
/^[$;]/ || NF == 0 { next }
{
  n++; owner = $1; ttl = dflt; type = $3; note = " (zone default)"
  if ($2 ~ /^[0-9]+$/) { ttl = $2; type = $4; note = "" }
  count[owner]++
  if (type == "CNAME") cname[owner] = 1
  # NS and SOA change rarely, so a long TTL is normal there.
  if (type ~ /^(A|AAAA|CNAME)$/ && ttl + 0 > max + 0)
    printf "WARN  %-5s %s TTL %s is above %s: a cutover would be slow\n", owner, type, ttl, max
  if (type == "A" && note != "") printf "INFO  %-5s %s TTL %s%s\n", owner, type, ttl, note
}
END {
  if (cname["@"]) print "ERROR @     CNAME at the apex: SOA and NS must live there"
  for (o in cname) if (o != "@" && count[o] > 1) print "ERROR " o "  CNAME shares its name with other records"
  print "records checked: " n
}' example.zone

WARN api A TTL 86400 বলছে, এই নাম সরাতে গেলে ১ দিন আগে থেকে পরিকল্পনা লাগবে। INFO pay লাইনটি ভুল নয়, শুধু জানায় TTL এসেছে zone-এর $TTL থেকে। আর ERROR @ সেই ভুলটি ধরেছে, যা অংশ ৩-এ দেখলেন। আসল DNS server বা console এমন zone নিত না। ERROR blog একই নিয়মের দ্বিতীয় রূপ: CNAME-এর পাশে TXT. records checked: 10 মানে ১০টি record পড়া হয়েছে, $ দিয়ে শুরু লাইন বাদে।

৫ · Routing policy — একই প্রশ্নের আলাদা উত্তর

সাধারণ DNS একটি প্রশ্নের একটিই উত্তর দেয়। Managed DNS এর ওপর আরেকটি স্তর বসায়: কে জিজ্ঞেস করছে, কোন target সুস্থ, আর আপনার ঠিক করা ভাগ দেখে উত্তর বাছাই। এই সিদ্ধান্ত হয় শুধু উত্তর দেওয়ার মুহূর্তে, অনুরোধের পথে নয়। Load balancer-এর সাথে এখানেই বড় পার্থক্য।

Policyকীভাবে বাছেকোন কাজে
Simpleএকটি record, একাধিক মান হলে সব দেয়একটি target, সাধারণ site
Weightedওজনের অনুপাতে সম্ভাবনা: w ÷ মোট wCanary, ধীরে migration
LatencyProvider-এর মাপা তথ্যে সবচেয়ে কম দেরির regionএকাধিক region-এর সেবা
Geoপ্রশ্নকর্তার দেশ বা অঞ্চল অনুযায়ীভাষা, আইনগত সীমা, data residency
FailoverPrimary সুস্থ হলে primary, নইলে secondaryDisaster recovery, পর্ব ২৪-এর কৌশল

একটি প্রশ্ন জরুরি: “ব্যবহারকারী কোথায়” provider কীভাবে জানে? Authoritative server দেখে resolver-এর ঠিকানা, ব্যবহারকারীর নয়। ঢাকার কেউ সিঙ্গাপুরের public resolver ব্যবহার করলে ভুল অঞ্চলে যেতে পারেন। EDNS Client Subnet (RFC 7871, ২০১৬) ঠিকানার একটি অংশ পাঠিয়ে এটি কমায়, তবে সব resolver এটি পাঠায় না। তাই geo দিয়ে আইনগত সীমা মানতে গেলে শুধু DNS-এ ভরসা করবেন না; দরজায় অন্য যাচাইও লাগে। Latency-র ক্ষেত্রেও এটি মাপা গড়, প্রতিটি মানুষের নিশ্চয়তা নয়।

Weighted routing-এর সত্যিকারের চেহারা

৯০/১০ ভাগ মানে কি ঠিক ৯০/১০ traffic? নিচের সিমুলেটর দুটি অবস্থা দেখায়। প্রথমে প্রতিটি query আলাদাভাবে উত্তর পায়। পরে ব্যবহারকারীরা resolver-এর পেছনে, আর resolver ৬০ সেকেন্ড একটি উত্তর ধরে রাখে। Seed বাঁধা, তাই প্রতিবার একই ফল আসবে।

// Weighted DNS routing: 90% blue, 10% green. Seeded PRNG, so every run is identical.
function mulberry32(a) {
  return () => {
    a = (a + 0x6D2B79F5) | 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
const pct = (x, n) => (100 * x / n).toFixed(1).padStart(5) + "%";
const WEIGHTS = { blue: 90, green: 10 }, SUM = 100;
const pick = (r) => (r() * SUM < WEIGHTS.blue ? "blue" : "green");

// Part 1: every DNS query is answered independently.
console.log("queries   green share   (target 10.0%)");
for (const n of [20, 100, 1000, 100000]) {
  const r = mulberry32(1); let green = 0;
  for (let i = 0; i < n; i++) if (pick(r) === "green") green++;
  console.log(String(n).padStart(7) + "   " + pct(green, n));
}

// Part 2: users sit behind resolvers, and a resolver caches one answer for 60 s.
const resolvers = [40000, 12000, 5000, 2000, 500, 200, 100, 100, 50, 50]; // users
const TOTAL = resolvers.reduce((a, b) => a + b, 0);
console.log("\nusers=" + TOTAL + " resolvers=" + resolvers.length + "  minute by minute:");
const r = mulberry32(7);
let line = [];
for (let minute = 1; minute <= 10; minute++) {
  let green = 0;
  for (const users of resolvers) if (pick(r) === "green") green += users;
  line.push(pct(green, TOTAL).trim());
}
console.log("green share: " + line.join(" "));

প্রথম অংশে সূত্র ঠিক কাজ করে: ২০টি query-তে 15.0%, ১০০-তে 12.0%, আর ১ লাখে 9.9%. কম query-তে ওঠানামা স্বাভাবিক। দ্বিতীয় অংশে আসল শিক্ষা। Green-এর ভাগ এক মিনিটে 0.1%, অন্য মিনিটে 20.3%, আবার একবার 70.8%. কারণ ৬০,০০০ ব্যবহারকারীর ৪০,০০০ জন একটি resolver-এর পেছনে, আর সেটি green পেলে সবাই একসাথে green-এ চলে যায়। এই মডেলটি ইচ্ছা করে সরল। বড় resolver-এ অনেক আলাদা cache থাকে, তাই বাস্তবের ওঠানামা সাধারণত কম, তবে ঝোঁকটি একই। DNS-এর ভাগ হলো resolver-এর ভাগ, মানুষের ভাগ নয়।

DNS দিয়ে canary

DNS-ভিত্তিক canary মানে নতুন version-কে অল্প ওজন দিয়ে শুরু করা, যেমন ১%, ৫%, ২৫%, ১০০%. Terraform-এ Route 53-এর একটি উদাহরণ নিচে; অন্য provider-এর নিজস্ব resource আছে। Terraform নিজে শেখানো হবে পর্ব ৫২-তে।

resource "aws_route53_record" "www_blue" {
  zone_id         = var.zone_id
  name            = "www.example.com"
  type            = "A"
  ttl             = 60
  records         = ["198.51.100.20"]
  set_identifier  = "blue"
  health_check_id = var.blue_check_id

  weighted_routing_policy {
    weight = 95
  }
}

resource "aws_route53_record" "www_green" {
  zone_id         = var.zone_id
  name            = "www.example.com"
  type            = "A"
  ttl             = 60
  records         = ["198.51.100.21"]
  set_identifier  = "green"
  health_check_id = var.green_check_id

  weighted_routing_policy {
    weight = 5
  }
}

DNS canary-র তিনটি দুর্বলতা জেনে রাখুন। ভাগ মোটা দাগের, কারণ resolver-এর cache আছে। Rollback সঙ্গে সঙ্গে হয় না, TTL পর্যন্ত অপেক্ষা লাগে। আর একই ব্যবহারকারী একবার blue, একবার green পেতে পারেন। সূক্ষ্ম ভাগের জন্য load balancer বা service mesh-এর weighted target ভালো (System Design · Canary, আর পর্ব ৫৯)। DNS canary মানায় পুরো cluster বা region-এর মধ্যে, যেখানে সামনে আর কোনো সাধারণ LB নেই।

৬ · Health check আর failover — কত সেকেন্ড লাগে

Failover record-এ primary-র সাথে একটি health check জোড়া থাকে। Provider দুনিয়ার কয়েকটি জায়গা থেকে endpoint-কে পরীক্ষা করে। Check ব্যর্থ হলে DNS failover শুরু হয়: authoritative এখন secondary-র ঠিকানা দেয়। কিন্তু উত্তর বদলানো আর ব্যবহারকারী সরে যাওয়া এক কথা নয়।

সবচেয়ে খারাপ সময় ≈ I × F + TTL + A
I = check interval · F = failure threshold · A = app-এর নিজের cache

লেখার সময়ে Route 53-এ interval সাধারণত 30 s বা 10 s, আর threshold পরিবর্তনযোগ্য। AWS failover record-এর TTL ৬০ সেকেন্ড বা কম রাখতে পরামর্শ দেয়। Provider-ভেদে এই মান আলাদা, তাই docs মিলিয়ে নিন। এবার ধাপে ধাপে দেখুন: I = 10, F = 3, TTL = 60. Primary ঠিক t = 0-তে পড়ে গেল, আর শেষ সফল check ঠিক তার আগে হয়েছিল। তিনজন ব্যবহারকারীর দল: R-A (উত্তর নিয়েছে t = -5-এ), R-B (t = -50-এ), আর App C, যে TTL না মেনে নিজের ১২০ সেকেন্ডের cache রাখে।

I = 10 s · F = 3 · TTL = 60 s · App C-র cache 120 s
সময়
পরপর ব্যর্থ check
Authoritative-এর উত্তর
R-A-এর cache
R-B-এর cache
App C
মৃত primary-তে আটকে
  1. t = 0. Primary নীরব হলো। তিনজনের হাতেই primary-র ঠিকানা, তাই তিনজনই ব্যর্থ হচ্ছেন। DNS এখনো কিছু জানে না।
  2. t = 10. প্রথম check ব্যর্থ। গণনা 1, threshold 3, তাই উত্তর বদলায়নি। ঠিক এই সময়ে R-B-এর কপি শেষ হলো। সে আবার জিজ্ঞেস করে আবারও primary পেল, এবার ৬০ সেকেন্ডের জন্য। Detection-এর সময়ে নেওয়া কপিই সবচেয়ে ক্ষতিকর।
  3. t = 30. তৃতীয় check ব্যর্থ: I × F = 30. Status unhealthy, authoritative এখন secondary দেয়। কিন্তু কারও cache বদলায়নি, তিনজনই আগের মতো ব্যর্থ।
  4. t = 55. R-A-এর কপি শেষ, সে secondary পেল। ব্যর্থ বাকি ২ জন।
  5. t = 70. R-B-এর দ্বিতীয় কপি শেষ, সে-ও secondary পেল। এই নকশায় সবচেয়ে খারাপ TTL-মানা resolver সরত প্রায় t = 90-এ (t = 30-এর ঠিক আগে কপি নিলে)।
  6. t = 120. App C-র নিজের cache শেষ, এবার সে সরল। সূত্রের A অংশটি এটিই। আসল সমস্যা ছিল app-এ, DNS-এ নয়।

এক client-এর গল্প থেকে পুরো জনতার হিসাবে আসি। নিচের সিমুলেটর ২০,০০০ client-এর জন্য check-এর phase আর cache-এর বাকি সময় এলোমেলো রাখে, তবে seed বাঁধা।

// How long until clients leave a dead primary? Times in seconds.
function mulberry32(a) {
  return () => {
    a = (a + 0x6D2B79F5) | 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
function simulate({ interval, fails, ttl, appCache }, n = 20000) {
  const r = mulberry32(2929), moved = [];
  for (let i = 0; i < n; i++) {
    const detect = r() * interval + (fails - 1) * interval; // now answers "secondary"
    // The resolver re-fetches every ttl seconds; its next fetch after detect wins.
    let t = r() * ttl;                               // first expiry after the crash
    while (t < detect) t += ttl;
    moved.push(t + r() * appCache);                  // the app's own cache adds more
  }
  moved.sort((a, b) => a - b);
  const q = (p) => Math.round(moved[Math.floor(p * (n - 1))]);
  return [q(0.5), q(0.95), q(1)];
}
const cases = [
  ["slow check, long TTL", { interval: 30, fails: 3, ttl: 300, appCache: 0 }],
  ["fast check, long TTL", { interval: 10, fails: 3, ttl: 300, appCache: 0 }],
  ["fast check, TTL 60", { interval: 10, fails: 3, ttl: 60, appCache: 0 }],
  ["fast check, TTL 60, app 300", { interval: 10, fails: 3, ttl: 60, appCache: 300 }],
];
console.log("case".padEnd(29) + "worst-formula  p50  p95  max");
for (const [name, c] of cases) {
  const formula = c.fails * c.interval + c.ttl + c.appCache;
  const [p50, p95, max] = simulate(c);
  console.log(name.padEnd(29) + String(formula).padStart(13) +
    String(p50).padStart(5) + String(p95).padStart(5) + String(max).padStart(5));
}

worst-formula কলাম সূত্রের মান, আর max সিমুলেশনের সবচেয়ে দেরি। fast check, TTL 60-এ দুটিই 90, অর্থাৎ সূত্র আর হিসাব মিলেছে; অর্ধেক client সরে 55 s-এ। প্রথম সারি থেকে দ্বিতীয় সারিতে check দ্রুত করায় max কমেছে মাত্র ৬০ s (389 থেকে 329). আর TTL 300 থেকে 60 করায় কমেছে ২৩৯ s (329 থেকে 90). শেষ সারি দেখায়, app-এর ৩০০ s cache সব অর্জন নষ্ট করে আবার 386-এ নিয়ে যায়। সবচেয়ে বড় পদটি আগে কমান।

DNS failover-এর পথ পরীক্ষা না করলে তা কাজ করে না। Secondary-তে certificate, capacity আর database ঠিক আছে কি না, আগেই যাচাই করুন। ফেরার পথও ভাবুন: failback কি নিজে থেকেই হবে, না হাতে? Check দোল খেলে (flapping) উত্তর বারবার বদলায়। আর health check-এর পথটি যদি আসল ব্যবহারকারীর পথ না হয়, তবে “সুস্থ” দেখালেও মানুষ ব্যর্থ হতে পারেন।

৭ · Split-horizon, VPC resolver আর hybrid forwarding

প্রতিটি VPC-র ভেতরে provider একটি VPC resolver দেয়। VM আলাদা কিছু না করেই তাকে জিজ্ঞেস করে। AWS-এ এর ঠিকানা সাধারণত VPC CIDR-এর base + 2 (যেমন 10.0.0.2), Azure-এ 168.63.129.16, আর Google Cloud-এ metadata server-এর 169.254.169.254. এগুলো লেখার সময়ের তথ্য।

Split-horizon DNS মানে একই নামের দুই রকম উত্তর: ভেতর থেকে private ঠিকানা, বাইরে থেকে public ঠিকানা। এতে ভেতরের traffic ভেতরেই থাকে, আর NAT বা internet পথের ঝামেলা ও খরচ এড়ানো যায়। একই নামের কারণে certificate-ও একটিতেই চলে।

অফিসের রিসেপশন আর শহরের দিকনির্দেশক সাইনবোর্ড দুটিকে “হিসাব বিভাগ কোথায়” জিজ্ঞেস করুন। রিসেপশন বলবে, “তিনতলা, ডানদিকে।” বাইরের সাইনবোর্ড বলবে, “মূল ফটক।” প্রশ্ন একই, প্রশ্নকর্তার অবস্থান ভিন্ন, তাই উত্তরও ভিন্ন।

VPC-তে private zone example.com · তাতে শুধু api আছে
প্রশ্নকর্তা
নাম
Resolver
কোন zone
উত্তর
  1. VM জিজ্ঞেস করল। ভেতরের VM api.example.com চায়। প্রশ্নটি internet-এ যায় না, যায় VPC resolver-এ।
  2. Resolver মিলিয়ে দেখল। এই VPC-র সাথে যুক্ত private zone আছে কি না, যার নাম প্রশ্নের সাথে মেলে? আছে: example.com. সে public পথে না গিয়ে এখানেই খোঁজে।
  3. Private উত্তর। 10.0.2.20, ভেতরের load balancer-এর ঠিকানা। Traffic VPC-র ভেতরেই রইল।
  4. বাইরের ল্যাপটপ। একই নাম, কিন্তু ISP resolver চলল root, TLD আর public zone-এর পথে। উত্তর 198.51.100.20. Private zone-এর অস্তিত্ব সে জানেই না।
  5. ফাঁদ। VM এবার www.example.com চাইল। Private zone নামের সাথে মিলে গেছে, অথচ ভেতরে www নেই। AWS-সহ অনেক ক্ষেত্রে resolver public-এ ফেরে না, সরাসরি NXDOMAIN দেয়। বাইরে site চলছে, ভেতর থেকে ভাঙা।
  6. সমাধান। Private zone-এ www যোগ করা হলো (এখানে উত্তর 198.51.100.40). ভালো নকশা হলো শুরু থেকেই সরু নাম, যেমন internal.example.com, যাতে পুরো domain ঢেকে না যায়। Fallback-এর আচরণ provider-ভেদে আলাদা, তাই পরীক্ষা করে নিন।

Hybrid: অফিস আর cloud-এর নাম মেলানো

পর্ব ২৮-এর VPN বা dedicated link দিয়ে অফিস আর VPC জোড়া থাকলেও নাম নিজে থেকে মেলে না। অফিসের server db.internal.example.com চিনবে না, আর VM চিনবে না erp.corp.example. সমাধান conditional forwarding: নির্দিষ্ট নামের প্রশ্ন নির্দিষ্ট resolver-এ পাঠানো।

  • Cloud থেকে অফিসে: Outbound endpoint আর forwarding rule: corp.example-এর প্রশ্ন অফিসের DNS server-এ যাবে।
  • অফিস থেকে cloud-এ: Inbound endpoint: VPC-র ভেতরে একটি ঠিকানা, যেখানে অফিসের DNS server প্রশ্ন পাঠায়। VPC resolver-এর ঠিকানা সাধারণত VPC-র বাইরে থেকে ব্যবহার করা যায় না, তাই এটি লাগে।

Route 53 Resolver endpoint, Azure DNS Private Resolver আর Cloud DNS forwarding zone এই কাজের উদাহরণ। DNS TCP আর UDP দুই পথেই port 53 ব্যবহার করে, তাই firewall-এ দুটিই দরকার (পর্ব ২৭)। Hybrid-এর সবচেয়ে সাধারণ ত্রুটি হলো শুধু UDP খোলা; বড় উত্তর তখন ব্যর্থ হয়, আর সমস্যাটি মাঝেমধ্যে দেখা দেয়।

৮ · DNS যখন single point of failure

DNS সাধারণত এত নির্ভরযোগ্য যে কেউ ভাবে না। আবার সব সেবা এর ওপর দাঁড়িয়ে, তাই এটি পড়লে অনেকখানি পড়ে। ইঞ্জিনিয়ারদের মধ্যে একটি কৌতুক আছে, “It's always DNS.” সব সময় নয়, তবু কয়েকটি জনসমক্ষে বর্ণিত ঘটনা শিক্ষণীয়। বিস্তারিত সংশ্লিষ্ট প্রতিষ্ঠানের প্রকাশিত প্রতিবেদন থেকে দেখে নিন।

  • Dyn, অক্টোবর ২০১৬: Managed DNS provider Dyn-এর ওপর বড় DDoS হয়, যার পেছনে Mirai botnet-এর ভূমিকার কথা জানা যায়। যে বড় বড় site শুধু এই একটি provider-এ ছিল, তাদের অনেকেই কিছু সময় পৌঁছানোর বাইরে চলে যায়, যদিও তাদের server সচল ছিল।
  • Facebook, অক্টোবর ২০২১: প্রতিষ্ঠানটির প্রকাশিত বর্ণনা অনুযায়ী, backbone-এর একটি কাজে ভুলের পর তাদের DNS server-গুলোর BGP ঘোষণা সরে যায়। ফলে নাম মেলা বন্ধ হয়, আর ভেতরের সরঞ্জামও ক্ষতিগ্রস্ত হওয়ায় ঠিক করতে দেরি হয়।
  • AWS us-east-1, অক্টোবর ২০২৫: AWS-এর প্রকাশিত সারাংশ অনুযায়ী, DynamoDB-র স্বয়ংক্রিয় DNS ব্যবস্থাপনায় একটি race condition একটি regional endpoint-এর record খালি করে দেয়। এর প্রভাব ওপর-নির্ভর আরও অনেক সেবায় ছড়ায়।

তিনটি ঘটনার ধরন তিন রকম: বাইরের আক্রমণ, network-এর ভুল, নিজের automation-এর ভুল। শিক্ষা একই: DNS-কে একটি single point of failure হিসেবে দেখুন, আর তাকে আলাদা করে নকশা করুন।

  • দুই DNS provider: Secondary DNS বা দুই provider-এ একই zone রাখা। ধরে নিই একেকটির availability ৯৯.৯%, আর ব্যর্থতা স্বাধীন। তাহলে 1 − 0.001² = ৯৯.৯৯৯৯%. বাস্তবে স্বাধীনতা পুরো নয়, আর alias বা routing policy দুই provider-এ হুবহু মেলে না।
  • যুক্তিসঙ্গত TTL: সবকিছু 60 s রাখলে provider পড়ার এক মিনিটেই সব cache খালি। Cache একটি আড়াল।
  • ঠিক করার পথ DNS-এর বাইরে: Runbook আর জরুরি প্রবেশ যেন যে DNS পড়েছে, তার ওপরই নির্ভর না করে।
  • Automation-এ সাবধানতা: DNS বদল review, ছোট blast radius আর দ্রুত rollback দিয়ে করুন।

৯ · নিরাপত্তা — registrar lock, DNSSEC আর dangling record

Domain-এর চাবি

DNS-এর সবচেয়ে উঁচু চাবি registrar account. কেউ সেটি পেলে NS বদলে পুরো domain নিয়ে যেতে পারে। Sea Turtle নামে যে DNS hijack অভিযান Cisco Talos ২০১৯ সালে প্রকাশ করে, তাতে registrar আর registry-স্তরের প্রবেশের কথা উঠে আসে। তাই চারটি সহজ অভ্যাস:

  • Registrar-এ শক্ত MFA, আর সীমিত ব্যবহারকারী।
  • Registrar lock চালু, যাতে সাধারণ অনুরোধে transfer না হয়। গুরুত্বপূর্ণ domain-এ registry lock-ও ভাবুন।
  • Auto-renew চালু। সময়মতো নবায়ন না করে domain হারানো একটি অপ্রত্যাশিত রকমের সাধারণ দুর্ঘটনা।
  • DNS বদলের IAM অনুমতি সরু, আর audit log চালু (পর্ব ৩১ ও ৩৪)।

DNSSEC, সংক্ষেপে

DNSSEC (RFC 4033–4035, ২০০৫) record-এ digital signature যোগ করে, যাতে resolver যাচাই করতে পারে উত্তরটি পথে বদলায়নি। এটি উত্তর গোপন করে না, শুধু খাঁটিত্ব প্রমাণ করে। চালু করতে zone-এ signing করতে হয়, আর registrar-এ DS record বসাতে হয়। ভুল key বা rollover-এ যাচাইকারী resolver-এ পুরো domain ব্যর্থ হতে পারে। Slack ২০২১ সালের DNSSEC rollout-এর সময় এমন একটি outage-এর বর্ণনা নিজেরাই প্রকাশ করেছে। তাই সুবিধা বড়, তবে ধাপে ধাপে চালু করুন।

Dangling record আর subdomain takeover

দল একটি campaign শেষ করে offer.example.com-এর পেছনের cloud resource মুছে দিল, কিন্তু DNS record রেখে দিল। এটি dangling record: নামটি এমন কিছুর দিকে তাকিয়ে আছে, যা আর আপনার নেই। Cloud-এর অনেক নাম ও ঠিকানা আবার অন্য ব্যবহারকারীর হাতে যেতে পারে। তখন আপনার নামের নিচে অন্য কারও বিষয়বস্তু দেখা দিতে পারে। একে বলে subdomain takeover. এতে phishing, আর cookie বা certificate-এর ঝুঁকি তৈরি হয়। Detectify-র গবেষকদের ২০১৪ সালের লেখার পর বিষয়টি ব্যাপক আলোচনায় আসে, আর Microsoft-এর docs-এও এটি প্রতিরোধের নির্দেশনা আছে।

প্রতিরোধের অভ্যাস

ক্রম: আগে DNS record মুছুন, তারপর resource. IaC: record আর resource একই Terraform module-এ রাখুন, যাতে একসাথে তৈরি হয়, একসাথে মোছে। Alias: সম্ভব হলে provider-এর resource-এ alias দিন; যেমন Azure-এ resource মুছলে alias record খালি হয়ে যায়। Audit: নিয়মিত সব CNAME আর ঠিকানা মিলিয়ে দেখুন, target আপনার তালিকায় আছে কি না। যাচাই: যে platform domain-এর মালিকানা TXT দিয়ে যাচাই করে, সেই সুবিধা চালু রাখুন।

আরও গভীরে: Apex সমস্যার standard সমাধানের দিকে একটি ধাপ হলো SVCB আর HTTPS record (RFC 9460, ২০২৩), যার AliasMode apex-এও চলে; তবে সব client এখনো এটি ব্যবহার করে না। ANAME-এর IETF খসড়া RFC হয়নি। Failover-এর নকশায় AWS-এর প্রকাশিত নির্দেশনা health check-এর মতো data plane-এ ভরসা করতে বলে, record বদলানোর control plane-এ নয়, কারণ বিপদের দিনে control plane-ই প্রায়ই দুর্বল থাকে। তাদের Builders’ Library-তে static stability-র ওপর লেখা, আর RFC 8767 (২০২০)-এর serve-stale দুটিই পড়ার মতো।

পরীক্ষা ও ইন্টারভিউতে:

  • Apex-এ CNAME বসে না কেন? CNAME-এর পাশে অন্য record চলে না, অথচ apex-এ SOA আর NS লাগে।
  • Propagation কী? Push নয়; resolver-এর cache-এর TTL শেষ হওয়া।
  • TTL 86400, migration কবে কমাবেন? Cutover-এর অন্তত ১ দিন আগে, হাতে কিছু বাড়তি সময় রেখে।
  • I = 30, F = 3, TTL = 60, সবচেয়ে খারাপ সময়? 30 × 3 + 60 = 150 s, app-এর cache ছাড়া।
  • Subdomain takeover কীভাবে ঠেকাবেন? Record আগে মুছুন, IaC-তে একসাথে রাখুন, নিয়মিত audit করুন।

১০ · AI-এর যুগে DNS-এর config যাচাই

AI কয়েক সেকেন্ডে record আর Terraform লিখে দিতে পারে। কিন্তু DNS-এর ভুলের ফল দেরিতে আসে, আর cache-এর কারণে ফেরানোও ধীর। একটি ভুল TTL ২৪ ঘণ্টা ধরে আপনাকে আটকে রাখতে পারে। তাই প্রয়োগের আগে যাচাই জরুরি।

AI-এর ভুলঝুঁকিযাচাই
Apex-এ CNAME লিখে দেওয়াপ্রয়োগ ব্যর্থ, বা mail ভেঙে যাওয়াZone audit আর provider-এর docs
Migration-এর দিনই TTL কমাতে বলাপুরোনো cache ১ দিন টিকে থাকেআগের TTL দেখে সময় হিসাব
“TTL 0 দিন, সমস্যা নেই”Query, খরচ আর provider-নির্ভরতা বাড়েখরচের হিসাব, budget alert
route53:*-এর মতো * অনুমতিভুল key-তে পুরো domain ঝুঁকিতেনির্দিষ্ট zone আর action
Resolver endpoint-এ 0.0.0.0/0 খোলাOpen resolver, অপব্যবহারশুধু অফিসের CIDR
Private IP public zone-এ রাখাভেতরের নকশা প্রকাশPrivate zone ব্যবহার
TXT-এ token বা secret রাখাসবাই পড়তে পারেSecret manager (পর্ব ৩৩)
Resource আগে মুছতে বলা, terraform destroy সাবধানতা ছাড়াDangling record বা পুরো zone হারানোterraform plan পড়া
নেই এমন flag বা resource argument লেখাপ্রয়োগ ব্যর্থ, বা ভুল আচরণOfficial docs, পরীক্ষার zone

AI-কে কাজ দেওয়ার সময় বর্তমান অবস্থা, সীমা আর ফেরার পথ বলে দিন। Secret, আসল account id বা key prompt-এ দেবেন না।

আমি example.com নামে একটি কাল্পনিক site এক load balancer থেকে আরেকটিতে সরাতে চাই। এখন www আর apex-এর TTL 86400. Downtime সর্বোচ্চ ২ মিনিট। ধাপে ধাপে একটি পরিকল্পনা দাও: ১. কখন TTL কমাব, আর সেই সময় কীভাবে হিসাব করলে? ২. Apex-এর জন্য কোন record ধরন লাগবে, আর কেন? ৩. Rollback কীভাবে করব, আর সেটি কত সময় নেবে? ৪. পুরোনো load balancer কখন বন্ধ করা নিরাপদ, কোন log দেখে বুঝব? ৫. কোনো DNS record মুছে ফেলার বা destroy করার ধাপ থাকলে আলাদা করে সতর্ক করো। যে তথ্য provider-ভেদে আলাদা, সেটি স্পষ্ট বলো। কোনো অস্তিত্বহীন setting বানিয়ে লিখো না, আর docs দেখে কী মিলিয়ে নিতে হবে তা জানাও।

প্রয়োগের আগে যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১DNS এত নির্ভরযোগ্য হলে বড় বড় outage-এর গল্পে এটি বারবার আসে কেন?

কারণ DNS একসাথে তিনটি জিনিস: খুব কম ব্যর্থ হয়, খুব বেশি কিছু এর ওপর নির্ভর করে, আর এর ব্যর্থতা ঘুরে ঘুরে ফিরে আসে। ফলে ঘটনা কম, কিন্তু প্রতিটির প্রভাব বিশাল।

২০১৬ সালের Dyn ঘটনায় দেখা গেল, server সচল থাকলেও নাম না মিললে সেবা নেই। বহু প্রতিষ্ঠান তখন বুঝল, তাদের সব ডিম একটি DNS provider-এর ঝুড়িতে। এরপর দুই provider ব্যবহারের চল বাড়ে।

২০২১ সালের Facebook ঘটনা আরেকটি দিক দেখায়। প্রতিষ্ঠানটির প্রকাশিত বর্ণনা অনুযায়ী, backbone বিচ্ছিন্ন হওয়ায় DNS server-গুলো নিজেকে অসুস্থ ধরে ঘোষণা সরিয়ে নেয়। নিয়মটি ভালো উদ্দেশ্যেই ছিল। কিন্তু সব জায়গায় একসাথে এটি ঘটায় পুরো ব্যবস্থা অন্ধকার হলো, আর ভেতরের সরঞ্জাম দুর্বল হওয়ায় মেরামতও ধীর হলো।

২০২৫ সালের AWS ঘটনার প্রকাশিত সারাংশে automation-এর একটি race condition-এর কথা আছে, যা একটি endpoint-এর record খালি করে দেয়। এখানে প্রশ্নটি এসে দাঁড়ায়: আপনার নিজের সেবার ভেতরের নির্ভরতার গাছে DNS কোথায় কোথায় আছে?

একটি ব্যবহারিক অনুশীলনও করা যায়। পরীক্ষার পরিবেশে একটি নাম ইচ্ছা করে ভাঙুন, আর দেখুন কোন সেবা কতক্ষণ টেকে, কোন alert বাজে, আর দল কীভাবে টের পায়। অনেক দল এই পরীক্ষায় এমন নির্ভরতা খুঁজে পায়, যা কোনো নকশার ছবিতে ছিল না।

নকশার দিক থেকে কয়েকটি প্রশ্ন করুন। DNS না থাকলে আমার monitoring চলবে? Bastion-এ পৌঁছাতে পারব? Deploy-এর পথ কি একই নামের ওপর? Cache-এর জন্য কতটুকু সময় পাব? এসব প্রশ্নের উত্তর আগে থেকে না জানলে সমস্যার দিনে জানতে হবে।

মূল উপলব্ধি: DNS-এর ঝুঁকি মাপা হয় তার ব্যর্থতার হার দিয়ে নয়, ব্যর্থ হলে কতটুকু একসাথে পড়ে তা দিয়ে। তাই একে সাধারণ config নয়, critical dependency হিসেবে নকশা করুন।

প্র ০২দ্রুত failover-ই লক্ষ্য হলে সব record-এ TTL 1 s রাখলে সমস্যা কী?

TTL একটি দামি বোতাম। এটি কমালে প্রতিক্রিয়া দ্রুত হয়, কিন্তু তিন জায়গায় দাম দিতে হয়।

  • ভার ও খরচ: TTL 3600 থেকে 60 করলে সর্বোচ্চ query ৬০ গুণ হতে পারে। 1 s করলে ৩৬০০ গুণ। প্রতি query-র দাম কম হলেও জমতে থাকে। ব্যবহারকারীর দিকেও প্রতি lookup-এ একটু দেরি যোগ হয়।
  • নির্ভরতা: Cache ছিল আড়াল। Authoritative সমস্যায় পড়লে দীর্ঘ TTL-এর কপি কিছুক্ষণ চলতে থাকে। TTL 1 s হলে এক সেকেন্ডেই সেই আড়াল শেষ। Dyn-এর মতো ঘটনায় এই পার্থক্য চোখে পড়ার মতো।
  • কাজে না আসা: কিছু resolver আর client ছোট TTL মানে না। ফলে দাম দিয়েও পুরো সুবিধা মেলে না। আগের সিমুলেটরে দেখেছেন, app-এর ৩০০ s cache সব অর্জন খেয়ে ফেলে।

এই টানাপোড়েন কমাতে RFC 8767 (২০২০) “serve-stale” প্রস্তাব করে: authoritative পৌঁছানো না গেলে resolver মেয়াদোত্তীর্ণ কপি কিছুক্ষণ দিতে পারে। Authoritative-এর সাময়িক সমস্যায় এটি কাজে লাগে, তবে সব resolver-এ একরকম নয়। আবার এটি failover-এর পক্ষে সবসময় ভালোও নয়, কারণ পুরোনো উত্তর আরও টিকে থাকতে পারে।

একটি ছোট হিসাবও দেখুন। আগের অংশের উদাহরণে TTL 60-এ মাসে সর্বোচ্চ ৪৩.২ কোটি query ছিল। TTL 1 s হলে একই ধারণায় তা হতো ২,৫৯২ কোটি, আর ধরে নেওয়া দামে প্রায় $১২,৯৬০। সংখ্যাটি সর্বোচ্চ সীমা, তবু দেখায় কেন শুধু “কম মানেই ভালো” ভাবা বিপজ্জনক।

ভালো পথ হলো record-ভেদে সিদ্ধান্ত। স্থির record (MX, NS, যাচাইয়ের TXT) দীর্ঘ TTL-এ থাক। সচল ঠিকানা মাঝারি TTL-এ, আর failover-record ছোট TTL-এ। সেকেন্ডের মধ্যে সরতে চাইলে DNS নয়, সামনে থাকা load balancer বা anycast ব্যবহার করুন।

মূল উপলব্ধি: TTL হলো দ্রুততা বনাম স্থিতিশীলতার দর-কষাকষি। সূত্রের সবচেয়ে বড় পদটি কমানোই লক্ষ্য, সবচেয়ে ছোট সংখ্যা বসানো নয়।

প্র ০৩DNS failover না anycast বা global load balancer — কখন কোনটি বেছে নেবেন?

মূল পার্থক্য সিদ্ধান্তের জায়গায়। DNS failover সিদ্ধান্ত নেয় নাম খোঁজার সময়, আর সেই সিদ্ধান্ত client-এর cache-এ আটকে থাকে। Global load balancer সিদ্ধান্ত নেয় প্রতিটি অনুরোধে বা সংযোগে, আর client একটিই IP দেখে।

  • Anycast IP: একই ঠিকানা অনেক জায়গা থেকে ঘোষণা হয়, তাই client-এর ঠিকানা বদলাতে হয় না। Network routing বদলালেই পথ বদলায়, সাধারণত DNS cache-এর চেয়ে অনেক দ্রুত। Google Cloud-এর global Application Load Balancer বা AWS Global Accelerator এই ধরনের উদাহরণ। Azure Front Door-ও global L7 সেবা।
  • দাম: এসব সেবার নিজস্ব খরচ আর নির্ভরতা আছে। সাধারণত একটি provider-এর ভেতরে সবচেয়ে ভালো কাজ করে।
  • DNS failover কোথায় ভালো: দুই আলাদা cloud-এর মধ্যে, cloud আর অফিসের মধ্যে, কম খরচের DR-এ, যেখানে কয়েক মিনিটের RTO মানা যায়। HTTP ছাড়া অন্য protocol-এও এটি সহজে চলে, কারণ সিদ্ধান্ত নেওয়ার আগে সে protocol দেখেই না।

আরেকটি জায়গায় DNS failover চোখে না পড়েই কাজ করে: managed database-এর endpoint. পর্ব ২২-এ দেখেছেন, failover-এ অনেক সেবা একই নামকে নতুন primary-তে দেখায়। তখন app-এর connection pool পুনরায় সংযোগ করে কি না, runtime-এর DNS cache কেমন, সেটিই আসল প্রশ্ন।

ব্যর্থতার ধরনও ভাবুন। DNS failover শুধু নতুন সংযোগকে সরায়। আগের সংযোগ, আর ভেতরের state-এর দায় আপনারই থেকে যায়। Region-স্তরের failover-এ ডেটা কতটা মিলেছে, সেটিও আলাদা প্রশ্ন, যা failover পরিকল্পনায় আগে থেকে ঠিক করতে হয়। Traffic সরানো সহজ অংশ; ডেটা নিয়ে সিদ্ধান্ত কঠিন অংশ।

দুটি একসাথেও চলে। ব্যবহারকারীর দিকে anycast global LB, তার পেছনে region-ভিত্তিক সিদ্ধান্ত, আর শেষ ভরসা হিসেবে DNS-এ দ্বিতীয় পথ।

মূল উপলব্ধি: নিজেকে জিজ্ঞেস করুন, আপনার RTO কত সেকেন্ড, আর সিদ্ধান্ত যে স্তরে হচ্ছে সেটি client-এর cache-এর সামনে না পেছনে।

প্র ০৪Alias বা CNAME flattening apex-এর সমস্যা মেটায়। তাহলে এর বিনিময়ে কী হারাতে হয়?

১৯৮৭ সালের নিয়মটি লেখা হয়েছিল তখনকার দুনিয়ার জন্য। তখন target-কে নাম দিয়ে ডাকার দরকার apex-এ পড়েনি। Cloud আর CDN আসার পর ঠিকানা স্থির রইল না, আর “naked domain” চালানো কঠিন হলো। অনেকে apex-কে www-এ redirect করে কাজ চালাতেন।

এরপর DNS provider-রা নিজস্ব সমাধান আনল। Cloudflare ২০১৪ সালে CNAME flattening ঘোষণা করে; AWS-এর alias, আর অন্যদের ALIAS বা ANAME-ও একই গোত্রের। সবার মূল কৌশল এক: authoritative নিজে target খুঁজে A উত্তর দেয়।

কিন্তু দাম আছে।

  • Portability: Alias standard record নয়। Zone export করলে বা অন্য provider-এ সরালে হুবহু যায় না। দুই provider-এ DNS রাখলে এটি বড় বাধা।
  • অবস্থানের তথ্য: Target-কে খুঁজছে authoritative, ব্যবহারকারীর resolver নয়। CDN-এর মতো অবস্থান-নির্ভর target হলে উত্তর ভুল অঞ্চলের হতে পারে, যদি না provider এটি আলাদা করে সামলায়।
  • দৃশ্যমানতা: dig-এ শুধু A দেখা যায়, তাই পেছনে কী আছে তা বাইরে থেকে বোঝা যায় না। Audit-এ provider-এর API লাগে।
  • নির্ভরতা: Target-এর ঠিকানা বের করার দায় provider-এর, আর TTL-এর আচরণও তার।

বিকল্প হিসেবে অনেক দল এখনো apex থেকে www-এ HTTP redirect রাখে, আর আসল সেবা চালায় www-এ। এই পুরোনো কৌশলে সাধারণ CNAME-ই চলে, তাই provider বদলানো সহজ থাকে। তবে redirect-এর জন্যও apex-এ কোনো ঠিকানা লাগে, আর একটি বাড়তি ধাপ যোগ হয়।

Standard পথটি ধীরে এগোচ্ছে। ANAME-এর খসড়া RFC হয়নি। RFC 9460 (২০২৩)-এর HTTPS record apex-এ AliasMode দেয়, তবে সেটি ব্যবহারে client-এর সমর্থন লাগে, আর পুরোনো client-এর জন্য A/AAAA-ও রাখতে হয়।

মূল উপলব্ধি: Provider-এর সুবিধা প্রায়ই পুরোনো standard-এর ফাঁক ভরায়, আর বিনিময়ে একটু lock-in দেয়। সেটি সচেতনভাবে নিন।

প্র ০৫Subdomain takeover বারবার ঘটে কেন, আর একটি দল এটি কীভাবে স্থায়ীভাবে কমাবে?

এর শিকড় সাংগঠনিক। Resource-এর মালিক এক দল, DNS-এর মালিক অন্য দল। Resource মোছা সহজ, কিন্তু record মোছার কথা কারও মনে থাকে না। Cloud-এ resource-এর আয়ু ছোট, আর DNS-এর আয়ু লম্বা। এই ফাঁকেই ঝুঁকি জন্মায়।

Detectify-র ২০১৪ সালের লেখার পর থেকে নিরাপত্তা-গবেষকরা বহু বড় প্রতিষ্ঠানের ক্ষেত্রে এই সমস্যার কথা জানিয়েছেন। ঝুঁকিটি শুধু একটি ভাঙা পাতা নয়। আপনার নামের নিচে পাতা থাকলে ব্যবহারকারী তাকে বিশ্বাস করেন। Parent domain-এ cookie থাকলে তারও ঝুঁকি বাড়ে, আর domain-যাচাই-ভিত্তিক certificate পাওয়াও সম্ভব হতে পারে।

স্থায়ীভাবে কমাতে একক সতর্কতা নয়, ব্যবস্থা লাগে।

  • একসাথে জীবন: IaC-তে record আর resource এক module-এ রাখুন, যাতে একটি মুছলে অন্যটিও মোছে।
  • নিয়মিত audit: সব CNAME আর A মিলিয়ে দেখুন, target আপনার resource তালিকায় আছে কি না। অনুশীলন ৪-এর ছোট script এর সরল রূপ।
  • Provider-এর সুবিধা: Azure-এর alias record আর custom domain যাচাই, এবং GitHub Pages-এর মতো platform-এ verified domain এই ঝুঁকি কমায়।
  • IP-এর ক্ষেত্রেও: Public IP ছেড়ে দিলে সেটি অন্যের হতে পারে। Record না মুছে IP ছাড়বেন না। পর্ব ৩০-এ যে CDN দেখবেন, তার origin-ও একবার মিলিয়ে নিন।
  • পর্যবেক্ষণ: Certificate Transparency log-এ আপনার নামে নতুন certificate দেখলে alert রাখুন।

সংস্কৃতিও এখানে কাজ করে। “বন্ধ করা” কাজকে “চালু করা”-র মতোই একটি ধাপের তালিকা হিসেবে লিখে রাখুন। Campaign বা পরীক্ষার পরিবেশ শেষ হলে কে কোন record সরাবেন, তা আগেই ঠিক থাকলে ভুল অনেক কমে। Tag দিয়ে মালিক চিহ্নিত করলে পুরোনো নামের দায়ও খুঁজে পাওয়া যায়।

ধরা পড়লে আগে record মুছুন বা মালিকানা ফিরিয়ে আনুন, তারপর log দেখে বুঝুন কিছু ঘটেছিল কি না।

মূল উপলব্ধি: নিরাপত্তার অনেক ফাঁক আসলে জীবনচক্রের ফাঁক। যা একসাথে তৈরি হয়, তা একসাথে মোছার ব্যবস্থা করুন।

অনুশীলন

কোনো cloud account লাগবে না। হিসাব, পড়া আর ভাবাই আসল কাজ। কেউ চাইলে আসল provider-এ পরীক্ষা করতে পারেন, তবে তাতে খরচ হতে পারে, আর শেষে zone আর record মুছে ফেলতে হবে।

  1. সময়ের হিসাব: Interval 10 s, threshold 3, TTL 60 s, আর app-এর নিজের cache 30 s. (ক) সবচেয়ে খারাপ failover সময় কত? (খ) Detection আগের মতো রেখে, app-এর cache শূন্য করে, সবচেয়ে খারাপ সময় 60 s-এ নামাতে TTL কত হতে হবে?

    (ক) 10 × 3 + 60 + 30 = 120 s.

    (খ) Detection 30 s. বাকি 60 − 30 = 30 s, তাই TTL সর্বোচ্চ 30 s. কিন্তু TTL 60 থেকে 30 করলে সর্বোচ্চ query দ্বিগুণ হয়। Provider-এর পরামর্শও মিলিয়ে নিন।

  2. পরিকল্পনা সমালোচনা: একজন লিখলেন, “শুক্রবার সন্ধ্যা ৬টায় www-এর A record নতুন IP-তে বদলাব (TTL এখন 86400). সাথে সাথে পুরোনো server মুছে দেব, বিল কমবে।” এই পরিকল্পনার ভুলগুলো ধরুন, আর একটি ভালো রূপ লিখুন।

    ভুল: TTL না কমানোয় ১ দিন পর্যন্ত অনেকে পুরোনো ঠিকানায় থাকবেন। পুরোনো server মুছলে তাঁরা সরাসরি ব্যর্থ হবেন। Rollback কয়েক ঘণ্টায়ও সম্ভব নয়। শুক্রবার সন্ধ্যা বেছে নিলে সপ্তাহান্তে সহায়তা কম থাকতে পারে।

    ভালো রূপ: T-25h-এ TTL 60 করা। কম ব্যস্ত সময়ে T নির্ধারণ। আগে নতুন server-এ Host বা --resolve দিয়ে পরীক্ষা। T-তে record বদল। পুরোনো server চালু রেখে log দেখা। Log শান্ত হলে পুরোনো server বন্ধ, তারপর TTL 3600. Rollback মানে T-এর আগের record ফিরিয়ে আনা, যা এক TTL-এই কাজ করে।

  3. ফল অনুমান করুন: www-এর A record: 198.51.100.10, TTL 300. একটি resolver-এর cache খালি। 10:00:00-তে একজন খুঁজলেন। 10:02:00-তে record বদলে হলো 203.0.113.50, TTL 60. এরপর সেই resolver-এ 10:03:00 আর 10:05:30-এ প্রশ্ন এলো। প্রতিবার কী উত্তর আসবে, আর সাথে কত TTL?

    10:03:00: এখনো 198.51.100.10, বাকি TTL 120 s. Cache-এর কপি 10:05:00 পর্যন্ত বৈধ, আর authoritative-এর বদল তাকে ছোঁয় না।

    10:05:30: কপি শেষ, তাই resolver আবার জিজ্ঞেস করে পেল 203.0.113.50, TTL 60 s. শিক্ষা: 10:02:00-তে TTL কমানোর কোনো প্রভাব আগের কপিতে পড়েনি।

  4. ছোট audit: example.zone ফাইলে সব লাইনে TTL লেখা আছে, আর inventory.txt-এ আপনার সচল target-এর নাম প্রতি লাইনে একটি করে আছে। একটি pipeline লিখুন, যা এমন সব CNAME target দেখাবে, যা তালিকায় নেই।
    awk '$4 == "CNAME" { print $5 }' example.zone \
      | sort -u \
      | grep -vxF -f inventory.txt

    awk শুধু CNAME-এর target তোলে, sort -u একই নাম একবার রাখে। grep -vxF পুরো লাইন হুবহু মেলায়, আর মিলে যাওয়া লাইন বাদ দেয়। যা বাকি থাকে, তা-ই সম্ভাব্য dangling. এটি একটি সূচনা; আসল ব্যবস্থায় তালিকা আসা উচিত provider-এর API বা IaC state থেকে, আর A record-ও মেলানো দরকার।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমTTL 86400-এর একটি site নিরাপদে সরানোর ধাপগুলো সাজান (▲▼ চেপে সরান)

  1. TTL কমিয়ে 60 করা
  2. পুরোনো TTL-এর সমান সময় অপেক্ষা করা
  3. Record-এ নতুন ঠিকানা বসানো
  4. পুরোনো server চালু রেখে log দেখা
  5. পুরোনো server বন্ধ করে TTL আবার বাড়ানো

DNS-এ “propagation” বলতে আসলে কী বোঝায়?

  • Authoritative server নতুন record সব resolver-এ পাঠিয়ে দেয়
  • বিভিন্ন resolver-এর cache-এ থাকা পুরোনো উত্তরের TTL একে একে শেষ হওয়া
  • Registrar প্রতিটি record নতুন করে অনুমোদন করে
  • Root server-গুলো নতুন record মুখস্থ করে নেয়

example.com-এ CNAME বসানো যায় না কেন?

  • Domain-এর নাম খুব ছোট বলে
  • শুধু কিছু cloud provider এটি সমর্থন করে না
  • CNAME থাকলে সেই নামে অন্য record চলে না, অথচ সেখানে SOA আর NS থাকতেই হয়
  • CNAME-এ IP লিখতে হয়, আর apex-এর IP থাকে না

Interval 30 s, failure threshold 3, TTL 60 s. Client-এর নিজের কোনো cache নেই। সবচেয়ে খারাপ ক্ষেত্রে failover কত সময় নেবে?

  • 60 s
  • 90 s
  • 120 s
  • 150 s

ওজন blue 95, green 5 দেওয়া weighted DNS-এ একটি বড় resolver অনেক ব্যবহারকারীর সেবা দেয়, আর 60 s উত্তর cache করে। কী ঘটতে পারে?

  • কিছু সময় ধরে সেই resolver-এর সব ব্যবহারকারী একই version-এ যান, তাই আসল ভাগ ৫%-এ স্থির থাকে না
  • প্রতি ব্যবহারকারী ঠিক ৫% সম্ভাবনায় আলাদা উত্তর পান
  • Weighted উত্তর কখনো cache হয় না
  • Green কখনোই কোনো উত্তরে আসে না

একটি VPC-তে example.com নামে private zone যুক্ত, আর তাতে শুধু api আছে। ভেতরের VM থেকে www.example.com খুঁজলে সাধারণত কী হবে, যদি fallback চালু না থাকে?

  • Public zone থেকে সঠিক উত্তর আসবে
  • পাশের VM-এর cache থেকে উত্তর আসবে
  • NXDOMAIN আসবে
  • VM নিজের ঠিকানা উত্তর পাবে

পুরোনো একটি resource মুছে ফেলার সময় subdomain takeover এড়ানোর সবচেয়ে ভালো অভ্যাস কোনটি?

  • Record-এর TTL বাড়িয়ে দেওয়া
  • আগে DNS record মুছে তারপর resource মোছা, আর দুটি একই IaC-তে রাখা
  • শুধু DNSSEC চালু করা
  • Record রেখে দেওয়া, কারণ কেউ জানে না নামটি

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. Hosted zone আপনার record-এর খাতা; public-এর NS registrar-এ বসাতে হয়, private zone শুধু VPC-র ভেতরে।
  2. Apex-এ CNAME চলে না; alias authoritative-এর দিক থেকে ঠিকানা এনে সাধারণ A উত্তর দেয়।
  3. Propagation মানে cache expiry. Cutover-এর এক পুরোনো TTL আগে TTL কমান, আর পুরোনো server log শান্ত হলে তবেই বন্ধ করুন।
  4. Failover-এর সবচেয়ে খারাপ সময় I × F + TTL + A. Weighted-এর ভাগ resolver-এর ভাগ, মানুষের নয়।
  5. DNS-কে critical dependency ভাবুন: registrar lock, সরু IAM, আর আগে record মুছে তারপর resource মোছা।

পরের পর্বে: DNS ব্যবহারকারীকে ঠিকানা দিল। এবার পথের মাথায় আসবে edge: CDN, WAF, DDoS সুরক্ষা আর certificate-এর কাজ।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান