নিজস্ব এজ ডিএনএস তৈরির প্রচেষ্টা নিয়ে অনুসন্ধান

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

হ্যালো, আমি অযোগ্য।

সম্প্রতি ConoHa-তে বিভ্রাট হচ্ছে, এবং ব্যাকএন্ড সার্ভারগুলি অপ্রত্যাশিতভাবে বন্ধ হয়ে যাচ্ছে (যা হোস্ট মেশিন স্থানান্তরের মাধ্যমে সমাধান করা হয়েছে) - এই সমস্যাগুলি বেশ বিরক্তিকর, তাই আমি আমার নিজস্ব এজ ডিএনএস কীভাবে তৈরি করা যায় তা নিয়ে পরীক্ষা করছি।

সিএনএএম-এ নিবন্ধিত রেকর্ডে দুটি এ রেকর্ড নিবন্ধন করা

এভাবে করুন

$ dig www.soulminingrig.com

; <<>> DiG 9.20.16 <<>> www.soulminingrig.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33051
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.soulminingrig.com.         IN      A

;; ANSWER SECTION:
www.soulminingrig.com.  300     IN      CNAME   edge.soulminingrig.com.
edge.soulminingrig.com. 300     IN      A       91.98.169.80
edge.soulminingrig.com. 300     IN      A       163.44.113.145

;; Query time: 94 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Mon Apr 06 20:40:33 JST 2026
;; MSG SIZE  rcvd: 101

আরএফসি নিয়ম অনুযায়ী, রুট ডোমেইনে শুধুমাত্র একটি CNAME নিবন্ধন করা যায়, তাই কার্যত এটি নিবন্ধন করা সম্ভব নয়। এই কারণে, আমরা www.soulmingrig.com এর জন্য একটি CNAME নিবন্ধন করি এবং এর বিষয়বস্তু edge.soulminingrig.com. হিসাবে সেট করি, তারপর edge.soulminingrig.com. এর জন্য দুটি এ রেকর্ড নিবন্ধন করি।

প্রথমত, আপনি হয়তো ভাবতে পারেন যে রুটের জন্য একাধিক এ রেকর্ড নির্দিষ্ট করলেই তো হয়, কিন্তু ভবিষ্যতের প্রসারণশীলতার জন্য আমি এটিকে CNAME-এ নিবন্ধন করছি।

এমন হলে কী হয় তা আমি পরীক্ষা করে দেখেছি, এবং আমার মনে হয়েছিল ConoHa-এর ডিএনএস কি PowerDNS ব্যবহার করছে? আমি নিম্নলিখিত বিষয়গুলি যাচাই করেছি।

  • 91.98.169.80 সার্ভারটি বন্ধ করা

  • শুধুমাত্র 163.44.113.145 চালু রাখা

যদি এমন হয়, তাহলে যদি এটি কেবল একটি রাউন্ড-রবিন হতো, তবে আমি ভেবেছিলাম 91.98.169.80-এর দিকেও কিছু ট্র্যাফিক প্রবাহিত হবে, কিন্তু এটি শুধুমাত্র 163.44.113.145-এর দিকেই প্রবাহিত হচ্ছে। মনে হচ্ছে একটি হেলথ চেক রয়েছে, যা আমাকে ভাবতে বাধ্য করেছে যে তারা হয়তো PowerDNS ব্যবহার করছে।

※অফিসিয়ালভাবে শুধুমাত্র রাউন্ড-রবিন বলা হয়েছে, তাই এর উপর নির্ভর করবেন না।

জিওডিএনএস, কঠিন

এটি প্রতিটি ক্লায়েন্টের জন্য সর্বোত্তম অঞ্চল থেকে সামগ্রী সরবরাহ করার জন্য, কিন্তু যত বেশি ভাবছি, তত বেশি মনে হচ্ছে সহজ বাস্তবায়ন কঠিন।

এমনকি FreeBSD-তেও প্যাকেজ এত কম যে GeoIP.bat ফাইলের জন্য ডেটাবেস সম্ভবত আর বিতরণ করা হচ্ছে না, তবে কোথাও কি এটি এখনও বিতরণ করা হচ্ছে?

https://gist.github.com/denji/9487759

বাস্তবসম্মতভাবে, ব্যক্তিগত পরিবেশে Nginx-এর মাধ্যমে বিতরণ করা বেশ বাস্তবসম্মত মনে হচ্ছে। তাহলে, Nginx-এর মাধ্যমে কীভাবে সহজে বিতরণ করা যায়...?

তাহলে অঞ্চল-ভিত্তিক গতির পার্থক্য...

এবার আমি যে সার্ভারটি যোগ করেছি সেটি ছিল জার্মানিতে আমার একটি অতিরিক্ত সার্ভার।

এটি 91.98.169.80। এবং জাপান থেকে প্রতিক্রিয়ার বিলম্ব বেশ গুরুতর।

অতএব, আমি কার্নেল প্যারামিটারে সেটিংস পরিবর্তন করে যতটা সম্ভব অপ্টিমাইজ করার চেষ্টা করব। TCP Fast Open সহ নিম্নলিখিতগুলি যোগ করুন।

TCP BBR মূলত সেটআপের সময় সক্রিয় করা হয়েছিল, কিন্তু তা সত্ত্বেও, আমার মনে হয় KeepAlive সঠিকভাবে অন্তর্ভুক্ত করার কারণে এটি আরও ভালো হয়েছে।

net.ipv4.tcp_congestion_control=bbr
net.core.default_qdisc=fq
net.ipv4.tcp_keepalive_time=60
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_no_metrics_save=1
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_fastopen=3

যদি সঠিকভাবে পরিমাপ করা যেত, তাহলে কোনো ভুল থাকত না...

GeoIP-এর পথটি বেশ দীর্ঘ মনে হচ্ছে, তাই এটি একটি অস্থায়ী সমাধান।

একাধিক এ রেকর্ড সহ এইচটিটিপি সার্ভারে সার্টিফিকেট বিতরণ

এটি, জানেন, আমাকে বেশ চিন্তায় ফেলেছিল।

কারণ আমি certbot দিয়ে আপডেট করছি, এবং আমি ভেবেছিলাম যে certbot দিয়ে ডিএনএস প্রমাণীকরণ ব্যবহার করলে দুটি এ রেকর্ড সহ উভয় সার্ভারেই আপডেট করা যাবে, কিন্তু এটি ততটা সহজ ছিল না।

উপসংহারে, আমি বেশ জোর করে একটি ডেডিকেটেড ব্যবহারকারী থেকে সার্টিফিকেট rsync করছি।

0 0 1,15 * * /usr/local/bin/certbot renew --nginx --deploy-hook "/usr/local/bin/rsync -azL --no-perms --no-owner --no-group --omit-dir-times --no-times /usr/local/etc/letsencrypt/live/ certsync@10.1.0.999:/usr/local/etc/letsencrypt/live/"

আমি এমনটা করতে চাইনি, কিন্তু মনে হচ্ছে --deploy-hook ব্যবহার করে আপডেটের পরে একটি সাবশেল-এর মতো স্ক্রিপ্ট চালানো যায়।

কারণ, যখন certbot একাধিক এ রেকর্ড সহ সার্ভারে এসিএমই চ্যালেঞ্জ করে, তখন আমি ভেবেছিলাম যে এটি যেকোনো একটিতে বিতরণ করা হবে, তাই একটি সফল হবে এবং অন্যটি ব্যর্থ হবে, কিন্তু কোনো কারণে এটি শুধুমাত্র সেই সার্ভারেই সফল হয়েছিল যা মূলত এটি জারি করেছিল? (এটি স্পেসিফিকেশন অনুযায়ী খুব একটা যুক্তিযুক্ত নয়, তাই আমার মনে হয় অন্য কিছু আছে)। এবং ডিফল্ট certbot এর ক্ষেত্রে, এটি ফাইল প্রমাণীকরণের জন্য একটি ফাইল সাময়িকভাবে স্থাপন করে এবং এসিএমই চ্যালেঞ্জ সফল হলে, অস্থায়ী ফাইলটি অপ্রয়োজনীয় হয়ে গেলে দ্রুত মুছে ফেলার জন্য ডিজাইন করা হয়েছে, তাই একটি রাউন্ড-রবিন পরিবেশে এটি আসলে যেকোনো একটিতে বরাদ্দ হওয়ার কথা।

এবং DNS প্রমাণীকরণের ক্ষেত্রে, আমি --nginx অপশনটি ব্যবহার করা বন্ধ করে দিয়েছিলাম কারণ এটি স্বয়ংক্রিয়ভাবে nginx-এর সার্টিফিকেট ফাইল যোগ করতে পারে না, কিন্তু আসলে সার্টিফিকেটের পাথ পরিবর্তন হয় না, তাই এখন মনে হচ্ছে DNS প্রমাণীকরণই ভালো হতো, আমি তখন পুরোপুরি ঘুমিয়ে ছিলাম মনে হয়...

ConoHa API-এর মাধ্যমে ডিএনএস রেকর্ডের পরিবর্তনের বিজ্ঞপ্তি দেওয়া সম্ভব, তাই আসলে এটি সেভাবেই সমাধান করা যেতে পারে...

Related Posts