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

শ্রোতা এবং সংযোগ যেদিক থেকে শুরু হয় সেই দিক আলাদা হতে পারে

সাধারণ ssh -D 1080 আপনার নিজের মেশিনে শ্রোতা চালায় এবং সেখান থেকেই সংযোগ পাঠায়। দূরবর্তী ডাইনামিক ফরওয়ার্ড এটিকে উল্টে দেয়: শ্রোতা দূরবর্তী হোস্টে দেখা যায়, আর এটি যে সংযোগ গ্রহণ করে তা স্থানীয় দিক থেকে খোলা হয়। OpenSSH ক্লায়েন্ট ম্যানুয়াল নির্দিষ্ট গন্তব্য ছাড়া -R-কে ঠিক এই SOCKS4/5 বিন্যাস হিসেবে নথিভুক্ত করে।

ল্যাপটপ থেকে একটি সমর্থিত কমান্ড এমন দেখায়, যেখানে অ্যাকাউন্ট, হোস্ট ও পোর্ট প্লেসহোল্ডার হিসেবে ধরা হয়:

ssh -NT -S none -o ExitOnForwardFailure=yes \
  -o PermitRemoteOpen=app.corp.example:443 \
  -R 1080 [email protected]

সেখানে তিনটি বিবরণ উপকারী কাজ করে। -S none সেশনকে একটি ভাগ করা কন্ট্রোল মাস্টার থেকে দূরে রাখে, ExitOnForwardFailure আপনাকে অর্ধ-খোলা সেশন রেখে যাওয়ার বদলে দ্রুত ব্যর্থ হয়, আর PermitRemoteOpen সীমিত করে দূরবর্তী শ্রোতা কী পর্যন্ত পৌঁছাতে পারে। একটি অনুমোদিত Pi অ্যাকাউন্ট ব্যবহার করুন এবং এর যেকোনোটি যোগ করার আগে হোস্ট কী যাচাই করুন।

দূরবর্তী শ্রোতা আসলে কী প্রকাশ করে

শ্রোতার উপর নির্ভর করার আগে সার্ভারের ফরওয়ার্ডিং নীতি পরীক্ষা করুন। GatewayPorts no সহ দূরবর্তী ফরওয়ার্ড loopback-এ বাঁধা থাকে, আর সেটিই আপনার চাওয়া প্রকাশ। wildcard ফরওয়ার্ডিং জোর করে এমন সার্ভার একই পোর্ট প্রতিটি ইন্টারফেসে প্রকাশ করে, যা ব্যক্তিগত প্রক্সিকে স্থানীয় নেটওয়ার্কের নাগালের জিনিস বানিয়ে দেয়।

loopback-ও ব্যবহারকারীভিত্তিক সীমারেখা নয়। Pi-তে অন্য কোনো প্রক্রিয়া পোর্ট জানলে 127.0.0.1:1080-এ সংযোগ করতে পারে, তাই Pi-এর স্থানীয় অ্যাকাউন্ট এবং সেখানে যা চলে তা আপনার অ্যাক্সেস ডিজাইনের অংশ। এটি গন্তব্যের তালিকা সংকীর্ণ রাখার কারণ, নীতি পরীক্ষা এড়িয়ে যাওয়ার কারণ নয়।

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

প্রক্সির মধ্য দিয়ে একটি অ্যাপ্লিকেশন পাঠান

Pi-তে প্রক্সি-সচেতন ক্লায়েন্ট তখন অনুরোধটি করতে পারে। socks5h উপসর্গটি গন্তব্যের নাম প্রক্সিকে দেয়, তাই লুকআপ ও সংযোগ দুটোই ল্যাপটপের দিকে ঘটে, এবং এটি PermitRemoteOpen-এ উল্লিখিত গন্তব্যের সঙ্গে মেলে:

curl --proxy socks5h://127.0.0.1:1080 \
  --noproxy '' https://app.corp.example/

স্বাভাবিক সার্টিফিকেট যাচাই ও অ্যাপ্লিকেশনের নিজস্ব প্রমাণীকরণ রাখুন। প্রক্সি বদলায় TCP সংযোগ কোথায় তৈরি হয়; এটি অনুমোদনহীন সেবাকে নিরাপদ করে না, আর স্ব-স্বাক্ষরিত প্রান্তকে বিশ্বস্ত প্রান্তে পরিণত করে না।

ল্যাপটপের এখনও নিজের রুট এবং SSH সার্ভার ও অ্যাপ্লিকেশন দুটির জন্যই রিজলভার অ্যাক্সেস দরকার। এর SSH ক্লায়েন্টের ট্রাফিক অনুমোদিত VPN নীতি দিয়ে নির্বাচিত হতে হবে, আর split-tunnel বাদ দেওয়া সেই ট্রাফিককে আপনি যে পথ পরীক্ষা করেছেন তার চেয়ে ভিন্ন পথে পাঠাতে পারে।

পথটি প্রমাণ করুন এবং বন্ধ করুন

শ্রোতাটি আপনি যেখানে আশা করছেন সেখানেই আছে এবং কেবল অভীষ্ট গন্তব্যই উত্তর দিচ্ছে তা নিশ্চিত করুন:

$ ss -ltnp | grep 1080
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
$ curl -sS -o /dev/null -w '%{http_code}\n' \
    --proxy socks5h://127.0.0.1:1080 https://app.corp.example/

ExitOnForwardFailure ফরওয়ার্ডিং প্রতিষ্ঠিত হয়েছে তা প্রমাণ করতে পারে, তবুও এটি নিশ্চিত করতে পারে না যে অ্যাপ্লিকেশন লগইন পরবর্তী ধাপে সফল হয়। শুধু পোর্ট নয়, অ্যাপ্লিকেশন পরীক্ষা করুন। যে শ্রোতা গ্রহণ করে তারপর প্রতিটি অনুরোধ ব্যর্থ করে, সাধারণত বোঝায় গন্তব্যের নাম বা ল্যাপটপের রুট ভুল, টানেল ব্যর্থ নয়।

এই বিন্যাস কেবল TCP বহন করে। UDP, ICMP এবং প্রক্সি সেটিংস উপেক্ষা করা প্রোগ্রাম এর বাইরে থাকে, আর SSH সেশন শেষ হওয়ার মুহূর্তেই ফরওয়ার্ডিং শেষ হয়। কাজ শেষ হলে সেই সেশন বন্ধ করুন এবং অ্যাপ্লিকেশনে যোগ করা প্রক্সি সেটিং সরিয়ে ফেলুন।

স্থায়ী অ্যাক্সেসের জন্য বরং নেটওয়ার্ক মালিকের সমর্থিত তালিকাভুক্তি বা পরিচালিত গেটওয়ে ব্যবহার করুন। VPN-এর ডিভাইস বা রিসোর্স সীমাবদ্ধতা এড়ানোর জন্য রিভার্স প্রক্সি ভুল সরঞ্জাম; ওই সীমার ভেতরে ব্যবহার করলে এটি স্পষ্ট সীমাসহ কেবল একটি অনুমোদিত অ্যাপ্লিকেশন পথ।

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