কম্পিউটার টিউটোরিয়াল

DNS বোঝা: কেন ডোমেন রুট CNAME হতে পারে না এবং মূল DNS বেসিকস

এই পোস্টটি উপরের প্রশ্নটি ব্যবহার করবে DNS, dig, A রেকর্ড, CNAME রেকর্ড, এবং ALIAS/ANAME রেকর্ড বিগিনার্স পারস্পেক্টিভ থেকে এক্সপ্লোর করতে। তাহলে শুরু করা যাক।

প্রথমে, কিছু ডেফিনিশন

  • ডোমেন নেম সিস্টেম (DNS): মানবের জন্য মেমরেবল ডোমেন নাম (example.com) কে একটি IP অ্যাড্রেসে (93.184.216.34) কনভার্ট করার সামগ্রিক সিস্টেম। IP অ্যাড্রেসটি একটি সার্ভারের, সাধারণত একটি ওয়েব সার্ভারের, যেখানে একটি ওয়েবপেজ প্রদর্শনের জন্য প্রয়োজনীয় ফাইলগুলো স্টোর করা থাকে।
  • DNS সার্ভার (নেম সার্ভার বা نیمসার্ভার হিসেবেও পরিচিত): DNS সফটওয়্যার ব্যবহার করে ডোমেন অ্যাড্রেস সম্পর্কে ইনফরমেশন স্টোর করে। একাধিক লেভেল রয়েছে — প্রতিটি ISP-এর, রুট (বিশ্বব্যাপী ১৩টি), টপ লেভেল ডোমেন (TLD, যেমন ‘.com’), এবং ডোমেন লেভেল DNS সার্ভার।
  • ডোমেন নাম: ডোমেন (example) TLD (.com) এর সাথে কম্বাইন করা। 'ডোমেন' শব্দটিকে ডোমেন নামের সাথে প্রায়শই সিনোনিমাসভাবে ব্যবহার করা হয়, যদিও তারা ভিন্ন। আপনি যখন একটি 'ডোমেন' কেনেন একটি রেজিস্ট্রার বা রিসেলার থেকে, আপনি একটি নির্দিষ্ট ডোমেন নাম (example.com) এর অধিকার কেনেন, এবং যেকোনো সাবডোমেন যা আপনি তৈরি করতে চান (my-site.example.com, mail.example.com, ইত্যাদি)।

উচ্চ-স্তরের কোয়েরি ফ্লো

আপনার ব্রাউজারে "example.com" টাইপ করার সময় যা ঘটে সেটির হাই-লেভেল ফ্লো ISP, রুট, এবং TLD DNS সার্ভারগুলোর হপস বাদ দিয়ে নিচের মত সিম্প্লিফাই করা যায়:

DNS বোঝা: কেন ডোমেন রুট CNAME হতে পারে না এবং মূল DNS বেসিকস
সিম্প্লিফাইড DNS রিকোয়েস্ট ফ্লো, আরও বিস্তারিত ফ্লোতে বেশি দেখা যাবে

একটি ডোমেনে সাধারণত দুটি বা তার বেশি নেম সার্ভার থাকে, যেগুলো ডোমেন নাম (example.com) সম্পর্কে রেকর্ড ধারণ করে।

অনেক ধরণের রেকর্ড স্টোর করা যায়, অধিকাংশই প্রতি টাইপে একাধিক এন্ট্র থাকতে পারে:

  • A: অ্যাড্রেস রেকর্ড যা ডোমেন নামকে IP অ্যাড্রেসে ম্যাপ করে
  • CNAME: ক্যানোনিক্যাল নেম রেকর্ড। একটি ডোমেন নাম (বা সাবডোমেন নাম) কে অন্যটির সাথে এলিয়াস করতে ব্যবহৃত হয়। আমরা এতে পরে বিস্তারিত দেখব।
  • MX: মেইল এক্সচেঞ্জ রেকর্ড যা ইমেল ডেলিভারি এজেন্টকে বলে কোথায় তাদের আপনার ইমেল ডেলিভার করতে হবে
  • TXT: ফ্লেক্সিবল টেক্সট রেকর্ড, বিভিন্ন ব্যবহারের জন্য স্ট্রিং স্টোর করার জন্য
  • SOA: সিঙ্গুলার স্টার্ট ऑफ অথরিটি রেকর্ড যা ডোমেনের টপ লেভেলে রাখা হয়। ডোমেন সম্পর্কে নির্দিষ্ট প্রয়োজনীয় ইনফরমেশন ধারণ করে, উদাহরণস্বরূপ এর প্রাইমারি নেম সার্ভার
  • NS: ডোমেনের সাথে যুক্ত নেম সার্ভারগুলো

যখন আপনার ডিভাইস একটি কোয়েরি পাঠায় যা একটি নেম সার্ভারে পৌঁছায়, সার্ভারটি ডোমেনের রেকর্ড নোডে A রেকর্ড খুঁজে, এবং সংশ্লিষ্ট স্টোর করা IP অ্যাড্রেস (example.com: 93.184.216.34)। এটি তারপর ডিভাইসের কাছে ফেরত পাঠায়, যাতে সঠিক ওয়েব সার্ভারে রিকোয়েস্ট পাঠিয়ে অনুরোধ করা ওয়েবপেজ বা রিসোর্স রিট্রিভ করা যায়।

'dig' ব্যবহার

dig (ডোমেন ইনফরমেশন গ্রোপর) DNS সার্ভার কোয়েরি করার একটি কমান্ড-লাইন টুল। এই কমান্ডটি সাধারণত ট্রাবলশুটিংয়ের জন্য, বা বর্তমানের মতো একটি সিস্টেমের সেটআপ বুঝতে ব্যবহৃত হয়।

$ dig example.com টার্মিনালে একটি লং রেসপন্স প্রিন্ট করে, ডিফল্ট আউটপুটের ডিটেইল এখানে, যেকেন আমরা ANSWER SECTION-এ আগ্রহী।

;; ANSWER SECTION: example.com. 72703 IN A 93.184.216.34

এবং যাচ্ছে, আমরা দেখতে পাচ্ছি example.com একটি A রেকর্ড রিটার্ন করছে 93.184.216.34। কখনও কখনও ডোমেনগুলোর একাধিক A রেকর্ড থাকে, যদি একাধিক ওয়েব সার্ভার প্রয়োজনীয় ইনফরমেশন প্রদান করতে পারে।

আরও আছে! যদি আমরা কিছু অন্য উদাহরণ ট্রাই করি, আমরা দ্রুত দেখতে পাবো আরেকটি কমন রেকর্ড আসছে: CNAME।

$ dig www.skyscanner.net:

;; ANSWER SECTION: www.skyscanner.net. 169 IN CNAME www.skyscanner.net.edgekey.net. www.skyscanner.net.edgekey.net. 5639 IN CNAME e11316.a.akamaiedge.net. e11316.a.akamaiedge.net. 20 IN A 23.217.6.192
www.skyscanner.net.edgekey.net. 5639 IN CNAME e11316.a.akamaiedge.net.
e11316.a.akamaiedge.net. 20 IN A 23.217.6.192

+short ফ্ল্যাগ ব্যবহার করলে আমরা পথটি স্পষ্টভাবে দেখতে পাই:

$ dig www.skyscanner.net +short

www.skyscanner.net.edgekey.net. e11316.a.akamaiedge.net. 23.217.6.192

CNAME

একটি CNAME রেকর্ড একটি ডোমেন নামকে অন্য একটি ক্যানোনিক্যাল (সত্য) ডোমেনের এলিয়াস হিসেবে ব্যবহার করার অনুমতি দেয়।

যখন DNS সার্ভার একটি CNAME রেকর্ড রিটার্ন করে, এটি সেটি ক্লায়েন্টের কাছে রিটার্ন করে না। বরং এটি আবার রিটার্ন করা ডোমেন নামটি লুকআপ করে, এবং সেটির очередь A রেকর্ডের IP অ্যাড্রেস রিটার্ন করে। এই চেইনটি অনেক CNAME লেভেল পর্যন্ত চলতে পারে, কিন্তু ক্যাশিং সেটল হওয়ার আগে মাল্টিপল লুকআপের কারণে মাইনর পারফরম্যান্স হিট হয়।

একটি সহজ উদাহরণ হতে পারে আপনার একটি সার্ভার আছে যেখানে আপনি সব ফটো রাখেন। আপনি সাধারণত এটিকে photos.example.com 통해서 অ্যাক্সেস করেন। কিন্তু আপনি চাইতে পারেন photographs.example.com 통해서ও অ্যাক্সেস করা যায়। এটাকে সম্ভব করার একটি পদ্ধতি হলো একটি CNAME রেকর্ড যোগ করা যা photographs-কে photos-এর দিকে পয়েন্ট করবে। এর মানে, কেউ photographs.example.com ভিজিট করলে সে photos.example.com-এর মতো কন্টেন্ট পাবে।

$ dig photographs.example.com কোয়েরি ব্যবহার করলে আমরা দেখব:

photographs.example.com IN CNAME photos.example.com photos.example.com IN A xx.xxx.x.xxx

মনে রাখা গুরুত্বপূর্ণ যে CNAME হলো ডান পাশের টুকরো। বাম পাশের টুকরো হলো এলিয়াস নাম, বা লেবেল।

আরেকটি সাধারণ ব্যবহার হলো www সাবডোমেনের জন্য। example.com কেনার পর আপনি সম্ভবত চান যাতে www.example.com টাইপ করে যেসব ইউজার সেগুলো একই কন্টেন্ট দেখে।

এখানে দ্রষ্টব্য যে example.com-কে apex, root, বা naked ডোমেন নাম বলা হয়।

একটি অপশন হয়ে থাকতো আরেকটি A রেকর্ড সেট আপ করা, যা example.com-এর মতো একই IP অ্যাড্রেসে পয়েন্ট করে। এটি সম্পূর্ণ বৈধ, এবং আসল example.comও এটাই করে, কিন্তু এটি ভালো স্কেল করে না। কি হবে যদি আপনাকে example.com-এর IP অ্যাড্রেস আপডেট করতে হয়? আপনাকে www সাবডোমেনের জন্যও আপডেট করতে হবে, এবং আপনি যে অন্যান্য ব্যবহার করেন সেগুলোর জন্যও।

যদি একটি CNAME রেকর্ড ব্যবহার করা হয় www.example.com-কে example.com-এর দিকে এলিয়াস করতে, তবে শুধু রুট ডোমেন আপডেট করলেই চলবে, কারণ অন্যান্য সব নোড সেটিকে পয়েন্ট করে।

CNAME লিমিটেশন

DNS স্ট্যান্ডার্ডগুলো লেখা হয়ে যাওয়ার সময়, কিছু নিয়ম নির্ধারিত করা হয়েছিল তাদের ব্যবহার নিয়ন্ত্রণ করার জন্য। RFC 1912 এবং RFC 2181 নির্ধারণ করে যে:

  • SOA এবং NS রেকর্ড রুট ডোমেনে থাকা বাধ্যতামূলক
  • CNAME রেকর্ড শুধু একক রেকর্ড হিসেবে এক্সিস্ট করতে পারে এবং অন্য কোনো রিসোর্স রেকর্ডের সাথে কম্বাইন করা যায় না (DNSSEC SIG, NXT, এবং KEY RR রেকর্ড বাদে)

এটি রুট ডোমেনে CNAME ব্যবহার করা বাদ দেয়, কারণ দুটি নিয়ম একে অপরের সাথে विरোধाभাস সৃষ্টি করে।

এখানে গুরুত্বপূর্ণ হলো এটি একটি কন্ট্র্যাকচুয়াল লিমিটেশন, টেকনিক্যাল নয়। রুটে CNAME ব্যবহার করা সম্ভব, কিন্তু এটি আশাঙ্কিত এরর ফেলতে পারে, কারণ এটি আচরণের প্রত্যাশিত কন্ট্র্যাক্ট ভাঙছে।

Cloudflare এর একটি উদাহরণ আছে, যারা রুট ডোমেনে CNAME ব্যবহার করার পর মাইক্রোসফট এক্সচেঞ্জ মেইল সার্ভারের সাথে সমস্যা মেনে পড়েছিল:

ডোমেনগুলো সাধারণত তাদের ইমেল হ্যান্ডেল করার সার্ভারগুলো ডেজিগনেট করে যাকে MX রেকর্ড বলা হয়। সমস্যাটি ছিল এক্সচেঞ্জ সার্ভারগুলো … রুট রেকর্ডে CNAME পিক আপ করতে পারত এবং তারপর MX রেকর্ডে সেট করা CNAME-কে সঠিকভাবে রেসপেক্ট করতে পারত না। আপনি এক্সচেঞ্জকে দোষ দিতে পারবেন না। তারা DNS স্পেসিফিকেশনে ниچیর্দ prémisse-এ আওতায় কাজ করত।

এখানে আপনি ডাউনসাইড দেখতে পাচ্ছেন যা অনেক সার্ভার সফটওয়্যার বা লাইব্রেরিতে আসতে পারে। কারণ একটি স্ট্যান্ডার্ড আছে CNAME একটি নোডে একমাত্র রেকর্ড হবার জন্য, অন্য কোনো রেকর্ড খুঁজে বের করা হয় না। অন্য সব রেকর্ড সাইলেন্টলি ইগনোর করা হয়, কোনো ওয়ার্নিং বা এরর মেসেজ ছাড়া। এমনকি যদি একটি MX রেকর্ড ইমেল রিসিভ করার জন্য সেট করা থাকে, MX ইগনোর করা হবে মেনে নেওয়া হবে যেন সেটি অস্তিত্বে নেই কারণ CNAME প্রথমে ইভ্যালুয়েট করা হয়। একই জিনিসটি A রেকর্ড থাকলে ও ঘটে: CNAME প্রেসিডেন্স নেবে এবং A রেকর্ড পড়া হবে না।

আধুনিক ইন্টারনেট

তাহলে এটা কেন একটি সমস্যা? আপনি কেনো আপনার রুট ডোমেনের জন্য CNAME ব্যবহার করতে চান? নিশ্চিতভাবেই সেটি পথের শেষ যখন আপনি আপনার কন্টেন্ট হোস্ট করার ওয়েব সার্ভারের IP অ্যাড্রেস খুঁজছেন?

আধুনিক ইন্টারনেট ল্যান্ডস্কেপে, সেটি আর সত্য নয়। dunia DNS স্ট্যান্ডার্ড লেখা হয়েছিল সেটির থেকে খুব ভিন্ন।

আপনি একটি প্ল্যাটফর্ম অ্যাজ অ্যা সার্ভিস (PaaS) প্রোভাইডার όπως Heroku ব্যবহার করতে পারেন এবং তাদের ওয়েব সার্ভারে কন্টেন্ট স্টোর করতে পারেন। আপনি কন্ট্রোল করেন কন্টেন্ট, কিন্তু ইনফ্রাস্ট্রাকচার নন, এবং PaaS প্রোভাইডার নেটওয়ার্ক মেইনটেনেন্সের ভারী কাজগুলো করে। তারা সাধারণত আপনাকে একটি URL (my-app.herokuapp.com) দেয় যা তাদের রুট ডোমেনের একটি সাবডোমেন, এবং আপনি আপনার কন্টেন্ট যে ওয়েব সার্ভার(গুলো)র ওপর আছে সেগুলোর IP অ্যাড্রেস দেখতে পারেন। কিন্তু এগুলো সম্পূর্ণ PaaS প্রোভাইডারের নিয়ন্ত্রণে, এবং সতর্কতা ছাড়া পরিবর্তন হতে পারে।

PaaS প্রোভাইডার দ্বারা কिये गये ব্যাকএন্ড পরিবর্তনের স্কেল এবং ফ্রিকোয়েন্সি আপনার রুট ডোমেন A রেকর্ডকে একটি একক IP অ্যাড্রেসে পয়েন্ট করে রাখাকে কঠিন করে দিতে পারে। আপনি আদর্শভাবে এইভাবে করতে চাইবেন:

example.com IN CNAME my-app.herokuapp.com.www.example.com IN CNAME my-app.herokuapp.com.example.com IN CNAME my-app.herokuapp.com. www.example.com IN CNAME my-app.herokuapp.com.

তाकি Heroku (বা আপনার বেছে নেওয়া হোস্ট প্রোভাইডার) A রেকর্ড আপডেট করতে পারে যেটি CNAME পয়েন্ট করে, আপনার সাইড থেকে কোনো পরিবর্তন ছাড়া। যাইহোক, जैसा আমরা এখন জানি, এটি DNS স্পেসিফিকেশন ভাঙে, তাই খুব খারাপ আইডিয়া।

এটি সম্ভব শুধু example.com থেকে www.example.com-এ 301/302 রিডাইরেক্ট ইমপ্লিমেন্ট করা। যাইহোক, সেই ইনস্ট্রাকশন বা ওয়েব সার্ভারে ঘটে (তবে এখনও DNS-এ একটি ফিক্সড A রেকর্ড ব্যবহার করার সমস্যা রয়েছে ওয়েব সার্ভারকে পয়েন্ট করতে), বা একটি কাস্টম DNS প্রোভাইডার রিডাইরেক্ট (যেটি HTTPS-এ কমপ্লিকেশন সৃষ্টি করে)।

এইর সাথে একটি সাইড ইফেক্ট হলো URL বারে আপনি যে ডোমেন দেখেন সেটি চেঞ্জ হয়ে যায়, যা আপনি চাইতে পারেন না। এই মেথডটি তখনই ইন্টেন্ডেড যখন আপনার ওয়েবসাইট পার্মানেন্টলি মুভ করেছে, বা আপনি SEO র‍্যাঙ্কিং সংরক্ষণ করার চেষ্টা করছেন, বরং আমাদের সমস্যা সমাধান করার জন্য না যেটি একটি জটিল পরিবর্তনশীল ব্যাকএন্ডকে স্কেলেবলভাবে পয়েন্ট করা।

সমাধান

অনেক DNS প্রোভাইডার এখন এই সমস্যাটি সমাধান করার কাস্টম সমাধান ডেভেলপ করেছেন, যেন:

  • ALIAS DNSimple-এ
  • ANAME DNS Made Easy-তে
  • ANAME easyDNS-এ
  • CNAME (ভার্চুয়াল) CloudFlare-এ

এগুলো সব ভার্চুয়াল রেকর্ড টাইপ যেগুলো CNAME-এর মতো আচরণ দেয়, কোনো ডাউনসাইড ছাড়া। এক্স্যাক্ট ইমপ্লিমেন্টেশন ভিন্ন হতে পারে, কিন্তু হাই লেভেলে যখন DNS সার্ভার এই ভার্চুয়াল রেকর্ড টাইপগুলোতে একটু দেখে, এটি একটি DNS রেজলভার হিসেবে কাজ করে। এটি এলিয়াস দ্বারা তৈরি চেইনটি ফলো করে যতক্ষণ না এটা A রেকর্ড (বা রেকর্ডগুলো) এ রেজল্ভ হয় এবং এই A রেকর্ড(গুলো) DNS সার্ভারের কাছে রিটার্ন করে। এটি CNAME চেইনকে রিটার্ন করা A রেকর্ড(গুলো)তে "ফ্ল্যাটেন" করে, এবং পাঠানো কোয়েরির জন্য অভিন্ন। কোয়েরিটি শুধু একটি শুদ্ধ A রেকর্ড দেখে, যা DNS স্পেসিফিকেশন ভাঙে না, এবং CNAME-এর কোনো ডিসঅ্যাডভান্টেজ নেই।

এই ভার্চুয়াল রেকর্ডগুলো রুটে অন্যান্য রেকর্ডের পাশাপাশি বসে থাকতে পারে অনিচ্ছাকৃত আচরণের কোনো ভয় ছাড়া। প্রোভাইডারের DNS রেজোলিউশন মেথড CNAME চেইন ফলো করার সময় কী হচ্ছে সেটির ওপর নির্ভর করে, সেগুলো ক্যাশিং প্রিভিয়াস লুকআপ থেকে পারফরম্যান্স বেনিফিটও দিতে পারে।

একটি DNSimple সেটআপের জন্য, আমরা নিচের মত কনফিগার করব। এই সমাধানটি ডোমেন নাম এলিয়াসিং-এর সব সুবিধা দেয়, এবং রুট লেভেলে এটি ব্যবহার করার কোনো রিস্ক নেই।

example.com IN ALIAS my-app.herokuapp.com.www.example.com IN CNAME my-app.herokuapp.com.

পড়ার জন্য ধন্যবাদ! ?

সর্বদা যেকোনো সংশোধন বা অতিরিক্ত পয়েন্টের জন্য খোলামেলা।

রিসোর্স

  • What is a DNS Server
  • Set Up a DNS Name Server
  • DNSimple support pages and ALIAS blog
  • Cloudflare support and CNAME blog
  • dig HowTo
  • অনেক গরেট Stack Overflow বা StackExchange পোস্ট
  • ভালো লিখা উইকিপিডিয়া এন্ট্রি
  • Netlify blog 'To www or not www'
  1. ওয়ার্ডপ্রেস সাইটের ডোমেইন নাম পরিবর্তন করার পদ্ধতি

  2. DNS এরর ঠিক করে ইন্টারনেট অ্যাক্সেস ফিরে পান

  3. আইপ্যাড (iPad)-এ ওয়ার্ডপ্রেসে ইমেজ আপলোড করুন সাইজ ও নাম রেখে

  4. সাইবারস্কোয়াটিং বনাম টাইপোস্কোয়াটিং: মূল পার্থক্য ও আইনি নয়ামত