DNS — ইন্টারনেটের ফোন বুক
ডোমেইন নাম কীভাবে IP অ্যাড্রেসে রূপ নেয় — recursive resolver, authoritative server, ক্যাশিং, আর DNS রেকর্ড টাইপ।
গল্পে বুঝি
আল-খোয়ারিজমির হঠাৎ একটা ইলেকট্রিশিয়ান দরকার, কিন্তু সে শুধু দোকানের নামটা জানে — “নূর ইলেকট্রিক”, মোবাইল নাম্বারটা নেই। তখন সে ল্যান্ডফোন থেকে ডিরেক্টরি-এনকোয়ারিতে (পুরনো দিনের ১৬৩ নাম্বার সার্ভিস) কল করে অপারেটরকে বলে, “নূর ইলেকট্রিকের নাম্বারটা দেন তো।” অপারেটর নিজের কাছে না পেলে তার বড় ডিরেক্টরিতে খোঁজে, দরকার হলে এলাকাভিত্তিক রেজিস্ট্রি পর্যন্ত যায়, তারপর নাম্বারটা ফেরত দেয়। আল-খোয়ারিজমি নামটা দিল, নাম্বারটা পেল — নাম থেকে নাম্বার।
এই কাজটা প্রতিবার করতে গেলে ঝামেলা, তাই আল-খোয়ারিজমি নাম্বারটা পাওয়ার পর নিজের একটা ছোট নোটবুকে টুকে রাখে — পরের দুই-তিন সপ্তাহ আর অপারেটরকে ফোন করতে হয় না, সরাসরি নোটবুক দেখে ডায়াল করে। তবে দোকান তো নাম্বার বদলাতেও পারে, তাই আল-খোয়ারিজমি মনে মনে ধরে নেয় নোটের এই নাম্বার মাসখানেকের বেশি ভরসা করা ঠিক না — পুরনো হয়ে গেলে আবার অপারেটরকে জিজ্ঞেস করে টাটকা নাম্বার নিয়ে নেয়।
এই গল্পটাই আসলে DNS। দোকানের নাম হলো domain (google.com), আর মোবাইল নাম্বার হলো IP address — DNS নাম থেকে নাম্বারে রূপ দেয়। আল-খোয়ারিজমির অপারেটর হলো recursive resolver, আর অপারেটরের নিজের ডিরেক্টরি → এলাকাভিত্তিক রেজিস্ট্রি → মাস্টার রেজিস্ট্রি পর্যন্ত ওঠাটাই resolver → root → TLD → authoritative server-এর chain। আল-খোয়ারিজমির নোটবুকে নাম্বার টুকে রাখা হলো caching, আর “মাসখানেকের বেশি ভরসা নয়” — ঠিক ওটাই TTL (কতক্ষণ পর্যন্ত ক্যাশ করা নাম্বারকে বিশ্বাস করা যাবে)। বাস্তবে আপনার ব্রাউজার আর OS ঠিক এভাবেই লুকআপের রেজাল্ট TTL শেষ হওয়া পর্যন্ত ক্যাশ করে রাখে, তাই দ্বিতীয়বার একই সাইটে যেতে আর পুরো chain ঘুরতে হয় না।
DNS কেন দরকার
মানুষ নাম মনে রাখে (google.com), কম্পিউটারের দরকার নাম্বার (142.250.80.46)। DNS (Domain Name System) এই দুটোর মাঝের ফাঁকটা পূরণ করে — এটা একটা গ্লোবালি ডিস্ট্রিবিউটেড ডেটাবেস যেটা ডোমেইন নামকে IP অ্যাড্রেসে ম্যাপ করে।
বাস্তব জীবনের উদাহরণ
ফোন নাম্বার খুঁজতে 411 (directory assistance) এ কল করার মতো। আপনি একটা নাম দেন, তারা নাম্বারটা ফেরত দেয়। DNS হলো ইন্টারনেটের ফোন বুক — আপনি “google.com” টাইপ করেন আর DNS IP অ্যাড্রেসটা ফেরত দেয়।
DNS Resolution প্রক্রিয়া
আপনি যখন ব্রাউজারে api.example.com টাইপ করেন:
- Browser cache — প্রথমে এটা চেক করা হয় (আগের লুকআপ থেকে ক্যাশ করা)
- OS cache — আপনার অপারেটিং সিস্টেমের resolver cache
- Recursive resolver — আপনার ISP-এর DNS server (কিংবা
8.8.8.8,1.1.1.1) - Root nameserver — জানে
.comকোথায় খুঁজতে হবে - TLD nameserver — জানে
example.comকোথায় খুঁজতে হবে - Authoritative nameserver — আসল উত্তরটা এর কাছে আছে
// Simplified DNS resolution
interface DNSRecord {
name: string;
type: 'A' | 'AAAA' | 'CNAME' | 'MX' | 'TXT' | 'NS';
value: string;
ttl: number; // seconds until this record expires
}
async function resolve(domain: string): Promise<string> {
// Step 1: Check local cache
const cached = cache.get(domain);
if (cached && cached.expiresAt > Date.now()) {
return cached.value;
}
// Step 2: Ask recursive resolver
// The resolver handles the root → TLD → authoritative chain
const record = await queryResolver(domain, 'A');
// Step 3: Cache the result
cache.set(domain, {
value: record.value,
expiresAt: Date.now() + record.ttl * 1000
});
return record.value;
} DNS রেকর্ড টাইপ
| Type | উদ্দেশ্য | উদাহরণ ভ্যালু |
|---|---|---|
| A | Domain → IPv4 address | 93.184.216.34 |
| AAAA | Domain → IPv6 address | 2606:2800:220:1:: |
| CNAME | অন্য ডোমেইনের alias | www.example.com → example.com |
| MX | ডোমেইনের mail server | mail.example.com (priority: 10) |
| TXT | যেকোনো টেক্সট | SPF records, domain verification |
| NS | zone-এর nameserver | ns1.example.com |
TTL আর ক্যাশিং
প্রতিটা DNS রেকর্ডের একটা TTL (Time to Live) থাকে — resolver-দের এটা কত সেকেন্ড ক্যাশ করে রাখা উচিত। এটা একটা tradeoff:
- Short TTL (60s): পরিবর্তন দ্রুত propagate হয়, কিন্তু বেশি DNS query (ইউজারদের জন্য ধীর)
- Long TTL (86400s): কম query, কিন্তু পরিবর্তন propagate হতে ২৪ ঘণ্টা পর্যন্ত লাগতে পারে
// Real-world TTL strategy
const records = {
// Static infrastructure — cache aggressively
'cdn.example.com': { type: 'CNAME', value: 'd123.cloudfront.net', ttl: 86400 },
// API endpoint — moderate cache for flexibility
'api.example.com': { type: 'A', value: '10.0.1.50', ttl: 300 },
// Failover record — short TTL for quick switching
'primary.example.com': { type: 'A', value: '10.0.1.10', ttl: 60 }
}; DNS propagation আসলে “propagation” না — এটা cache expiration। আপনি যখন একটা DNS রেকর্ড বদলান, পুরনো রেকর্ডটা সব জায়গায় ক্যাশ হয়ে থাকে যতক্ষণ না এর TTL শেষ হয়। এজন্যই migration-এর আগে TTL কমিয়ে রাখা একটা কমন প্র্যাকটিস।
DNS একটা Load Balancer হিসেবে
DNS একটা ডোমেইনের জন্য একাধিক IP অ্যাড্রেস ফেরত দিতে পারে। Resolver সেগুলোর মধ্যে ঘুরে ঘুরে (round-robin) ট্রাফিক একাধিক সার্ভারে ছড়িয়ে দেয়:
// Round-robin DNS
const responses = [
{ type: 'A', value: '10.0.1.1', ttl: 60 },
{ type: 'A', value: '10.0.1.2', ttl: 60 },
{ type: 'A', value: '10.0.1.3', ttl: 60 }
];
// GeoDNS — return different IPs based on client location
function geoDNS(clientIP: string): string {
const region = geolocate(clientIP);
const servers: Record<string, string> = {
'us-east': '10.0.1.1',
'eu-west': '10.0.2.1',
'ap-south': '10.0.3.1'
};
return servers[region] || servers['us-east'];
} সিকিউরিটি: DNS Attack
DNS ডিজাইন করা হয়েছিল সিকিউরিটি ছাড়াই। কমন আক্রমণগুলো:
- DNS spoofing: আক্রমণকারী ভুয়া DNS response পাঠায়, ইউজারদের ম্যালিশিয়াস সার্ভারে রিডাইরেক্ট করে
- DNS amplification DDoS: আক্রমণকারী DNS server ব্যবহার করে একজন ভিকটিমের দিকে লক্ষ্য করা ট্রাফিক amplify করে
- DNSSEC: spoofing ঠেকাতে DNS রেকর্ডে ক্রিপ্টোগ্রাফিক signature (adoption এখনো বাড়ছে)
মূল শিক্ষা
- DNS hierarchical — root → TLD → authoritative, প্রতিটা লেভেলে ক্যাশিং সহ
- TTL ক্যাশিং নিয়ন্ত্রণ করে — migration-এর আগে কমান, stable রেকর্ডের জন্য বাড়ান
- DNS শুধু name→IP-এর চেয়ে বেশি — এটা mail routing, verification, aliasing, আর load balancing সামলায়
- DNS একটা single point of failure — আপনার DNS ডাউন হলে কিছুই কাজ করে না (একাধিক provider ব্যবহার করুন)