ভিপিএন সহ নেটওয়ার্ক নেমস্পেসে অ্যাপ্লিকেশনটিতে পোর্ট ফরওয়ার্ডিং


13

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

আমি কীভাবে একটি নেটওয়ার্ক নেমস্পেস সেট আপ করতে এবং এর ভিতরে ওপেনভিপিএন চালাবেন তা ব্যাখ্যা করে @ স্ন্নুকির একটি গাইড অনুসরণ করলাম

ip netns add myvpn
ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up
ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1
iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o en+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1
mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

তারপরে, আমি আমার বাহ্যিক আইপি চেক করতে পারি এবং ঠিক স্থান অনুসারে নেমস্পেসের ভিতরে এবং বাইরে বিভিন্ন ফলাফল পেতে পারি:

curl -s ipv4.icanhazip.com
<my-isp-ip>
ip netns exec myvpn curl -s ipv4.icanhazip.com
<my-vpn-ip>

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

ip netns exec myvpn sudo -u <my-user> /usr/bin/deluged
ip netns exec myvpn sudo -u <my-user> /usr/bin/deluge-web -f
ps $(ip netns pids myvpn)
 PID TTY      STAT   TIME COMMAND
1468 ?        Ss     0:13 openvpn --config /etc/openvpn/myvpn/myvpn.conf
9302 ?        Sl    10:10 /usr/bin/python /usr/bin/deluged
9707 ?        S      0:37 /usr/bin/python /usr/bin/deluge-web -f

আমি নেমস্পেসের মধ্যে থেকে এবং বাইরে থেকে 8112 পোর্টে ওয়েব ইন্টারফেস অ্যাক্সেস করতে সক্ষম হলাম যদি আমি ভ্যাপ ভিপিএন 1 এর আইপি নির্দিষ্ট করে থাকি।

ip netns exec myvpn curl -Is localhost:8112 | head -1
HTTP/1.1 200 OK
ip netns exec myvpn curl -Is 10.200.200.2:8112 | head -1
HTTP/1.1 200 OK
curl -Is 10.200.200.2:8112 | head -1
HTTP/1.1 200 OK

তবে আমি আমার সার্ভার থেকে নেমস্পেসের অ্যাপ্লিকেশনটিতে 8112 পোর্টটি পুনর্নির্দেশ করতে চাই। লক্ষ্যটি হল আমার ল্যানের ভিতরে একটি কম্পিউটারে একটি ব্রাউজার খোলা এবং http: // my-server-ip: 8112 (আমার-সার্ভার-আইপি সার্ভারের স্ট্যাটিক আইপ হিসাবে নেটওয়ার্ক ইন্টারফেসটি ইনস্ট্যান্ট করে) পেয়ে যায়

সম্পাদনা: আমি iptables বিধি তৈরি করার জন্য আমার প্রচেষ্টা সরিয়েছি। আমি যা করার চেষ্টা করছি উপরে ব্যাখ্যা করা হয়েছে এবং নিম্নলিখিত কমান্ডগুলির মধ্যে একটি HTTP 200 আউটপুট করা উচিত:

curl -I localhost:8112
curl: (7) Failed to connect to localhost port 8112: Connection refused
curl -I <my-server-ip>:8112
curl: (7) Failed to connect to <my-server-ip> port 8112: Connection refused

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

সম্পাদনা: এর tcpdump আউটপুট tcpdump -nn -q tcp port 8112। আশ্চর্যজনকভাবে, প্রথম কমান্ড একটি এইচটিটিপি 200 প্রদান করে এবং দ্বিতীয় কমান্ড অস্বীকৃত সংযোগের সাথে সমাপ্ত হয়।

curl -Is 10.200.200.2:8112 | head -1
listening on vpn0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 10.200.200.1.36208 > 10.200.200.2.8112: tcp 82
IP 10.200.200.2.8112 > 10.200.200.1.36208: tcp 145

curl -Is <my-server-ip>:8112 | head -1
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
IP <my-server-ip>.58228 > <my-server-ip>.8112: tcp 0
IP <my-server-ip>.8112 > <my-server-ip>.58228: tcp 0

সম্পাদনা: @ শৃনৌকি নিজেই আমাকে জেনেরিক iptables টিসিপি প্রক্সি ব্যাখ্যা করে একটি দেবিয়ান প্রশাসনের নিবন্ধের দিকে ইঙ্গিত করেছিলেন । হাতের সমস্যার সাথে প্রয়োগ করে, তাদের স্ক্রিপ্টটি দেখতে দেখতে এটিরকম হবে:

YourIP=<my-server-ip>
YourPort=8112
TargetIP=10.200.200.2
TargetPort=8112

iptables -t nat -A PREROUTING --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort
iptables -t nat -A POSTROUTING -p tcp --dst $TargetIP --dport $TargetPort -j SNAT \
--to-source $YourIP
iptables -t nat -A OUTPUT --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort

দুর্ভাগ্যক্রমে, ভ্যাথ ইন্টারফেসগুলির মধ্যে ট্র্যাফিক জব্দ করা হয়েছে এবং অন্য কিছুই হয়নি। তবে, @ শৃনৌকি socatটিসিপি প্রক্সি হিসাবে ব্যবহারের পরামর্শও দিয়েছেন এবং এটি নিখুঁতভাবে কাজ করছে।

curl -Is <my-server-ip>:8112 | head -1
IP 10.200.200.1.43384 > 10.200.200.2.8112: tcp 913
IP 10.200.200.2.8112 > 10.200.200.1.43384: tcp 1495

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


দাবি অস্বীকার: vethডিভাইসগুলির সাথে আমার কোনও অভিজ্ঞতা নেই (এটি খুব আকর্ষণীয় মনে করুন, যদিও ... ;-))। আপনি কি tcpdumpআগত প্যাকেটগুলি কতদূর পায় তা যাচাই করার জন্য ব্যবহার করেছেন? যদি tcpdump -i veth0কিছু না দেখায় তবে tcpdumo -i loপ্রয়োজনীয় হতে পারে।
হউক লেগেছে

আমি
tcpdump

উত্তর:


9

আমি সর্বদা আইপটিবলগুলি পুনর্নির্দেশগুলি নিয়ে সমস্যা ছিল (সম্ভবত আমার দোষ, আমি যথেষ্ট নিশ্চিত যে এটি করণীয়)। তবে আপনার মতো মামলার ক্ষেত্রে, আইপিএবলগুলি ছাড়াই ব্যবহারকারীর জমিতে এটি করা IMO এর পক্ষে সহজ।

মূলত, আপনার "ডিফল্ট" ওয়ার্কস্পেসে আপনার টিসিপি পোর্ট 8112 শুনে এবং সমস্ত ট্র্যাফিক 10.200.200.2 পোর্ট 8112 এ পুনর্নির্দেশ করা উচিত। তাই এটি একটি সাধারণ টিসিপি প্রক্সি।

এটি সকেট দিয়ে কীভাবে করা যায় তা এখানে :

socat tcp-listen:8112,reuseaddr,fork tcp-connect:10.200.200.2:8112

( প্রথম প্রক্সাইড সংযোগ বন্ধ হওয়ার পরে থামানো থেকে forkবাঁচতে বিকল্পের প্রয়োজন socat)।

সম্পাদনা : reuseaddrমন্তব্যে প্রস্তাবিত হিসাবে যুক্ত করা হয়েছে।

যদি আপনি একেবারে iptables দিয়ে এটি করতে চান তবে দেবিয়ান প্রশাসনের সাইটে একটি গাইড রয়েছে on তবে আমি socatআরও উন্নত স্টাফগুলির জন্য পছন্দ করি - যেমন আইপিভি 4 কে আইপিভি 6-তে প্রক্সিং করা, বা পুরানো জাভা প্রোগ্রামগুলিকে সুরক্ষিত পরিষেবাদিগুলিতে সংযোগ করার অনুমতি দেওয়ার জন্য এসএসএল কে স্ট্রিপ করা ...

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


1
তুমি আমার দিন টাকে সুন্দর করেছ! আমি কখনই আসি নি socatএবং এটি বেশিরভাগ সময় ধরে iptables নিয়ে যা করার চেষ্টা করছিলাম তা হুবহু সম্পাদন করে। আমি বেশ কয়েকটি অ্যাপ্লিকেশন পরীক্ষা করেছি এবং তারা সবাই নির্দোষভাবে কাজ করছে, টুন0-এর মাধ্যমে বাইরের বিশ্বের সাথে সংযুক্ত হচ্ছে, যখন এখনও ভথ 1 এর মাধ্যমে তাদের ওয়েব ইন্টারফেসে অ্যাক্সেস সরবরাহ করছে।
pskiebe

1
কিছু পরীক্ষা করার পরে আমি reuseaddrপতাকাটি যুক্ত করেছি। এটি port already in useদ্রুত উত্তরাধিকার সূত্রে শুরু করা এবং বন্ধ করার সময় ত্রুটিগুলি প্রতিরোধ করে:socat -4 TCP-LISTEN:8112,reuseaddr,fork TCP:10.200.200.2:8112
psciebe

8

মূল নেমস্পেসের সাথে নেটওয়ার্ক নেমস্পেসকে আন্তঃসংযোগ করা আমাকে সর্বদা বিরক্ত করে। আমি সাধারণত একটি নেমস্পেস তৈরি করার কারণ হ'ল আমি এটি বিচ্ছিন্ন করতে চাই। আপনি যা যা চেষ্টা করছেন তার উপর নির্ভর করে নেমস্পেসগুলি আন্তঃসংযোগ তৈরি করে সেই উদ্দেশ্যকে পরাস্ত করতে পারে।

তবে এমনকি বিচ্ছিন্নভাবে আমি এখনও এটি সুবিধার্থে নেটওয়ার্কের মাধ্যমে তা ছুঁড়ে দিতে চাই।

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

socat tcp-listen:8112,fork,reuseaddr \
  exec:'ip netns exec myvpn socat STDIO tcp-connect\:127.0.0.1\:8112',nofork

এটি 8112 পোর্টে আপনি যে কোনও নেটওয়ার্ক নেমস্পেসে চালাচ্ছেন সেখানে সংযোগের জন্য শোনেন, তারপরে সংযুক্ত ক্লায়েন্টটি নেটওয়ার্ক নেমস্পেসের ভিতরে থাকা অংশটি execচালানোর ip netns exec myvpn ...জন্য ছুটে যায় myvpn, তারপরে একবার myvpnনেটওয়ার্ক নেমস্পেসের মধ্যে এটি আবার অন্যটির সাথে দ্বিতীয় সংযোগ তৈরি করে socat



যেহেতু আমি লিনাক্স প্রশাসনের সাথে খুব বেশি অভিজ্ঞ নই এবং এটি অনুসন্ধানে আমার কিছুটা সময় ব্যয় হয়েছিল: :একক উদ্ধৃতিতে উভয় অক্ষরকে এড়িয়ে চলা নিশ্চিত করুন নইলে আপনি কোনও ভুল ... wrong number of parameters (2 instead of 1)(2 বা 3) বলে চালাতে পারেন । অন্যথায়: দুর্দান্ত কাজ! বিশাল আপনাকে ধন্যবাদ!
ইগোর

2

জলপ্লাবনের জন্য এখানে আমার সমাধান। Iptables প্রয়োজন নেই। পদক্ষেপ এখানে:

  1. আপনার ওপেনভিএনপি টানেলটি শুরু করুন
  2. নেমস্পেস তৈরি করুন এবং আপনার ওপেনভিএনপি টানেলটি এখানে আনুন:
আইপি নেটগুলি $ এনএস যোগ করে
# টিউএন আসার অপেক্ষা করুন
যখন [[$ (আইপি রুট | গ্রেপ $ টিউন | ডাব্লুসিএল)) == 0]]; ঘুমাও 1; সম্পন্ন
MY_IP = $ (আইপি সংযোজন শো show TUN | গ্রেপ ইনসাইট | কাট-ডি '' -f6 | কাট-ডি '/' -ফ 1)
# আপনি ওপেনভিএনএন সংযোগের জন্য গেটওয়ে আইপি বের করার উপায়টি আলাদা হতে পারে
GATEWAY_IP = $ MY_IP
# জেল আমার $ টিউন (ভিপিএন ইন্টারফেস) নামের স্থানটিতে
আইপি লিঙ্ক সেট $ টিউন নেট $ এনএস
# একটি সাবনেট দিয়ে ইন্টারফেসটি নিয়ে আসুন (ভিপিএন সার্ভারের দ্বারা আমাকে প্রদত্ত সমতুল্য)
ip নেটগুলি এক্সিকিউটিভ করুন $ এনএস ifconfig $ TUN $ MY_IP / 24 আপ
# লুপব্যাক আনুন
ip নেটগুলি এক্সিকিউটিভ করুন $ এনএস ifconfig লো 127.0.0.1/8 আপ
# দূরবর্তী গেটওয়ে সেট আপ করুন (আপনার পয়েন্টটোপয়েন্ট ভিপিএন আইপি ঠিকানা)
আইপি নেটগুলি এক্সিকিউটিভ $ এনএস রুট ডিফল্ট gw $ GATEWAY_IP যোগ করে
  1. আপনার ডিফল্ট নেমস্পেস এবং আপনি যেটির তৈরি করেছেন তার মধ্যে ভਥ সংযোগ স্থাপন করুন:
# নেমস্পেসের মধ্যে যোগাযোগের জন্য ভਥ ইন্টারফেস সেট আপ করুন
আইপি লিঙ্কটি veth0 ধরণের Veth পিয়ারের নাম veth1 যুক্ত করুন
# দ্বিতীয় স্থানটি আপনার নেমস্পেসে সরান
আইপি লিঙ্কটি ভেট 1 নেট set এনএস
# অব্যক্ত আইপি পরিসীমা থেকে প্রথম ভাতে আইপি দিন
ifconfig veth0 10.1.1.1/24 আপ
# এবং দ্বিতীয়টি
ip নেটগুলি এক্সিকিউটিভ করুন $ এনএস ifconfig veth1 10.1.1.2/24 আপ
# টুডো: ভ্যান 1 এবং এথ ইন্টারফেসের মধ্যে একটি ব্রিজ স্থাপন করুন যাতে এটি ল্যানের সাথে যোগাযোগ করতে পারে
# ডিএনএস ক্লায়েন্ট সেট আপ করুন। আইপি নেটগুলি এই ফাইলটি ব্যবহার করে /etc/resolv.conf অনুকরণ করবে:
এমকেডির -পি / ইত্যাদি / নেট / $ এনএস
প্রতিধ্বনি "নেমসারভার 8.8.4.4"> /etc/netns/$NS/resolv.conf
  1. আপনার ডিফল্ট নেমস্পেসে আপনার বিভ্রান্ত del NS এবং আপনার ডুয়েল-ওয়েবে চালান। 10.1.1.2 ভ্যাথ আইপি ঠিকানায় পয়েন্ট প্লাবন-ওয়েব, যেখানে deluged এর সংযোগের জন্য শুনবে।

ভাল খবর! আপনার জলদি ওয়েব আপনার হোম নেটওয়ার্কে অবাধে অ্যাক্সেসযোগ্য অবস্থায় আপনি ভিপিএন এর পিছনে সুরক্ষিত হয়ে পড়েছেন


2

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

sudo ip netns exec myvpn su -c "ssh -N -L /tmp/myunixsock:localhost:8112 localhost" $USER &
ssh_pid1=$!
ssh -N -L localhost:8112:/tmp/myunixsock localhost &
ssh_pid2=$!

পরিষ্কার কর:

sudo kill $ssh_pid1
kill $ssh_pid2
rm /tmp/myunixsock

প্রথমটি ssh -N -LMyvpn নেমস্পেসের মধ্যে শুরু হয়। এটি একটি ইউনিক্স-ডোমেন সকেট তৈরি করে /tmp/myunixsockএবং এতে শুনবে। আগত সংযোগগুলি লোকালহোস্টে পাঠানো হয়: 8112 (মাইভিপিএন নেমস্পেসের অভ্যন্তরে)। দ্বিতীয়টি ssh -N -Lডিফল্ট নেমস্পেসে শুরু হয়। এটি শ্রবণকারী টিসিপি পোর্ট তৈরি করে এবং ইউনিক্স-ডোমেন সকেটে আগত সংযোগগুলি ফরোয়ার্ড করে।

এটি লক্ষ করা উচিত যে এটি কাজ করার জন্য, sshআপনার নেটওয়ার্কের নেমস্পেসটি যদি এটি ইতিমধ্যে না থাকে তবে (এবং পাসওয়ার্ডহীন পাব্বি অপারেশন সহায়ক): কাজ করা দরকার:

sudo ip netns exec myvpn ip link set up dev lo
sudo ip netns exec myvpn /usr/sbin/sshd -o PidFile=/run/sshd-myvpn.pid
ssh-copy-id localhost
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.