একটি মেশিনে ইতিমধ্যে অনুমোদিত VPN অ্যাক্সেস আছে, দ্বিতীয় মেশিনের ঠিক একটি প্রাইভেট HTTPS পরিষেবা দরকার, এবং একটি SSH লোকাল ফরওয়ার্ড দ্বিতীয় মেশিনকে টানেল না দিয়েই সেই ফাঁক পূরণ করতে পারে। ফরওয়ার্ডটি পুরো নেটওয়ার্কের বদলে একটি TCP গন্তব্য বহন করে, এবং এই সীমাবদ্ধতাই মূল কথা। নিচের পাঁচটি ধাপ ক্রমানুসারে সম্পন্ন করুন, কারণ প্রতিটি ভিন্ন কারণে ব্যর্থ হয় এবং পরের ধাপ আগের ফাঁক উদ্ধার করতে পারে না। কোনো পূর্বশর্ত অনুপস্থিত থাকলে এই নকশা তা সমাধান করে না, এবং কমান্ডের কোনো টিউনিংই কাজে আসবে না।

ধাপ এক: তিনটি পূর্বশর্ত নিশ্চিত করুন

যেকোনো কমান্ড অর্থবহ হওয়ার আগে তিনটি বিষয় ইতিমধ্যে সত্য হতে হবে। প্রথম মেশিনকে ফরওয়ার্ডিং হোস্ট হিসেবে ব্যবহারের অনুমতি, তাতে কার্যকর SSH অ্যাক্সেস, এবং অভীষ্ট গন্তব্যকে অনুমোদন করে এমন সার্ভার নীতি — এই তিনটি দরকার। ফাইল স্থানান্তরের জন্য তৈরি SSH অ্যাকাউন্টে ফরওয়ার্ডিং বন্ধ থাকতে পারে, আর ফরওয়ার্ডিং অনুমোদনকারী সার্ভারও এর মধ্য দিয়ে কোন গন্তব্যে পৌঁছানো যাবে তা সীমিত রাখতে পারে। পরীক্ষার আগে জিজ্ঞাসা করুন, কারণ সম্মতি ছাড়া সহকর্মীর ওয়ার্কস্টেশনকে জাম্প পয়েন্ট হিসেবে ব্যবহার করা নীতিগত সমস্যা, এমনকি কমান্ডটি নিখুঁতভাবে কাজ করলেও।

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

ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'

ধাপ দুই: একটি loopback পোর্ট বাইন্ড করুন এবং সেশন সচল রাখুন

ক্লায়েন্ট অ্যাপ্লিকেশন চালানো মেশিনে প্রাইভেট পরিষেবার জন্য একটি লোকাল ফরওয়ার্ড খুলুন। এটি স্পষ্টভাবে loopback-এ বাইন্ড করুন যাতে লোকাল নেটওয়ার্কে প্রকাশ না পায়, এবং এমন একটি উচ্চ পোর্ট বাছুন যা কোনো লোকাল পরিষেবা ইতিমধ্যে দখল করেনি। কাজ করার সময় সেশন চালু রাখুন, কারণ এটি বন্ধ করলে লিসেনারও বন্ধ হয়। ExitOnForwardFailure প্রত্যাখ্যাত বাইন্ড বা দখলকৃত পোর্টকে ফরওয়ার্ড ছাড়া চালু থাকা সেশনের বদলে তাৎক্ষণিক প্রস্থানে পরিণত করে, এবং এই ব্যর্থতার ধরনটিই সবচেয়ে বেশি সময় নষ্ট করে।

প্রাইভেট সংযোগ জাম্প হোস্ট থেকে তৈরি হয়, তাই সেই হোস্টের DNS, রুট, VPN নীতি এবং পরিষেবা অ্যাক্সেস—সবই কাজ করতে হবে। SSH সেশন জাম্প হোস্টের যে পৌঁছানো নেই তা সৃষ্টি করে না, এবং VPN কখনো যে রুট পাঠায়নি তা মেরামত করতে পারে না। কমান্ডের নীরবতার ওপর ভরসা না করে লিসেনারটি যেখানে সত্যিই আছে সেখানে যাচাই করুন।

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'

ধাপ তিন: সকেট লোকাল হলে HTTPS নামটি ধরে রাখুন

https://127.0.0.1:9443/ ব্রাউজ করলে TLS সার্ভার নাম ও অ্যাপ্লিকেশন কর্তৃত্ব বদলে যায়। portal.lab.example-এর জন্য ইস্যু করা সার্টিফিকেট loopback ঠিকানার বিপরীতে যাচাই হবে না, এবং ফলাফল ত্রুটিটি ফরওয়ার্ডিং শর্টকাট নয়, বরং ভাঙা সার্টিফিকেটের মতো দেখায়। কমান্ড-লাইন পরীক্ষার জন্য আসল URL রাখুন এবং কেবল সকেট গন্তব্য বদলান। --connect-to ঠিক এটাই করে, এবং curl ম্যানুয়াল নিচে ব্যবহৃত চার-ক্ষেত্রের ফর্মটি নথিভুক্ত করে।

curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/

নামটি URL-এ, TLS হ্যান্ডশেকে এবং Host হেডারে থাকে, অথচ TCP সংযোগটি লোকাল লিসেনারে যায়। নো-প্রক্সি অপশনটি কনফিগার করা HTTP প্রক্সিকে এটি আটকাতে দেওয়ার বদলে পরীক্ষাটি এই ফরওয়ার্ডেই রাখে, আর সার্টিফিকেট যাচাই চালু রাখাই ফলাফলকে অর্থবহ করে।

ধাপ চার: একটি ফরওয়ার্ড কী ঢাকতে পারে না তা জানুন

একটি TCP ফরওয়ার্ড একটি গন্তব্য পোর্ট ঢাকে। যে পৃষ্ঠা দ্বিতীয় হোস্টনামে রিডাইরেক্ট করে, প্রাইভেট নেটওয়ার্কের ভেতরের হোস্ট থেকে অ্যাসেট লোড করে বা অন্য পোর্টে পোস্ট করে, তার নিজস্ব ফরওয়ার্ড দরকার, এবং তাদের প্রত্যেকের প্রথমটির মতো একই নীতি-যাচাই দরকার। ব্রাউজার কর্মপ্রবাহ নিজস্ব দাবি যোগ করে, কারণ প্রক্সি কনফিগারেশন বা লোকাল ম্যাপিংয়ের মাধ্যমে আসল নামটি লোকাল পোর্টে পাঠাতে ব্রাউজারকে বলা লাগে। তাই সফল কমান্ড-লাইন পরীক্ষা ব্রাউজারও সফল হবে তা প্রমাণ করে না, যদিও এটি পথটি প্রমাণ করে।

UDP, SMB ডিসকভারি এবং ডোমেইন সাইন-ইন কোনোভাবেই TCP ফরওয়ার্ডের মধ্য দিয়ে যায় না। আসল প্রয়োজন যদি সাধারণ নেটওয়ার্ক অ্যাক্সেস হয়, তাহলে এই নকশা ভুল হাতিয়ার এবং সমর্থিত রিমোট-অ্যাক্সেস গেটওয়ে-ই সঠিক।

ধাপ পাঁচ: পরিষ্কার করুন এবং লিখে রাখুন

পরীক্ষা শেষ হলে সেশন বন্ধ করুন এবং লিসেনার চলে গেছে তা নিশ্চিত করুন। নির্বাচিত পোর্ট ইতিমধ্যে দখলকৃত হলে নম্বরটি খালি করতে অসম্পর্কিত লোকাল পরিষেবা বন্ধ করার বদলে অন্য একটি অব্যবহৃত loopback পোর্ট বাছুন এবং URL, পরীক্ষার কমান্ড ও নোট—সব একসাথে হালনাগাদ করুন। ল্যাপটপে ফরওয়ার্ড খোলা রেখে দেওয়া একটি ডায়াগনস্টিককে অপরিচালিত পরিষেবায় পরিণত করে।

জাম্প হোস্ট, ফরওয়ার্ড করা গন্তব্য, লোকাল পোর্ট এবং কে এই ব্যবস্থা অনুমোদন করেছে তা লিখে রাখুন। যে ফরওয়ার্ড কেবল কারও shell ইতিহাসে থাকে, সেটি একটি রিবুট দূরত্বে পুনরায় তদন্তের মুখে পড়ে, আর পরের ব্যক্তি জানবে না তিনটি পূর্বশর্তের কোনটি ইতিমধ্যে যাচাই হয়েছে।

সম্পর্কিত নিবন্ধ