বিপরীত পোর্ট টানেলিং


59

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

এই বিলম্বের সাথে আটকে গিয়ে পুরো জিনিসটিকে একটি সঠিক সার্ভারের দিকে ঠেলে দিতে না চাইলে আমার একটা ক্রেজি ধারণা ছিল: আমি কি কেবল আমার পোর্টটি এসএসএইচের মাধ্যমে একটি বাহ্যিক সার্ভারে ফরোয়ার্ড করতে পারি?

আমি এর আগে পোর্ট টানেলিং করে ফেলেছি তবে আমি সাধারণত এটি প্রায় সঠিক পথেই করি:

  • আমি একটি রিমোট বাক্সের সাথে সংযোগ স্থাপন করেছি এবং 12345 বন্দরটিতে আমার স্থানীয় মেশিনে 12345 পোর্টটি দেখানোর জন্য জিজ্ঞাসা করব।
  • আমি রিমোট মেশিনে P12345 তে কিছু শুরু করি
  • আমি লোকালহোস্টের মাধ্যমে এটি অ্যাক্সেস করতে পারি: 12345

যা আমি যা করতে চাই :

  • একটি দূরবর্তী পিসিতে সংযোগ করুন এবং এটি জিজ্ঞাসা করুন এটির স্থানীয় P12345 আমার স্থানীয় P12345 (টানেলের উপরে) থেকে জিনিস এনেছে
  • আমি আমার লোকাল কম্পিউটারে P12345 তে কিছু শুরু করি
  • অন্যান্য ব্যক্তিরা দূরবর্তী অ্যাক্সেস করতে পারে: 12345 এবং আমার লোকালহোস্ট: 12345 see

উত্তর:


96

আপনার স্থানীয় মেশিন ( localhost) থেকে 8000 পোর্টের দূরবর্তী হোস্টে পোর্ট 80 ফরওয়ার্ড করার কমান্ডটি হ'ল:

ssh -R 8000:localhost:80 oli@remote-machine

এটির জন্য এসএসএইচ সার্ভারে একটি অতিরিক্ত ত্বক প্রয়োজন, এতে লাইনগুলি যুক্ত করুন /etc/ssh/sshd_config:

Match User oli
   GatewayPorts yes

এর পরে, সার্ভার নির্বাহ করে কনফিগারেশনটি পুনরায় লোড করুন sudo reload ssh

সেটিংয়ের GatewayPorts yesফলে এসএসএইচ বন্য কার্ডের ঠিকানায় 8000 পোর্ট বাঁধাই করে, তাই এটি remote-machine( remote-machine:8000) এর সর্বজনীন ঠিকানায় উপলব্ধ হয় ।

যদি আপনার কাছে ওয়াইল্ডকার্ডের ঠিকানায় সমস্ত কিছু আবদ্ধ না করার অপশন থাকতে হয় তবে এতে পরিবর্তন GatewayPorts yesকরুন GatewayPorts clientspecifiedsshডিফল্টরূপে লুপব্যাক ঠিকানার সাথে আবদ্ধ হওয়ার কারণে bind_address, ওয়াইল্ডকার্ড ঠিকানাটিকে আবদ্ধ করার জন্য আপনাকে একটি খালি উল্লেখ করতে হবে :

ssh -R :8000:localhost:80 oli@remote-machine

:সামনে 8000বাধ্যতামূলক যদি GatewayPortsসেট করা হয় clientspecifiedএবং আপনাকে পাবলিক এক্সেস অনুমতি দিতে চানremote-machine:8000

প্রাসঙ্গিক ম্যানুয়াল অংশ:

SSH (1)

-আর [বাইন্ড_এড্রেস:] পোর্ট: হোস্ট: হোস্টপোর্ট:
নির্দিষ্ট করে যে দূরবর্তী (সার্ভার) হোস্টের প্রদত্ত পোর্টটি স্থানীয় দিকের প্রদত্ত হোস্ট এবং পোর্টে ফরোয়ার্ড করতে হবে। এটি দূরবর্তী দিকের পোর্ট শোনার জন্য একটি সকেট বরাদ্দ করে কাজ করে এবং যখনই এই বন্দরের সাথে কোনও সংযোগ তৈরি করা হয় তখনই সংযোগটি নিরাপদ চ্যানেলের মাধ্যমে এগিয়ে দেওয়া হয় এবং স্থানীয় মেশিন থেকে পোর্ট হোস্টপোর্টের জন্য একটি সংযোগ তৈরি করা হয়। ডিফল্টরূপে, সার্ভারে শোনা সকেট কেবল লুপব্যাক ইন্টারফেসের সাথে আবদ্ধ থাকবে। এটি একটি বাইন্ড_ড্রেস নির্দিষ্ট করে ওভাররাইড করা যেতে পারে। একটি খালি বাইন্ড_ড্রেস, বা ঠিকানা '*', নির্দেশ করে যে দূরবর্তী সকেটটি সমস্ত ইন্টারফেসে শোনা উচিত। রিমোট বাইন্ড_এড্রেস উল্লেখ করা কেবলমাত্র তখনই সফল হবে যখন সার্ভারের গেটওয়েপোর্টস বিকল্পটি সক্ষম করা হবে (দেখুন sshd_config (5))।

sshd_config (5)

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

আরো দেখুন:


7
GatewayPortsএখানে ম্যাজিক বুলেট ছিল। আমি পছন্দ করি আপনি এমন একটি সংস্করণ পেয়েছেন যা আমাকে এই নির্দিষ্ট পরিমাণে শক্তিশালী কৌশলটিকে নির্দিষ্ট ব্যবহারকারীদের মধ্যে সীমাবদ্ধ করতে দেয়।
অলি

1
আমার কাছে যা বিভ্রান্তিকর ছিল তা হ'ল গেটওয়েপোর্টস অবশ্যই সেই মেশিনে সেট করা উচিত যা বিপরীত টানেল (স্থানীয়) শুরু করতে প্রকৃত ssh কমান্ড চালায়। আমার মনে এটি একরকম যুক্তিযুক্ত ছিল যে অন্য প্রান্তটি (দূরবর্তী) কোথা থেকে সংযোগ গ্রহণ করবে সে বিষয়ে আলোচনা করবে, যেহেতু আপনি যেখানে সংযোগ করছেন এবং সেখান থেকে পুনঃনির্দেশিত হয়েছেন ততক্ষণ। আমার কাছাকাছি যেতে যুগে যুগে নিয়েছে।
আরস মাগিকা

2
@ আরসমাগিকা @ আমি আপনাকে বুঝতে পেরেছি কিনা তা নিশ্চিত নই। গেটওয়েপোর্টগুলি অবশ্যই এসএসএইচ সার্ভারে সেট করা উচিত, আপনার স্থানীয় মেশিনে নয় যা sshকমান্ডটি চালায় । অন্যান্য ক্লায়েন্টরা সার্ভারের ফরোয়ার্ড করা পোর্টগুলিতে যোগাযোগ করতে পারে কিনা তা কনফিগার করে।
লেকেনস্টেইন

এই সমাধানটির খারাপ দিক: আপনি ওয়েব সার্ভারের অ্যাক্সেস লগে ক্লায়েন্টের আইপি ঠিকানা নির্ধারণের ক্ষমতা হারাবেন। সেই উপদ্রব সমাধান করার কোনও উপায়?
টুইনকি

@ টুঙ্কি যদি আপনার ক্লায়েন্টের সঠিক আইপি ঠিকানা জানা প্রয়োজন না হয় (কেবল এটি একটি দূরবর্তী ছিল এবং "লোকালহোস্ট" নয়) এবং আপনার স্থানীয় সার্ভার ওয়াইল্ডকার্ডের ঠিকানায় শুনছেন (যেমন কোনও ঠিকানা থেকে সংযোগ গ্রহণ করছেন), তারপরে আপনি -R :8000:127.0.1.1:80(বা অন্য কোনও 127.x.x.xঠিকানায়) ফরোয়ার্ড করার চেষ্টা করতে পারেন । অন্যথায় না, আপনি দূরবর্তী আইপি ঠিকানা শিখতে পারবেন না।
লেকেনস্টেইন

14

যদি সার্ভারটি থাকে GatewayPorts no, আপনি ক্লায়েন্টের উপর আদেশ সরিয়ে ssh -g -L 8001:localhost:8000 oli@remote-machineদেওয়ার পরে সার্ভারে চালিয়ে একই ফলাফল অর্জন করতে পারেন ssh -R। এটি 8001 পোর্টে সমস্ত ইন্টারফেসে অ্যাক্সেসযোগ্য সার্ভারে লুপব্যাক পোর্টটি 8000 করে তুলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.