নির্দিষ্ট নেটওয়ার্ক ইন্টারফেসে ইউনিক্স প্রোগ্রামটি যুক্ত করুন


40

প্রশ্ন: একটি নির্দিষ্ট নেটওয়ার্ক ইন্টারফেসের মাধ্যমে নেটওয়ার্কের অ্যাক্সেসের সীমাবদ্ধ তা নিশ্চিত করার সময় আমি কীভাবে একটি প্রোগ্রাম চালু করব?

কেস: আমি একই আইপি (192.168.1.1) দিয়ে দুটি স্বতন্ত্র মেশিন অ্যাক্সেস করতে চাই, তবে দুটি পৃথক নেটওয়ার্ক ইন্টারফেসের মাধ্যমে (অধ্যায়ের 1 এবং এথ 2) অ্যাক্সেসযোগ্য।

উদাহরণ:

net-bind -D eth1 -exec {Program 192.168.1.1}
net-bind -D eth2 -exec {Program 192.168.1.1}

উপরে আমি চাই কি একটি পড়তা, হার্ডওয়্যার দ্বারা অনুপ্রাণিত বাঁধাই মাধ্যমে সম্পন্ন করা হয় primusrun এবং optirun

চ্যালেঞ্জ: সম্পর্কিত থ্রেডে যেমন পরামর্শ দেওয়া হয়েছে , ব্যবহৃত ইন্টারফেসগুলি প্রোগ্রাম দ্বারা নির্বাচিত হয় না, বরং কার্নেল দ্বারা বেছে নেওয়া হয় (সুতরাং উপরের উদাহরণে প্রাক-বাঁধার সিনট্যাক্স)।

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


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

হ্যাঁ, দুটি পৃথক নেটওয়ার্ক, দুটি একই আইপিতে রয়েছে। আমি নিশ্চিত না যে আমি দৃশ্যমান ইন্টারফেসগুলিকে সীমাবদ্ধ রাখতে চাই না, কেবলমাত্র কোনটি ডিফল্ট হিসাবে ব্যবহার করব তা নির্দেশ করুন? :)
স্কিন

3
আপনি যা জিজ্ঞাসা করছেন এটি একটি ভাল কারণের জন্য কঠিন: একই আইপি ডোমেন ব্যবহার করে দুটি নেটওয়ার্ক পরস্পর সংযুক্ত থাকা একই সংখ্যার সাথে দুটি তলা বিশিষ্ট একটি বিল্ডিংয়ে লিফট রাখার মতো। আইপি পরিসীমা হ'ল আউটপুট ইন্টারফেস নয় এমন ডোমেনটি চিহ্নিত করে। তবুও iptables সহ আপনার ত্রুটিযুক্ত নেটওয়ার্ক ডিজাইনের চারপাশে কাজ করার একটি উপায় থাকতে হবে।
দীর্ঘমেয়াদে

আমি আমার সিস্টেমকে দুটি পৃথক স্থানে স্থাপনা কাঠামোর সাথে সংযুক্ত করছি, কারণ এই ধরনের অবকাঠামোগত কখনও ইন্টারেক্ট করার জন্য ডিজাইন করা হয়নি, এবং সেইজন্য নেটওয়ার্ক ডিজাইন সেই ক্ষেত্রে ত্রুটিযুক্ত।
স্কিন

1
NAT এর প্রতি আমার যুক্তিটি ছিল যে পুরো ঠিকানার জায়গাগুলি সাধারণত NAT এর পিছনে লুকানো থাকে এবং আমি দুটি NAT'ted অবকাঠামোগত সংযোগ দিলে সংঘর্ষ হয়। - আমি পরিকাঠামো সংশোধন করার মতো অবস্থানে নেই। - আমি ভার্চুয়াল নেটওয়ার্ক ইন্টারফেস জোড়গুলির সাথে নেটওয়ার্ক নেমস্পেসগুলি ব্যবহার করার চেষ্টা করেছি (একটি নেমস্পেসের মধ্যে একটি, রুট নেমস্পেসের মধ্যে একটি) শারীরিক ইন্টারফেসে রুট নেমস্পেসকে ব্রিজ করা, এবং নেটওয়ার্ক নেমস্পেসের মধ্যে প্রোগ্রাম চালানো। - এটি কাজ করছে বলে মনে হচ্ছে, তবে আমি রুট নেমস্পেসের বাইরে অ্যাক্সেস পাচ্ছি না (যেমন মেশিনের বাইরে কোনও অ্যাক্সেস নেই)।
স্কিন

উত্তর:


35

লিনাক্সের জন্য, ইতিমধ্যে সুপারউসারে এর উত্তর দেওয়া হয়েছে - বিভিন্ন প্রক্রিয়াগুলির জন্য কীভাবে বিভিন্ন নেটওয়ার্ক ইন্টারফেস ব্যবহার করবেন?

সর্বাধিক জনপ্রিয় উত্তরটি LD_PRELOADএকটি প্রোগ্রামের জন্য নেটওয়ার্ক বাইন্ডিং পরিবর্তন করতে একটি কৌশল ব্যবহার করে তবে আধুনিক কার্নেলগুলি 'নেটওয়ার্ক নেমস্পেসস' নামে অনেক বেশি নমনীয় বৈশিষ্ট্য সমর্থন করে যা ipপ্রোগ্রামের মাধ্যমে প্রকাশিত হয় । এই উত্তরটি কীভাবে এটি ব্যবহার করবেন তা দেখায়। আমার নিজের পরীক্ষাগুলি থেকে আমি নিম্নলিখিতগুলি (মূল হিসাবে) করেছি:

# Add a new namespace called test_ns
ip netns add test_ns

# Set test to use eth0, after this point eth0 is not usable by programs
# outside the namespace
ip link set eth0 netns test_ns

# Bring up eth0 inside test_ns
ip netns exec test_ns ip link set eth0 up

# Use dhcp to get an ipv4 address for eth0
ip netns exec test_ns dhclient eth0

# Ping google from inside the namespace
ip netns exec test_ns ping www.google.co.uk

নেটওয়ার্ক নেমস্পেসগুলি কিছুটা হলেও আদেশ unsharensenterকমান্ডের সাহায্যে পরিচালনা করাও সম্ভব । এটি আপনাকে পিআইডি, ব্যবহারকারী এবং মাউন্ট পয়েন্টের জন্য পৃথক স্পেস তৈরি করতে দেয়। আরও কিছু তথ্যের জন্য দেখুন:


"এই পয়েন্টের পরে এথ 0 নামস্থলের বাইরের প্রোগ্রামগুলির দ্বারা ব্যবহারযোগ্য নয়" - সুতরাং আমি এটি করার ক্ষেত্রে অন্যান্য সমস্ত সমস্যার জন্য সংযোগটি টানছি?
স্কিন

1
@ স্কিন, হ্যাঁ, সম্ভবত আপনি এমন একটি ইন্টারফেসটি চাপবেন যা অন্য কোনও প্রোগ্রাম নেমস্পেসের মধ্যে ব্যবহার করছে না এবং আপনার মূলটিকে সাধারণত ব্যবহার করবে।
গ্রিম

1
@Graerne; উভয় ইন্টারফেস সক্রিয়ভাবে ব্যবহৃত হচ্ছে; ইন্টারফেসগুলি নেওয়ার সামর্থ নেই।
স্কেইন

এবং ডিফল্ট গেটওয়ে দিয়ে কি? wvdialউদাহরণস্বরূপ এটি একেবারে সেট আপ করার মতো মনে হচ্ছে না ... সুতরাং এটি নিজের নামস্থানেই সংজ্ঞায়িত করতে হবে
ফ্ল্যাশ থান্ডার

কীভাবে এটিকে পূর্বাবস্থায় আনতে হয় তার জন্য আপনি কী নির্দেশাবলী অন্তর্ভুক্ত করতে পারেন? আপনি কি ip netns remove test_nsআবার স্বাভাবিক অবস্থায় ফিরে যাবেন? নাকি বিশেষ কিছু করতে হবে?
মাল্টিহান্টার

17

আমি গ্রমের উত্তর গ্রহণ করছি; আমার সমস্যা সমাধানের জন্য তাঁর পরামর্শে আমি যে পরিবর্তনগুলি করেছি তা ব্যাখ্যা করার জন্য এটি কেবল একটি ফলোআপ।

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

# Create the eth0 network namespace
ip netns add eth0_ns

# Create the virtual network pair
ip link add v_eth0a type veth peer name v_eth0b

# Move v_eth0a to the eth0_ns namespace, the virtual pair is now split
# between two network namespaces.
ip link set v_eth0a netns eth0_ns

# Configure the ends of the virtual network pairs
ip netns exec eth0_ns ifconfig v_eth0a up {{NAMESPACE_IP}} netmask {{NAMESPACE_NETMASK}}
ifconfig v_eth0b up {{ROOT_NS_IP}} netmask {{ROOT_NS_NETMASK}}

# Setup routing from namespace to root
ip netns exec eth0_ns route add default gw {{ROOT_NS_IP}} dev v_eth0a

# Setup IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s {{ROUTE_SOURCE}}/24 -o {{NETWORK_INTERFACE}} -j SNAT --to-source {{ROUTE_TARGET}}

Eth0 এবং eth1 এর জন্য ইন্টারফেসগুলি একবার সেট আপ হয়ে গেলে, তাদের নিজ নিজ নেমস্পেসস eth0_ns এবং eth1_ns সহ প্রোগ্রামগুলি নির্দিষ্ট ইন্টারফেসের মাধ্যমে কার্যকর করা যেতে পারে;

ip netns exec eth0_ns fish
ip netns exec eth1_ns fish

4
সাবাশ! আমি মনে করি আপনি একটি সেতু ডিভাইসও তৈরি করতে পারেন এবং ডিফল্ট নেমস্পেস এবং কোনও শারীরিক ডিভাইসের সাথে ভার্চুয়াল জুটি ব্রিজ করতে পারেন। যদিও এটি সমান দেখাচ্ছে looks
গ্রিম

1
আমি ভার্চুয়াল এবং শারীরিক ডিভাইসটি ব্রিজ করার চেষ্টা করেছি; আমি সেই সমাধানটি ব্যবহার করে বাহ্যিক নেটওয়ার্কে পৌঁছতে পারিনি।
স্কিন

2
আমি করেছি, তবে কেবল নতুন নামস্থান থেকে। আমি মনে করি আমার যে সমস্যাটি ছিল তা নেটওয়ার্ক ম্যানেজারের সাথে সম্পর্কিত ছিল, তবে আমি এটি খুঁজে পাইনি বা আমার উত্তরটি আপডেট করে ফেলতাম।
গ্রিম

আমার একই সমস্যা আছে, তবে আমি সেই সমাধানটি ব্যবহার করতে ব্যর্থ হয়েছি। শেষ ধাপে exactly {ROUTE_SOURCE}} এবং {{ROUTE_TARGET?? এ ঠিক কী প্রবেশ করা উচিত?
litov

@ গ্র্যাম, কমপক্ষে উবুন্টুতে আমি এখানেdhclient <bridge> প্রতি ইস্যু করে নামস্থান এবং বিশ্বব্যাপী নেমস্পেস উভয়ই আবার সংযোগ পেতে সক্ষম হয়েছি ।
ক্রিস হান্ট

4

সমাধান আই: একটি নির্দিষ্ট গ্রন্থাগার প্রিলোড করা

  • অ্যাপ-রুট-জেল : ইন্টারফেস গেটওয়ে জোর করার জন্য ld_preload ব্যবহার করুন (দুর্দান্ত ধারণা কিন্তু মূলের প্রয়োজন বা চিহ্নগুলির দক্ষতা প্রয়োজন) নোটগুলি বেলোতে বিশদভাবে ব্যবহার করা হয়েছে

  • প্রক্সিবাউন্ড : একটি নির্দিষ্ট অ্যাপ্লিকেশনটিতে প্রক্সি জোর করার জন্য ld_preload ব্যবহার করুন (এটি ইন্টারফেসের পরিবর্তে প্রক্সি ব্যবহার করছে)

  • ফোর্স-বাইন্ড : অনেকগুলি বৈশিষ্ট্য রয়েছে তবে বাইন্ড লিক (নির্ভরযোগ্য নয়)

  • বাইন্ড-ইন্টারফেস-আইপি : খুব সাধারণ এবং ফুটো সংযোগগুলি (নির্ভরযোগ্য নয়)

  • বাইন্ড-আইপি : উপায় খুব সহজ এবং লিক সংযোগগুলি (নির্ভরযোগ্য নয়)

সমাধান II: লিনাক্স ব্যবহারকারী স্থান

  • ক্লাসিক লিনাক্স ব্যবহারকারী স্পেস আইপি-নেটস : দুর্দান্ত সমাধান তবে মূল এবং ইন্টারফেসের প্রয়োজন কেবলমাত্র একটি একক ব্যবহারকারীর স্পেসে

  • ফায়ারজেল : ফায়ারজেল কোনও অ্যাপ্লিকেশনকে একটি নির্দিষ্ট নেটওয়ার্ক ব্যবহার করতে বাধ্য করতে পারে তবে সামঞ্জস্যতা সীমিত (উদাহরণ এটি সুরের ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ নয়)। ফায়ার জেলের মূল প্রয়োজন হয় নাfirejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command

  • নেটনের সাহায্যে ফায়ারজেল : ফায়ারজেল একটি অ্যাপ্লিকেশনকে একটি নির্দিষ্ট ব্যবহারকারীর স্পেস ব্যবহার করতে বাধ্য করতে পারে যা আলাদাভাবে তৈরি করা হয়েছিল, এটি আমাদের মূল ছাড়াই স্পেসের নামকরণ করুকfirejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command

  • মাস্ক্রেড এবং ব্রিজ সহ ফায়ারজেল: ফায়ারজেল অ্যাপ্লিকেশনগুলিকে মাস্ক্রেডের সাথে একটি নির্দিষ্ট ইন্টারফেস ব্যবহার করতে একটি অ্যাপ্লিকেশনকে জোর করতে পারে , এটি দুর্দান্ত এবং মূলের প্রয়োজন হয় না তবে এটি ip_forward প্রয়োজন এবং এটি সুরক্ষা প্রভাব নির্দেশ করতে পারেfirejail --net=br0 firefox

সমাধান III: লিনাক্স iptables

Iptables এই উদ্দেশ্যে ব্যবহার করা যেতে পারে তবে এটি ip_forward প্রয়োজন এবং এটি সঠিকভাবে কনফিগার করা না থাকলে সুরক্ষা প্রভাব বোঝাতে পারে, উদাহরণ 1 , উদাহরণ 2 , উদাহরণ 3 , উদাহরণ 4

সমাধান (প্রথম, দ্বিতীয় এবং তৃতীয়) নোট:

Wireguard

যদি আপনি কোনও ভিপিএন (বিশেষত ওয়্যারগার্ড) ব্যবহার করে থাকেন এবং আপনি এই সমাধানটি একটি ওয়্যারগার্ড ইন্টারফেসে ব্যবহার করতে চান ( ব্যবহারকারীর স্পেস সহ ওয়্যারগার্ড ) আপনি কোনও ডাব্লুজি ইন্টারফেস যুক্ত একটি ইউজার স্পেস তৈরি করার জন্য লিঙ্কযুক্ত নির্দেশ অনুসরণ করতে পারেন (এবং এইভাবে কোনও ভিপিএন ইন্টারফেসে সীমাবদ্ধ) ) এছাড়াও firejail --netns=containerএটি রুট ছাড়াই ব্যবহারকারীর স্থান ব্যবহার করতে সক্ষম হতে একত্রিত হতে পারে।

ইন্টারফেস গেটওয়ে কীভাবে সন্ধান করবেন

গেটওয়েটি সন্ধানের জন্য এখানে অনেকগুলি সমাধান রয়েছে এখানে কয়েকটি আদেশ রয়েছে যা ব্যবহৃত গেটওয়েটি সন্ধানের অনুমতি দেয়

$ route
$ route -n
$ ip rule list
$ ip route show
$ netstat -rn
$ cat /etc/network/interfaces
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
$ traceroute www.google.com
$ ip route show 0.0.0.0/0 dev eth0

অ্যাপ-রুট-জেল কীভাবে ব্যবহার করবেন

  • অ্যাপ-রুট-জেল তৈরি করুন
git clone https://github.com/Intika-Linux-Network/App-Route-Jail.git
cd Approute-Utils
chown 755 make.sh
./make.sh
  • ভবিষ্যতে চিহ্নিত প্যাকেটগুলির জন্য একটি রুট যুক্ত করুন (জেলযুক্ত প্রয়োগের জন্য) 192.168.1.1জোর করে গেটওয়ে হিসাবে ব্যবহৃত হবে, এই রুট নিয়মটি অন্য অ্যাপ্লিকেশনগুলিকে প্রভাবিত করবে না, উদাহরণস্বরূপ সিস্টেম বুটে একবার এই ম্যানিপুলেশন করতে হবে যদি আপনি চান এই সমাধানটি প্রতিদিন ব্যবহার করুন
ip rule add fwmark 10 table 100
ip route add default via 192.168.1.1 table 100
  • আপনি যে কারাগারে যেতে চান সেই আবেদনটি শুরু করুন
MARK=10 LD_PRELOAD=./mark.so firefox
  • Wan IP ঠিকানা পরীক্ষা করা হচ্ছে
MARK=10 LD_PRELOAD=./mark.so wget -qO- ifconfig.me
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.