VPN দিয়ে মাইনিং পুল: সেশন সঠিক পথে রাখুন
পুল মাইনার একটি বহির্গামী Stratum সেশন খোলে, peer পোর্ট নয়। টানেলটি ওই প্রক্রিয়ার নিচে রাখুন এবং রুট ও রিজলভার তার নেমস্পেস থেকে পড়ুন।
মাইনিং সফটওয়্যার একটি সকেট একটি ঠিকানার দিকে খোলা রাখে, এবং টানেল, রুট ও জমাকৃত কাজ নিয়ে প্রতিটি প্রশ্ন ওই সকেটের উপর ঝুলে থাকে। ওই সকেট পুলের শেষ প্রান্তের দিকে যাওয়া একটি বহির্গামী ক্লায়েন্ট সেশন, peer গ্রহণকারী শ্রোতা নয়। নিচের যাত্রা এটিকে পুলের জারি করা চারটি মান থেকে পুল সত্যিই নথিভুক্ত করা একটি অংশ পর্যন্ত নিয়ে যায়, এবং হোস্টের বাকি সেবাগুলোকে ছোঁয় না। প্রতিটি ধাপ এমন উত্তর দেয় যা আপনি তুলনা করতে পারেন, কোনো অনুভূতি নয়।
পুল সত্যিই যে শেষ প্রান্ত জারি করেছে সেখান থেকেই শুরু করুন
পুল আপনাকে চারটি মান দেয় যা পুরো চুক্তি তৈরি করে: হোস্টনাম বা ঠিকানা, পোর্ট, প্রোটোকল ভ্যারিয়েন্ট ও অ্যাকাউন্ট স্ট্রিং। এগুলো পুলের ড্যাশবোর্ড বা স্বাগত বার্তা থেকে নিন, অন্য পুলের টিউটোরিয়াল থেকে নয়। একই সেবার আঞ্চলিক শার্ড আছে, তাই পুরোনো গাইড থেকে কপি করা হোস্টনাম এখনও সংযোগ করতে পারে এবং এখনও এমন অ্যাকাউন্টে জমা হতে পারে যা আপনি কখনও ব্যবহার করতে চাননি। চারটি মান হুবহু মাইনারর কনফিগারেশনে কপি করুন, কারণ আবার টাইপ করা অ্যাকাউন্ট স্ট্রিং একটি বিভাজক হারায়।
আপনি যে প্রবাহটি রাউট করছেন সেটিই যা Bitcoin ডেভেলপার গাইড Stratum সেশন বলে: একটি স্থায়ী দ্বিমুখী TCP সংযোগ যেখানে পুল কাজ বিতরণ করে এবং মাইনার শেয়ার ফেরত দেয়। এটি পূর্ণ নোডের peer সংযোগ বা ওয়ালেটের চেইন সিঙ্কের মতো একই প্রবাহ নয়, এবং এগুলোকে একই ট্রাফিক শ্রেণিতে ভাঁজ করাই সেই জায়গা যেখান থেকে বেশিরভাগ বিভ্রান্তি শুরু হয়। এই নীতির অধীনে কেবল প্রথমটি পড়ে।
যেখানে পুল TLS দেয়, সেখানে তার ডকুমেন্টেশন যে সার্ভার যাচাই দাবি করে তা রাখুন। টানেল আপনার মেশিন থেকে VPN সার্ভার পর্যন্ত লাফটি এনক্রিপ্ট করে এবং সেখানেই শেষ হয়; এটি অন্য পাশে কে উত্তর দেয় তার জামিন নয়। সেশনটি আপসড প্রস্থান থেকে টিকে থাকুক চাইলে দুই প্রান্তে দুটি যাচাইই রাখুন।
টানেলটি প্রক্রিয়ার সঙ্গে বাঁধুন, পরিবারের সঙ্গে নয়
সংযুক্তির দুটি জায়গা কাজ করে: VPN ক্লায়েন্টকে মাইনার যে নেটওয়ার্ক নেমস্পেস ব্যবহার করে তার ভিতরে চালান, বা সেই নেমস্পেসকে এমন গেটওয়ে দিন যা তার ট্রাফিক টানেলে নিয়ে যায়। দুই ব্যবস্থাই পুল দেখার আগেই সেশনটিকে পথে বসায়। সাধারণ ব্যর্থতা হলো ক্লায়েন্ট হোস্টে, মাইনার নিজের ব্রিজসহ কন্টেইনারে, আর হোস্টের রুট যা কন্টেইনার কখনও জিজ্ঞেস করে না। ক্লায়েন্ট উইন্ডো সুস্থ দেখায় আর পুল আপনার বাড়ির ঠিকানা নথিভুক্ত করে।
কিছু সীমিত করার আগে টানেলের নিজের পরিবহন যাচাই করুন। ক্লায়েন্টকে তার সার্ভারে নিচের স্তর দিয়ে পৌঁছাতে হয়, তাই প্রতিটি প্যাকেট ধরা নীতি সেই প্যাকেটগুলোকেও ধরে যা টানেল তৈরি করত। তখন টানেল শুরু হতে পারে না এবং অন্য কিছুও বাইরে যায় না। ক্লায়েন্টের বিভক্ত টানেল সুবিধা দিয়ে বেছে নিন টানেলে কী ঢোকে; ডিফল্ট রুট হাতে সম্পাদনা করাই সেই উপায় যাতে নিচের স্তর হারিয়ে যায়।
নীতি জায়গায় বসার পর, যে নেমস্পেসের মালিক মাইনার সেখানে সকেট টেবিলটি পড়ুন। পুলের পোর্টের দিকে প্রবাহ টানেল ইন্টারফেসে থাকা উচিত, এবং দুটি কমান্ড এই প্রশ্নের উত্তর দেয়। নিচের পোর্টটি একটি উদাহরণ; পুল যে পোর্ট দিয়েছে তা বসান।
sudo nsenter -t "$(pidof cgminer)" -n ss -tnp state established 'dport = :3333'
sudo nsenter -t "$(pidof cgminer)" -n ip route get 203.0.113.10রুট ও রিজলভার মাইনারর নিজের প্রসঙ্গ থেকে পড়ুন
রাউটিং ও নাম সমাধান প্রতিটি নেমস্পেসের জন্য, তাই সাধারণ শেলে চালানো পরীক্ষা ভুল মেশিনের বর্ণনা দেয় যখনই মাইনার কন্টেইনারে থাকে। আগে নেমস্পেসে ঢুকুন তারপর জিজ্ঞেস করুন কোন ইন্টারফেস প্যাকেটটি পুলের ঠিকানায় নেবে এবং কোন রিজলভার তার হোস্টনামের উত্তর দেবে। হোস্টের উত্তরগুলো স্থানান্তরিত হয় না, এবং তাদের মধ্যের ফাঁক ভুল জায়গায় দেওয়া দোষের সাধারণ উৎস।
আপনি যে ইন্টারফেস পান তার নাম দিন: টানেল মানে সেশনটি উদ্দিষ্ট পথে আছে, আর ভৌত লিংক মানে কোনো নিয়ম আপনার প্রত্যাশার চেয়ে আগে মিলেছে। প্রিফিক্সের দৈর্ঘ্য আগে সিদ্ধান্ত নেয়, তারপর মেট্রিক, তারপর নীতির নিয়ম, তাই কয়েকটি ডিফল্ট এন্ট্রিযুক্ত টেবিল প্যাকেট দ্বিগুণ করে না, শুধু হারে।
রিজলভারগুলো রুট থেকে আলাদাভাবে ব্যর্থ হয়। /etc/resolv.conf পুনরায় লেখা একটি টানেল নেমস্পেসকে এমন রিজলভারের দিকে দেখিয়ে রাখতে পারে যা কেবল টানেলের ভিতর থেকেই পৌঁছানো যায়, আর এটি কোনো TCP হ্যান্ডশেক হওয়ার আগেই ব্যর্থ হয়। পুলের হোস্টনাম নেমস্পেসের ভিতরে সমাধান করুন এবং প্রকাশিত ঠিকানার সঙ্গে তুলনা করুন। যদি অনুসন্ধান সময় শেষ হয় বা অন্য কিছু ফেরত দেয়, রুট ছোঁয়ার আগে সমাধান ঠিক করুন।
পুলের ক্লায়েন্ট ও নোডের শ্রোতাকে আলাদা রাখুন
পোর্ট 8333 হলো Bitcoin Core-এর peer পোর্ট, যেখানে একটি পূর্ণ নোড আগত সংযোগ শোনে; পুল মাইনারর এটি কখনও খোলা দরকার হয় না, এবং এটি খুললে বহির্গামী ত্রুটি সারানো যায় না। আগত শ্রোতা ও বহির্গামী সেশন বিপরীত ভূমিকা বিপরীত বিশ্বাস-অনুমান নিয়ে। মাইনারর কনফিগারেশনে কিছুই ওই পোর্ট বাঁধে না, তাই বন্ধ পোর্ট তার রিপোর্ট করা কোনো ত্রুটির ব্যাখ্যা দিতে পারে না। তাই একটি নোডের নাগালের জন্য লেখা পরামর্শ এমন হোস্টে একটি সার্বজনীন সেবা চালু রেখে যেতে পারে যার কেবল শেয়ার পাঠানো উচিত ছিল।
যদি একটি মেশিন সত্যিই দুটোই করে, প্রতিটি ভূমিকাকে নিজের প্রবেশ-সিদ্ধান্তসহ আলাদা সেবা হিসেবে দেখুন। নোডের শ্রোতা আপনার সার্বজনীন সেবায় প্রয়োগ করা নীতির পিছনে, আর মাইনারর সেশন টানেল বেছে নেওয়া বহির্গামী নীতির। হোস্ট কোন ভূমিকা পালন করে তা লিখে রাখুন এবং তা বদলালে অন্য ভূমিকার নিয়ম সরিয়ে ফেলুন, কারণ পড়ে থাকা অনুমতি নিয়ম তার কারণের চেয়ে বেশি বাঁচে।
প্রমাণ করুন যে পুল কাজটি পেয়েছে
ব্যস্ত ফ্যান ও বাড়তে থাকা হ্যাশরেট দেখায় মাইনার গণনা করছে, পুলে কিছু পৌঁছেছে তা নয়। প্রমাণ ক্লায়েন্টের প্রেরণ কাউন্টারে বা পুলের ড্যাশবোর্ডে: গৃহীত শেয়ার, প্রত্যাখ্যাত শেয়ার এবং প্রতিটি প্রত্যাখ্যানের সঙ্গে যুক্ত কারণ। ওই সংখ্যাগুলো তিনটি ব্যর্থতা আলাদা করে যা বাইরে থেকে একই দেখায়: কোনো সেশন নেই, জমা ছাড়া সেশন, এবং যে সেশন বারবার পুনঃসংযোগ করে। কোনো কনফিগারেশন বদলানোর আগে সেগুলো পড়ুন।
বিস্তারিত লগসহ একটি সংযোগ প্রচেষ্টা দেখুন এবং শেষ ধাপটি লিখে রাখুন যা সফল হয়েছে। যে ধাপে ক্রমটি থামে সেটি তার আশপাশের যেকোনো একটি বার্তার চেয়ে বেশি কাজে লাগে:
| Last stage reached | What it rules out | Probe to run next |
|---|---|---|
| Name lookup completed | Resolver and namespace reachability | ip route get for the returned address |
| TCP connect completed | Route and egress filtering | ss -tnp on the tunnel interface |
| Subscription returned a job | Endpoint or protocol mismatch | Accepted against rejected counts |
তারপর ক্লায়েন্টকে একটি নির্দিষ্ট উইন্ডো চালাতে দিন এবং তার লগ থেকে দুটি ফলাফলই গুনুন। প্রতিটি কাউন্টারের জন্য একটি grep যথেষ্ট, এবং একই উইন্ডোতে তাদের তুলনা ধীর পুলকে ভাঙা পথ থেকে আলাদা করে। পথটি সেখানে ঠিক করুন যেখানে আপনার ক্লায়েন্ট লেখে, কারণ দুটি গণনা অবস্থানের উপর নির্ভর করে না:
grep -c Accepted /var/log/miner.log
grep -c Rejected /var/log/miner.logযদি কোনো নিয়ম প্রতিবার টানেল পড়লে পুলে সরাসরি সংযোগ নিষিদ্ধ করে, তাহলে সেটি পুলের শেষ প্রান্তে স্পষ্ট বাধা হিসেবে প্রকাশ করুন। যে ক্লায়েন্ট চুপচাপ ভৌত লিংক দিয়ে আবার চেষ্টা করে সে মাইনিং চালিয়ে যাবে এবং ওই নিয়ম ভাঙা চালিয়ে যাবে, এবং তার অবস্থা প্রদর্শনী এটি উল্লেখ করবে না। নিয়মটি পরীক্ষা করুন টানেলটি ইচ্ছাকৃতভাবে ফেলে দিয়ে এবং পুলের পোর্টে আদৌ পৌঁছানো যায় না নিশ্চিত করে।