বিপরীত এসএসএইচ টানেল: আমি কীভাবে সার্ভারে আমার পোর্ট নম্বর পাঠাতে পারি?


12

আমার দুটি ক্লায়েন্ট এবং সার্ভার রয়েছে।

ক্লায়েন্ট (যিনি কর্পোরেট ফায়ারওয়ালের পিছনে রয়েছেন) সার্ভারের কাছে একটি বিপরীত এসএসএইচ টানেল খুলুন, যার সর্বজনীনভাবে অ্যাক্সেসযোগ্য আইপি ঠিকানা রয়েছে, এই আদেশটি ব্যবহার করে:

ssh -nNT -R0: লোকালহোস্ট: 2222 এসিকিউর @ সার্ভার.এক্স্পেল.কম

ওপেনএসএসএইচ 5.3+-তে, স্পষ্টভাবে কোনওটির জন্য কল করার পরিবর্তে "একটি উপলব্ধ পোর্ট বেছে নিন" এর 0ঠিক পরে ঘটছে -R। আমি এটি করার কারণটি হ'ল আমি ইতিমধ্যে ব্যবহৃত পোর্ট বেছে নিতে চাই না। সত্যিকার অর্থে, এখানে অনেকগুলি ক্লায়েন্ট রয়েছে যাতে একই ধরণের টানেলগুলি স্থাপন করা দরকার।

এই মুহুর্তে সমস্যাটি হ'ল সার্ভারটি কোন ক্লায়েন্ট কোন তা জানে না। যদি আমরা এই ক্লায়েন্টগুলির একটিতে (লোকালহোস্টের মাধ্যমে) আবার সংযোগ স্থাপন করতে চাই তবে আমরা কীভাবে জানব যে কোন বন্দরটি কোন ক্লায়েন্টকে বোঝায়?

আমি সচেতন যে উপরের পদ্ধতিতে ব্যবহার করার সময় ssh কমান্ড লাইনে পোর্ট নম্বরটি প্রতিবেদন করে। তবে আমি সেশনগুলি বাঁচিয়ে রাখতে অটোশ ব্যবহার করতে চাই। অটোশ তার সন্তানের প্রক্রিয়াটি কাঁটাচামচ / এক্সিকিউটের মাধ্যমে চালায়, সম্ভবত, যাতে আসল ssh কমান্ডের আউটপুটটি ইথারে হারিয়ে যায়।

অধিকন্তু, ক্লায়েন্টের কাছ থেকে দূরবর্তী বন্দরটি পাওয়ার অন্য কোনও উপায়ের কথা ভাবতে পারি না। সুতরাং, আমি ভাবছি যে সার্ভারে এই পোর্টটি নির্ধারণ করার কোনও উপায় আছে কিনা।

আমার কাছে একটি ধারণা হ'ল কোনওভাবে / ইত্যাদি / এসএসসিআরসি ব্যবহার করা হবে যা অনুমান করা একটি স্ক্রিপ্ট যা প্রতিটি সংযোগের জন্য চলে। তবে, আমি জানি না যে এখানে কীভাবে প্রাসঙ্গিক তথ্য পাবেন (সম্ভবত সেই সংযোগটি পরিচালনা করে এমন বিশেষ এসএসডি প্রক্রিয়াটির পিআইডি?) আমি কিছু পয়েন্টার পছন্দ করতাম।

ধন্যবাদ!


2
ভিপিএন কি আরও উপযুক্ত হবে না? ওপেনভিপিএন কনফিগার করতে অত্যন্ত সহজ।
বেন লেসানী - সোনাসি

আকর্ষণীয় মনে হচ্ছে। ভিপিএন সম্পর্কে আমি বেশি কিছু জানি না। ক্লায়েন্ট মেশিনটি ডিএইচসিপি ব্যবহারের জন্য কনফিগার করা থাকলেও এটি কি এমন কিছু কাজ করতে পারে?
টম

1
হ্যাঁ, এটি অন্য একটি টিউএন / ট্যাপ ইন্টারফেস বন্ধ করে দেয়, তাই অন্যান্য ইন্টারফেস অপ্রাসঙ্গিক।
বেন লেসানী - সোনাসি

@ সোনাসি, দেখে মনে হচ্ছে এই ভিপিএন জিনিসটি কৌশলটি করবে। তথ্যের জন্য ধন্যবাদ।
টম

(Debian / Ubuntu- উপর ভিত্তি করে) আমি বিশেষভাবে VPN খুলুন সঙ্গে VPN এর প্রক্রিয়ার মাধ্যমে আপনি পথনির্দেশক নীচে একটি উত্তর জুড়েছেন
বেন Lessani - Sonassi

উত্তর:


4

ভিপিএন কি আরও উপযুক্ত হবে না? ওপেনভিপিএন কনফিগার করতে অত্যন্ত সহজ। শংসাপত্র তৈরির প্রক্রিয়াটির মাধ্যমে আপনাকে গাইড করতে এখানে একটি নমুনা কনফিগারেশন এবং কয়েকটি লিঙ্ক রয়েছে:

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa
mkdir -p /etc/openvpn/ccd/client_server
touch /etc/openvpn/ipp.txt
cp -a /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca 
./build-dh
./build-key-server server
cd /etc/openvpn/easy-rsa/keys
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt

তারপরে একটি নতুন ফাইল তৈরি করুন /etc/openvpn/client_server.confএবং এতে SERVER_IP_ADDRESSযথাযথ পরিবর্তন করে নিম্নলিখিতটি রাখুন

local SERVER_IP_ADDRESS
port 8443
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 192.168.100.0 255.255.255.0
client-config-dir /etc/openvpn/ccd/client_server
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
reneg-sec 0

তারপরে ব্যবহারকারীদের সাথে একটি কী তৈরি করুন যা সংযোগ করতে চলেছে, এবং সিসিডি ডিয়ারে কনফিগার ফাইলটি তৈরি করবে

./build-key-pkcs12 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com

আইপি ঠিকানাটি অবশ্যই / / 30 সাবনেটের জন্য উপযুক্ত হতে হবে (দেখুন http://www.subnet-calculator.com/cidr.php ), কারণ প্রতি সংযোগে কেবলমাত্র 2 টি ঠিকানা (সার্ভার এবং ক্লায়েন্ট) উপলব্ধ। সুতরাং আপনার পরবর্তী উপলব্ধ ক্লায়েন্ট আইপি 192.168.100.6 এবং অন্যান্য হতে হবে।

তারপরে এখন আপনার সংযোগকারী প্রতি স্থির আইপি রয়েছে।

তারপরে the user1@domain.com.p12শেষ ব্যবহারকারীকে ফাইল সরবরাহ করুন এবং নিম্নলিখিত কনফিগারেশন ফাইলটি ব্যবহার করুন

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0

পুরো উত্তর জন্য ধন্যবাদ! যদিও আমি এই সম্পর্কে দুটি প্রশ্ন আছে। ক) ক্লায়েন্টের ifconfig- পুশ লাইনের জন্য 255.255.255.0 নির্দিষ্ট করা কাজ করছে বলে মনে হচ্ছে না, তবে আমি যদি দ্বিতীয় আইপি ঠিকানা উল্লেখ করি তবে এটি কাজ করে। কেন? এবং খ) এই পদ্ধতির মানে কি সংযোগ প্রতি 4 আইপি ঠিকানা ব্যবহার করা হয়?
টম

কিছু লিনাক্স সিস্টেমে, ifconfig- পুশ লাইনের সিনট্যাক্স আলাদা। যেমন। ifconfig-push 192.168.100.2 192.168.100.3- প্ল্যাটফর্মগুলিতে কেন এটি আলাদা হয় তা আমার কোনও ধারণা নেই। এবং হ্যাঁ, এর অর্থ ক্লায়েন্ট প্রতি 4 টি আইপি ব্যবহার করা হয় (অপব্যয়যুক্ত, তবে জন্তুটির প্রকৃতি)।
বেন লেসানী - সোনাসি

3

যদি ক্লায়েন্টগুলির প্রত্যেকের আলাদা আলাদা ব্যবহারকারীর নাম থাকে তবে আপনি netstatব্যবহারকারীর sshdপ্রক্রিয়াটি কোন পোর্টে শুনছে তা জানতে আপনি এটি ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

% sudo netstat -tlpn | grep 'sshd: mgorven@'
tcp        0      0 127.0.0.1:22220         0.0.0.0:*               LISTEN      5293/sshd: mgorven@
tcp        0      0 127.0.0.1:5120          0.0.0.0:*               LISTEN      5293/sshd: mgorven@

3

আপনি ইফেমেরাল পোর্ট সীমার পরিবর্তন করতে পারেন ( /proc/sys/net/ipv4/ip_local_port_rangeলিনাক্সের জন্য) এবং তারপরে এই ব্যাপ্তির বাইরে স্থিতি বরাদ্দকৃত পোর্টগুলি ব্যবহার করতে পারেন।


তার জন্য সাময়িকের পরিসর পরিবর্তন করার দরকার নেই। ডিফল্টভাবে ইফেমেরাল পরিসীমাটি 61000 এ শেষ হয়, সুতরাং এর উপরে হাজার হাজার উপলব্ধ পোর্ট সংখ্যা রয়েছে। আমি প্রায়শই echo $[61002+RANDOM%4532]এই ব্যাপ্তিতে কোনও পোর্ট নম্বর বাছাই করতাম ।
ক্যাস্পার্ড

2

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

উদাহরণ স্বরূপ:

ক্লায়েন্ট আদেশ: ssh -N -R0:127.0.0.1:5522 connector@example.com

সার্ভার লগ:

Jun 30 11:28:59 debsid sshd[27577]: debug1: Local forwarding listening on 127.0.0.1 port 35391

সেখানে আপনি পোর্ট নম্বর দেখতে পাবেন


0

এর আউটপুট থেকে আপনার সম্পর্কিত তথ্যটি বের করতে সক্ষম হওয়া উচিত:

lsof -i tcp

রুট হিসাবে চালান।


0

এই স্ক্রিপ্টটি সার্ভারে চালান:

sudo lsof -i -n | grep "sshd" | grep "(LISTEN)" | awk '{print $2}' | while read line; do sudo lsof -i -n | egrep $line | sed 3~3d | sed 's/.*->//' | sed 's/:......*(ESTABLISHED)//' | sed 's/.*://' | sed 's/(.*//' | sed 'N;s/\n/:/' 2>&1 ;done

আপনার দুটি সুডোর দরকার হতে পারে বা নাও হতে পারে। যদি না করেন তবে সরান।

পিএস - এটি সমাধানের একটি পরিবর্তিত সংস্করণ যা আমি কিছুক্ষণ আগে অন্য কোথাও পেয়েছি। আমি মনে করি এটি স্ট্যাকওভারফ্লো থেকে এসেছিল, তবে আমি মূল উল্লেখটি পাই না।

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