কাঙ্ক্ষিত এজ ডিএনএস বাস্তবায়ন এবং আইপি এনিকাস্ট অ্যাড্রেস প্রাপ্তির যাত্রা - route64.org
হ্যালো, আমি মুনো (Munou)।
আমি এজ ডিএনএস (Edge DNS) এবং সিডিএন (CDN) তৈরি করার জন্য আপ্রাণ চেষ্টা করছি।
বর্তমান অবস্থা
এটি একটি ছদ্ম-বন্টন (pseudo-distribution)।
edge.soulminingrig.com-এর CNAME হিসেবে pool.soulminingrig.com রেজিস্টার করা হয়েছে কোনোভাবে ডিস্ট্রিবিউট করার জন্য... বর্তমানে এটি অর্থহীন।
$dig www.soulminingrig.com AAAA +short
edge.soulminingrig.com.
pool.soulminingrig.com.
2400:8500:2002:3317:163:44:113:145
2a11:6c7:f07:156::2
$dig www.soulminingrig.com A +short
edge.soulminingrig.com.
pool.soulminingrig.com.
163.44.113.145
91.98.169.80
কেন জানি না, তবুও এটি নিকটতম সার্ভার থেকে পরিবেশিত হচ্ছে
যাই হোক না কেন, HTTP-র ক্ষেত্রে ক্লায়েন্ট সাইডের কারণে এবং আশ্চর্যজনক বিষয় হলো যে HTTP ক্লায়েন্টরা আসলে নিকটতম সার্ভারে পৌঁছাতে সক্ষম হচ্ছে। এটি ডিএনএস সার্ভার সঠিকভাবে ডিস্ট্রিবিউট করছে কি না তা আমি জানি না। বিস্তারিত স্পেসিফিকেশন সম্পর্কে কোনো তথ্য না থাকায় এটি ConoHa DNS ব্যবহারের কারণে কি না তাও নিশ্চিত নই।
জার্মানির সার্ভার থেকে
IPv6:
# curl -I6s https://www.soulminingrig.com/ -vvv 2>&1 | head
01:36:56.631373 [0-x] == Info: [READ] client_reset, clear readers
01:36:57.350639 [0-0] == Info: Host www.soulminingrig.com:443 was resolved.
01:36:57.350725 [0-0] == Info: IPv6: 2a11:6c7:f07:156::2, 2400:8500:2002:3317:163:44:113:145
01:36:57.350801 [0-0] == Info: IPv4: (none)
01:36:57.350916 [0-0] == Info: [HTTPS-CONNECT] adding wanted h2
01:36:57.350949 [0-0] == Info: [HTTPS-CONNECT] added
01:36:57.350980 [0-0] == Info: [HTTPS-CONNECT] connect, init
01:36:57.351107 [0-0] == Info: Trying [2a11:6c7:f07:156::2]:443...
01:36:57.351308 [0-0] == Info: [HTTPS-CONNECT] connect -> 0, done=0
01:36:57.351344 [0-0] == Info: [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0
IPv4:
# curl -I4s https://www.soulminingrig.com/ -vvv 2>&1 | head
01:38:31.901521 [0-x] == Info: [READ] client_reset, clear readers
01:38:32.847878 [0-0] == Info: Host www.soulminingrig.com:443 was resolved.
01:38:32.847999 [0-0] == Info: IPv6: (none)
01:38:32.848050 [0-0] == Info: IPv4: 91.98.169.80, 163.44.113.145
01:38:32.848139 [0-0] == Info: [HTTPS-CONNECT] adding wanted h2
01:38:32.848251 [0-0] == Info: [HTTPS-CONNECT] added
01:38:32.848315 [0-0] == Info: [HTTPS-CONNECT] connect, init
01:38:32.848440 [0-0] == Info: Trying 91.98.169.80:443...
01:38:32.848657 [0-0] == Info: [HTTPS-CONNECT] connect -> 0, done=0
01:38:32.848723 [0-0] == Info: [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0
বাড়ির পরিবেশ থেকে
IPv6:
$curl -I6s https://www.soulminingrig.com/ -vvv 2>&1 | head
01:39:23.182757 [0-x] * [READ] client_reset, clear readers
01:39:23.227731 [0-0] * Host www.soulminingrig.com:443 was resolved.
01:39:23.227855 [0-0] * IPv6: 2400:8500:2002:3317:163:44:113:145, 2a11:6c7:f07:156::2
01:39:23.227996 [0-0] * IPv4: (none)
01:39:23.228072 [0-0] * [HTTPS-CONNECT] adding wanted h2
01:39:23.228171 [0-0] * [HTTPS-CONNECT] added
01:39:23.228253 [0-0] * [HTTPS-CONNECT] connect, init
01:39:23.228369 [0-0] * Trying [2400:8500:2002:3317:163:44:113:145]:443...
01:39:23.228605 [0-0] * [HTTPS-CONNECT] connect -> 0, done=0
01:39:23.228711 [0-0] * [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0
IPv4:
$curl -I4s https://www.soulminingrig.com/ -vvv 2>&1 | head
01:40:52.285758 [0-x] * [READ] client_reset, clear readers
01:40:52.316059 [0-0] * Host www.soulminingrig.com:443 was resolved.
01:40:52.316177 [0-0] * IPv6: (none)
01:40:52.316239 [0-0] * IPv4: 163.44.113.145, 91.98.169.80
01:40:52.316340 [0-0] * [HTTPS-CONNECT] adding wanted h2
01:40:52.316440 [0-0] * [HTTPS-CONNECT] added
01:40:52.316522 [0-0] * [HTTPS-CONNECT] connect, init
01:40:52.316638 [0-0] * Trying 163.44.113.145:443...
01:40:52.316822 [0-0] * [HTTPS-CONNECT] connect -> 0, done=0
01:40:52.316929 [0-0] * [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0
যতবারই চেষ্টা করি না কেন, এটি একই নিকটতম আইপিতে পৌঁছায়। দারুণ।
সম্ভবত ConoHa DNS নিজেই এমনভাবে তৈরি করা হয়েছে যাতে নিকটতম আইপি ঠিকানা থেকে পরিবেশন করা যায়, কারণ তা না হলে এটি কাজ করবে না।
$dig a.conoha-dns.com +short
157.7.32.89
$dig b.conoha-dns.org +short
157.7.33.89
ConoHa-এর প্রাইমারি এবং সেকেন্ডারি DNS সার্ভার সেট আপ করা আছে এবং যদি a.conoha-dns.com ডাউন হয়ে যায়, তবে b.conoha-dns.org -এ রিকোয়েস্ট না গেলে এর কোনো মানে হয় না। আমি হয়তো আগে এটি খেয়াল করিনি, কিন্তু ক্লায়েন্ট সাইড থেকে যদি একটি DNS সার্ভার ডাউন থাকে তবে অন্যটিতে সমাধান করতে না পারলে প্রাইমারি এবং সেকেন্ডারি থাকার কোনো অর্থ নেই।
বেশ ভালো কাজ করছে...। এর মানে হলো, একাধিক A রেকর্ড রেজিস্টার্ড থাকলেও এটি একভাবে কাজ করছে।
তবুও আমি আরও ডিস্ট্রিবিউট করতে চাই
আসলে এটিই যথেষ্ট, কিন্তু আরও ডিস্ট্রিবিউট করা গেলে নিজের ডিস্ট্রিবিউটেড DNS বা ডিস্ট্রিবিউটেড CDN তৈরি করা সম্ভব। বর্তমানে দুটি লোকেশনের ক্যাশ সার্ভার ডাউন হয়ে গেলে যোগাযোগ বিচ্ছিন্ন হয়ে যাবে।
সম্ভবত বড় ক্লাউড কোম্পানিগুলো বিশাল ইনফ্রাস্ট্রাকচার এবং অর্থ বিনিয়োগ করে এই ডিস্ট্রিবিউটেড সিস্টেম তৈরি করেছে, যা ভাবলে অবাক হতে হয়।
সহজ ডিস্ট্রিবিউশন নিয়ে ভাবনা
যদি এটি সিঙ্গেল পয়েন্ট অফ ফেইলিওর না হতে হয়, তবে IP Anycast ব্যবহার করে একাধিক লোকেশন থেকে একই IP অ্যাড্রেস প্রচার করা সম্ভব। তবে এর শর্ত হলো BGP সেটআপ থাকতে হবে, যা একজন ব্যক্তির জন্য বেশ কঠিন:
ASN সংগ্রহ করা
BGP সেটআপের জন্য প্রয়োজনীয় সাবনেট ভ্যালু সংগ্রহ করা
খরচ এবং প্রক্রিয়া উভয়ই একজন ব্যক্তির পক্ষে সহজ বলে মনে হয় না।
অর্থাৎ, এই ধাপগুলো এড়িয়ে যদি শুধু IP Anycast বা সেই IP অ্যাড্রেসটি পাওয়া যায়, তবেই সমস্যার সমাধান।
তবে সাধারণত অন্য কারো মালিকানাধীন IP অ্যাড্রেস ব্যবহার করা শিষ্টাচার বহির্ভূত।
route64.org
খুঁজে পেয়েছি।
এটি IPv6 প্রসারের জন্য কাজ করা একটি অলাভজনক সংস্থা বলে মনে হচ্ছে।
তবে বিনামূল্যে ব্যবহারের ক্ষেত্রে সম্ভবত শুধুমাত্র IPv6 Tunnel পাওয়া যায়, বাকিগুলো মূলত ডোনেশনের মাধ্যমে পাওয়া পয়েন্ট দিয়ে ব্যবহার করতে হয়। সেই পয়েন্ট ব্যবহার করে BGP বা ফুললি ম্যানেজড IP Anycast সার্ভিস ব্যবহার করা যায়।
টাকা লাগলেও মাত্র কয়েক ডলারে Anycast অ্যাড্রেস পাওয়া যায়, যা দারুণ। তবে ব্যান্ডউইথ লিমিট আছে, তাই সেদিকে খেয়াল রাখতে হবে।
যেহেতু এটি শুধুমাত্র একটি টানেল, তাই এর মালিকানা পাওয়া সম্ভব নয়।
জাপানিজ ইন্টারনেটেও এটি নিয়ে কোনো আলোচনা খুঁজে না পেয়ে সমস্যায় পড়েছিলাম।
আমি Hetzner-এর IPv4 সার্ভারে IPv6 যোগ করতে চেয়েছিলাম, তাই এটি ট্রাই করলাম। Hetzner-এ IPv4 সার্ভারে IPv6 অ্যাড্রেস যোগ করতে মাসে ১ ডলার লাগে। IPv6-এর জন্য টাকা নেবে... এটা ভেবে আমি আর যোগ করিনি।
আসলে এটি একটি IPv6 Tunnel, তাই সেদিকে সতর্ক থাকা প্রয়োজন।
মজার ব্যাপার হলো, খুব বেশি ল্যাটেন্সি আছে এমন VPS-এর জন্য এটি রিলে হিসেবে ব্যবহার করা যায়। SSH ক্লায়েন্ট এবং SSH সার্ভারের মাঝে এই IPv6 অ্যাড্রেস ব্যবহার করলে বেশ ভালো পারফরম্যান্স পাওয়া যায়।
IPv6 Tunnel ব্যবহার করে দেখা
নিচে "add tunnelbroker" সিলেক্ট করুন
এরপর টানেল পদ্ধতি সিলেক্ট করুন
আমি সহজ হওয়ার কারণে এবং সার্ভারে আগে থেকেই থাকায় WireGurad সিলেক্ট করেছি।
এখন যে সার্ভারে IPv6 যোগ করতে চান তার IPv4 অ্যাড্রেস দিন।
অর্থাৎ এটি WireGuard ক্লায়েন্ট সাইডের কনফিগারেশন।
আমার ক্ষেত্রে এটি হলো 91.98.169.80।
এতে WireGurad-এর কনফিগারেশন ফাইল তৈরি হবে, এরপর শুধু wg-quick up conf-file করলেই হবে।
হ্যাঁ, আপনারা হয়তো খেয়াল করেছেন, এই ব্লগের AAAA রেকর্ডের দ্বিতীয় IPv6 অ্যাড্রেসটি এভাবেই নেওয়া হয়েছে।
Anycast সার্ভিস IPv4-এর জন্যও সম্ভব
নাম দেখে ভেবেছিলাম শুধু IPv6, কিন্তু Anycast অ্যাড্রেস IPv4-ও সাপোর্ট করে। দারুণ।
তাই খুব শীঘ্রই আমি একটি Anycast অ্যাড্রেস নেওয়ার চেষ্টা করব।
এছাড়া IPv4 সাবনেট পাওয়ার আশা ছেড়ে দিইনি, তাই যতটা সম্ভব কম খরচে এটি মেইনটেইন করার কোনো উপায় আছে কি না তা নিয়ে আরও কিছু সময় রিসার্চ করতে হবে।