ভ্যাগ্র্যান্ট রিভার্স পোর্ট ফরওয়ার্ডিং?


121

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

ভ্যাগ্র্যান্টের config.vm.forwarded_portপ্যারামিটার হোস্টে একটি পোর্ট খুলবে এবং অতিথির কাছে ডেটা প্রেরণ করবে। তবে আমি কীভাবে অতিথির উপর একটি বন্দর খুলব এবং হোস্টের কাছে ডেটা প্রেরণ করব? (এটি এখনও পোর্ট ফরওয়ার্ডিং, তবে বিপরীত দিকে রয়েছে))


ভ্যাগ্র্যান্ট যেহেতু এসএসএইচ ব্যবহার করছে এটি তাত্ত্বিকভাবে সম্ভব এবং রুবি এসএসএইচ বাস্তবায়ন মণি এটি সমর্থন করে তবে ভ্যাগ্র্যান্ট ডকুমেন্টে এর আগে আর কিছুই দেখেনি।
সেমিউর 2

আরও দেখুন: stackoverflow.com/q/19933550/1157054
Ajedi32

উত্তর:


134

আপনি যখন চালান vagrant ssh, এটি আসলে এই অন্তর্নিহিত কমান্ডটি ব্যবহার করে:

ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1

এসএসএইচ -R guestport:host:hostportবিকল্পের সাথে আপনার যে দিকনির্দেশনা চান তাতে ফরওয়ার্ডিং পোর্টগুলিকে সমর্থন করে । সুতরাং, আপনি যদি 12345অতিথির বন্দরে সংযোগ স্থাপন করতে এবং এটিতে ফরোয়ার্ড করতে localhost:80চান তবে আপনি এই আদেশটি ব্যবহার করবেন:

ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1

যেমন ইয়েরো সঠিকভাবে মন্তব্য করেছে আপনি কমান্ডটিও ব্যবহার করতে পারেন vagrant ssh -- -R 12345:localhost:80যা আরও সংক্ষিপ্ত কমান্ডে একই প্রভাব ফেলে।


67
এবং আপনি এটি আরও সহজভাবে ব্যবহার করে vagrant ssh -- -R 12345:localhost:80 এটি চালিয়ে যেতে পারেন এটি ssh বিকল্পের বাক্য অনুসরণ করে সিন্ট্যাক্স -R [bind_address:] পোর্ট: হোস্ট: হোস্টপোর্ট , যেখানে প্রথম নম্বরটি অতিথি মেশিনের ভিতরে শুনতে পোর্ট নম্বর, এবং শেষ দুটি পরিষেবাটির ঠিকানা হোস্ট মেশিন থেকে দৃশ্যমান হিসাবে।
ইয়েরো

1
আমি যতদূর বুঝতে পেরেছি যে বিপরীত ফরওয়ার্ডিং কেবলমাত্র এসএসএস শেলের মধ্যেই কাজ করে। আমি মনে করি ড্যান ফাবুলিচ ভিএমএমে না গিয়ে সমাধান সমাধান করতে চেয়েছিলেন।
অলপ

2
@ অ্যালবাম আমি বিশ্বাস করি এটি পুরো সিস্টেমের জন্য উপলব্ধ একটি বন্দর, কেবল এসএসএস প্রক্রিয়াতে উপলব্ধ নয়। আমার জন্য কাজ করে!
হেনরিক হিমবুর্গের

1
যারা পুটিং ব্যবহারের জন্য,, SSH / কনফিগারেশন GUI এর টানেল ধারা (কমান্ড লাইনে -L) উভয় দূরবর্তী পোর্ট ফরওয়ার্ড (অত: পর কমান্ডে -R) অথবা স্থানীয় পোর্ট ফরওয়ার্ড পারবেন
Titou

3
বা যদি আপনার একাধিক vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
ভিজেন্টর

100

Vagrant: Up and Runningভ্যাগ্র্যান্টের স্রষ্টার দ্বারা রচিত বইটিতে ( প্রকাশের তারিখ: 12 জুন, 2013) তিনি গেস্ট মেশিনে হোস্ট মেশিনে চলমান পরিষেবাগুলি অ্যাক্সেস করা সম্ভব নয় বলে উল্লেখ করেছিলেন।

ব্যবহারের পরিবর্তে Forwarded Ports, আপনি ব্যবহার করে একটি ব্যক্তিগত নেটওয়ার্ক সেট আপ করতে পারেন Host-Only Networks

  • Host-Only Networksওভার ব্যবহারের পেশাদারForwarded Ports

    1. অতিথি মেশিনগুলি হোস্ট মেশিনে চলমান পরিষেবাগুলিতে অ্যাক্সেস করতে পারে

      এই বৈশিষ্ট্যটি আপনার সমস্যার সমাধান করবে।

    2. অতিথি মেশিনগুলি অন্যান্য অতিথি মেশিনে চলমান পরিষেবাগুলিতে অ্যাক্সেস করতে পারে

      এই বৈশিষ্ট্যটি একাধিক মেশিনে আরও সঠিকভাবে উত্পাদন পরিবেশের নকল করতে পরিষেবাগুলিকে পৃথক করতে খুব দরকারী।

    3. নিরাপদ

      অতিথি মেশিনগুলিতে চলমান পরিষেবাগুলি অ্যাক্সেস করার জন্য বাইরের মেশিনগুলির কোনও উপায় নেই

    4. কম কাজ

      প্রতিটি একক কনফিগার করার প্রয়োজন নেই Forwarded Port


  • কিভাবে কনফিগার করতে হয় Host-Only Networks

    config.vm.network :"hostonly", "192.168.0.0" # ভ্যাগ্রান্ট সংস্করণ # 1

    config.vm.network :private_network, ip: "192.168.0.0" # ভ্যাগ্রান্ট সংস্করণ # 2

    আপনার এই লাইনটি থাকার Vagrantfileফলে স্থিতিশীল আইপি ঠিকানা রয়েছে এমন একটি ব্যক্তিগত নেটওয়ার্ক তৈরির জন্য যোজনাকে নির্দেশ দেওয়া হবে:192.168.0.0

    হোস্টের আইপি ঠিকানা সর্বদা একই আইপি ঠিকানা হয় তবে চূড়ান্ত অক্টেটের সাথে 1. হয়। পূর্ববর্তী উদাহরণে, হোস্ট মেশিনের আইপি ঠিকানা থাকবে 192.168.0.1


2
একই শিরাতে (এছাড়াও থেকে Vagrant: Up and Running), আপনি একটি ব্রিজযুক্ত নেটওয়ার্ক সেট আপ করতে পারেন। একটি ব্রিজযুক্ত নেটওয়ার্কে, আপনার স্থানীয় নেটওয়ার্কের অন্যান্য মেশিনগুলি আপনার ভার্চুয়াল মেশিনটি অ্যাক্সেস করতে পারে এবং এর বিপরীতে। আইপি অ্যাড্রেসটি ডিএইচসিপি এর মাধ্যমে নির্ধারিত ifconfigহওয়ায় এর আইপি ঠিকানাটি খুঁজতে আপনাকে ভার্চুয়াল মেশিনে প্রবেশ করতে হবে।
নিউক্লিটিড

28
আপনি যখন কনফিগার.ভি.এম.টওয়ার্ক সেটআপ করেন: ব্যক্তিগত_নেটওয়ার্ক, আইপি: "192.168.50.4" এর অর্থ অতিথি হোস্টটি "192.168.50.1" এ গিয়ে হোস্টটি অ্যাক্সেস করবেন তা এখানে তথ্যের মূল বিট। আমি কোথাও এই ছোট্ট টিডিবিট ডকুমেন্টেড পাই না।
নিউক্লিওন

1
আমি 192.168.0.0কাজ করি না এর উত্তর ঠিকানা ব্যবহার করে দেখতে পেলাম - হোস্ট মেশিনটি কার্লিং / পিং করার ফলে সংযোগ টি / ও হয়েছে। @ নিউক্লিয়নের ঠিকানা ব্যবহার করে (বিষয়টিতে ভ্যাগ্রান্ট ডক্সের সাথে সামঞ্জস্যপূর্ণ ) বিজ্ঞাপন হিসাবে কাজ করেছিল।
মার্কডিজভার

8
@ মিংয়ু না - আপনার কনফিগারেশন লাইনটি ব্যবহার করে config.vm.network :private_network, ip: "192.168.0.0"এবং হোস্টটিকে কার্লিং / পিং করা সংযোগের সময়সীমা ছাড়িয়ে 192.168.0.1যাওয়ার ফলস্বরূপ। নেটওয়ার্কটি সমাধানের জন্য কনফিগার 192.168.50.4করা অর্থাৎ হোস্ট উপলব্ধ 192.168.50.1
মার্কডিজিভারগুলি

3
"192.168.0.0" একটি ভাল উদাহরণ নয়, xxx0 সাধারণত সম্প্রচারের জন্য হয়
সংখ্যা 5

73

অতিথি ওএসের অভ্যন্তরে ডিফল্ট গেটওয়ের মাধ্যমে আপনি হোস্ট মেশিনে পোর্টগুলি অ্যাক্সেস করতে পারেন। (যার সাধারণত একটি আইপি থাকে 10.0.2.2))

উদাহরণস্বরূপ, আপনার হোস্ট মেশিনে 8000 পোর্টে যদি কোনও ওয়েবসারভার চালু থাকে ...

echo 'Hello, guest!' > hello
python -m SimpleHTTPServer 8000

আপনি এটিকে ভ্যাগ্র্যান্ট ভিএম এর ভিতরে থেকে অ্যাক্সেস করতে পারবেন 10.0.2.2:8000(প্রদত্ত 10.0.2.2অতিথির ডিফল্ট গেটওয়ের আইপি):

vagrant ssh
curl http://10.0.2.2:8000/hello # Outputs: Hello, guest!

অতিথির ওএসের ভিতরে ডিফল্ট গেটওয়ের আইপি খুঁজতে, চালান netstat -rn(বা ipconfigউইন্ডোজ অতিথির উপর) এবং সন্ধানের জন্য গন্তব্য আইপি 0.0.0.0(বা উইন্ডোজে "ডিফল্ট গেটওয়ে" লেবেলযুক্ত ফিল্ড) এর সন্ধান করুন:

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.33.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1

আপনি এই আইপি সাথে প্রোগ্রাম্যাটিকভাবে এক্সট্রাক্ট করতে পারেন netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2

উত্স: যোদ্ধা ভার্চুয়ালবক্স মেশিন থেকে হোস্ট পোস্টগ্রিএসকিউএল এর সাথে কীভাবে সংযুক্ত হবেন ; ভার্চুয়ালবক্স অতিথি ওএস থেকে হোস্ট মেশিনে সংযোগ স্থাপন করবেন?


আমি এই সমাধানটি খুব পছন্দ করি কারণ এটি আমার বর্তমান যোজনা এসএস সেশনটি বন্ধ না করেই কেবল কাজ করেছিল। ধন্যবাদ!
রুবিক্স

ব্রাভো! এটি হ'ল আমি যা খুঁজছিলাম
খান শাহরুখ

অসাধারণ! ifconfigএবং ip addressআমার যা প্রয়োজন তা পাচ্ছিল না, তবে netstat -rnকরেছে।
geerlingguy

9

~/.ssh/configহোস্ট মেশিনে আপনার নিম্নলিখিত যুক্ত করুন :

Host 127.0.0.1
RemoteForward 52698 127.0.0.1:52698

এটি আপনাকে ভ্যাগ্র্যান্ট থেকে হোস্ট মেশিন পোর্ট 52698 এ কোনও পরিষেবা অ্যাক্সেস করতে দেয়, যতক্ষণ না আপনি মাধ্যমে লগ ইন করেছেন vagrant ssh

আপনি নিশ্চিত করতে পারেন যে এটি netstat -ltঅসম্পূর্ণ ভিএম-তে চালিয়ে এবং নিম্নলিখিত লাইনে একটি দ্রষ্টব্য রেখে:

tcp      0    0 localhost:52698         *:*                 LISTEN
tcp6     0    0 ip6-localhost:52698     [::]:*              LISTEN

2
+1 এটি আমার জন্য একটি বিশাল সহায়তা ছিল। আমি আমার ভিজাগর বাক্সটি আমার হোস্ট বক্সে চলমান অ্যান্ড্রয়েড এমুলেটর শুনতে শুনতে সক্ষম হওয়ার জন্য 5037 পোর্টের পরিবর্তে প্রদত্ত পাঠ্য যুক্ত করেছি।
লুঠ করুন

2

আমি আমার হোস্ট মেশিনে তার স্থানীয় আইপি ঠিকানা (এটির লুপব্যাক ঠিকানা নয়) এর মাধ্যমে চলমান পরিষেবাগুলি অ্যাক্সেস করতে পারি। আমি পোর্ট 80 (এবং তারপরে 987 curlবন্দরটিতে ) এবং 197.45.0.10:80 এবং 197.45.0.10:987 (প্রকৃত আইপি ঠিকানাটি নির্দোষদের রক্ষার জন্য পরিবর্তিত ) এ HTTP সার্ভার তৈরি করে পরীক্ষা করেছি । এটি উভয় সময়ই কাজ করেছে, এবং আমার কোনও বিশেষ ভ্যাংগার কনফিগারেশন নেই (পাবলিক_ নেটওয়ার্ক, কোনও ফরওয়ার্ড_পোর্ট) নেই এবং পুটিটিওয়াইয়ের মাধ্যমে আমার কাছে কিছু বন্দর রয়েছে, আমার কাছে 80 এবং 987 ফরওয়ার্ড নেই p তাই সম্ভবত হোস্ট মেশিনের স্থানীয় বা পাবলিক আইপি ঠিকানা ব্যবহার করার চেষ্টা করুন।

এবং যদি আপনি অন্য অতিথির একজন অতিথির অসম্পূর্ণ দৃষ্টান্ত অ্যাক্সেস করতে (এসএসএস) করতে চান তবে আপনি public_network22 পোর্ট থেকে এইভাবে ফরওয়ার্ডিং সক্ষম করতে পারবেন Vagrantfile:

config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200

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

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