বিভিন্ন প্রক্রিয়াগুলির জন্য কীভাবে বিভিন্ন নেটওয়ার্ক ইন্টারফেস ব্যবহার করবেন?


59

একটি লিনাক্স পিসিতে আমার দুটি নেটওয়ার্ক ইন্টারফেস রয়েছে এবং প্রদত্ত প্রক্রিয়াটি যে ইন্টারফেসটি ব্যবহার করবে তা আমাকে নিজেই সেট করতে হবে set

প্রোগ্রাম (টুইঙ্কল সফটফোন) এর মতো কোনও বিকল্প নেই, তাই আমি বিশ্বাস করি এটি অবশ্যই বাহ্যিকভাবে সেট করা উচিত।

আমি এটা কিভাবে করবো?

সম্পাদনা: আমি কোনও সার্ভার প্রক্রিয়াটিকে একটি নির্দিষ্ট ইন্টারফেসের সাথে আবদ্ধ করার চেষ্টা করছি না, বরং ক্লায়েন্ট প্রোগ্রামকে একটি নির্দিষ্ট ইন্টারফেস ব্যবহার করে কোনও সার্ভারের সাথে যোগাযোগ করার চেষ্টা করছি।


ক্লায়েন্টরা বাঁধাই / সংযোগ পাশাপাশি ব্যবহার করে, প্রদত্ত আইপি-তে কীভাবে আইআরআইআই (একটি আইআর-ক্লায়েন্ট প্রোগ্রামেম) জোর করা যায় তার bind.c.txt ডকুমেন্টেশন দেখুন: 'বার্চ-এর উদাহরণটি আপনার ভার্চুয়াল আইপিটিকে আইআরআইআইয়ের বহির্গামী সোর্সড্রেস হিসাবে ব্যবহার করতে: বিআইএএডিএডিডিআর = "আপনার গুণ-আইপি" এলডিপ্রেলএড =। / বাইন্ড.সো আইসিআই '
আকিরা

আমি এখানে একটি ভিন্ন পদ্ধতির সন্ধান পেয়েছি, আমি আশা করি এটি সহায়ক (আমি অবশ্যই আশা করি বর্ণিত কার্নেল নীতি রাউটিংটি আজকাল ডিফল্টরূপে সক্ষম হয়েছে): kindlund.wordpress.com/2007/11/19/…
স্যাভাস রেডেভিক

উত্তর:


48

আপনি ব্যবহার দ্বারা রানটাইম এ কোড প্রতিস্থাপন করতে পারেন LD_PRELOAD (@windows আপনি যদি অনুরূপ কৌশল বলা ব্যবহার করতে পারেন ঘুরপথ , বেশ অভিনব)। এটি যা করে তা হ'ল ডায়নামিক লিঙ্কারকে প্রথমে আপনি চালনা করতে চান এমন প্রক্রিয়ায় সমস্ত লিবস লোড করার জন্য এবং তারপরে আরও কিছু শীর্ষে যুক্ত করতে। আপনি সাধারণত এটি ব্যবহার করুন:

% LD_PRELOAD=./mylib.so ls

এবং lsএটির দ্বারা আপনি কী পরিবর্তন করেন change

আপনার সমস্যার জন্য আমি http://www.ryde.net/code/bind.c.txt চেষ্টা করব , যা আপনি ব্যবহার করতে পারেন:

% BIND_ADDR="ip_of_ethX" LD_PRELOAD=./bind.so twinkle

আপনি এটি কীভাবে তৈরি করছেন তা এখানে:

% wget http://www.ryde.net/code/bind.c.txt -O bind.c
% gcc -nostartfiles -fpic -shared bind.c -o bind.so -ldl -D_GNU_SOURCE

আর কতক্ষণ http://daniel-lange.com/archives/53- বাইন্ডিং- অ্যাপ্লিকেশন- to-a- স্পেসিফিক- আইপি এইচটিএমএল

অনুরূপ হ্যাক এবং সরঞ্জাম:


7
বাহ, কি হ্যাক। +1
sinni800

1
হাই, এটি সত্যিই দুর্দান্ত কৌশল বলে মনে হচ্ছে তবে এটি আমার পক্ষে কার্যকর হয় না। আমার কাছে দুটি 3 জি মডেম রয়েছে যা সংযুক্ত থাকাকালীন দুটি ইন্টারফেস (পিপিপি 0 এবং পিপিপি 1) খুলবে open যদি আমি দুটি আইপির মধ্যে একটিকে জোর করার চেষ্টা করি, আমি সর্বদা একই ইন্টারফেসের সাথে বাইরে যাব (আমি এটি দেখতে পাচ্ছি কারণ আমারে দুটি ওয়্যারশার্ক রয়েছে, প্রতিটি ইন্টারফেসের জন্য একটি)। আমি বাইন্ডাক। থেকে ডিবাগ প্রিন্টগুলিও সরিয়েছি এবং প্রকৃতপক্ষে আমি দেখতে পাচ্ছি যে "ওভারলোডেড" লাইব্রেরি লোড হয়েছে, তাই কেন এটি কাজ করে না জানি না।
Andrea স্পাডাক্সিনি

3
আপনার কার্যকর ইউআইডি যদি আপনার আসল ইউআইডি এর মতো না হয় তবে LD_PRELOAD এড়ানো হবে।
ম্যাথিয়াস কুরুল

force_bindCatalin এম Boie দ্বারা প্রকল্প IPv6 সমর্থন
BurnsBA

দুর্দান্ত কাজ করে তবে সংকলন সফল হওয়ার জন্য # অন্তর্ভুক্ত <আরপা / ইননেট h> যোগ করতে হয়েছিল।
এ্যানো

31

আইপি নেটগুলি এটি করতে পারে।

টিএল; ডিআর: নেটওয়ার্কের নেমস্পেসগুলি তৈরি করুন, তাদের সাথে ইন্টারফেস সংযুক্ত করুন এবং তারপরে "আইপি নেটস এক্সিকিউশন NAME সেন্টিমিটার ..." চালান

আপনার ডিস্ট্রো আইপি নেটকে সমর্থন করে কিনা তা পরীক্ষা করে দেখুন ... (ব্যাকট্র্যাক 5r3 না, যেখানে কালী করেন না;))

আরও বিশদে:

#create netns
ip netns add myNamespace
#link iface to netns
ip link set eth0 netns myNamespace
#set ip address in namespace
ip netns exec myNamespace ifconfig eth0 192.168.0.10/24 up
#set loopback (may be needed by process run in this namespace)
ip netns exec myNamespace ifconfig lo 127.0.0.1/8 up
#set route in namespace
ip netns exec myNamespace route add default gw 192.168.0.1
#force firefox to run inside namespace (using eth0 as outgoing interface and the route)
ip netns exec myNamespace firefox

এলডিপ্রেলএডের মাধ্যমে আইপিকে বাঁধাই করার চেয়ে কেন এটি ভাল? কারণ LD_PRELOAD প্রক্রিয়াগুলি যে রুটটি ব্যবহার করে তা নিয়ন্ত্রণ করে না। এটি প্রথম রুটটি ব্যবহার করবে।

এবং যেহেতু এটি সর্বদা একই রুট ব্যবহার করে, তাই এটি রুটে নিবন্ধিত ইন্টারফেসে ডিফল্ট হবে ((যা আমরা চাই না)


2
আপনার উত্তরে আরও বিশদ যুক্ত করার চেষ্টা করুন।
রেঞ্জু চন্দ্রন চিংথ


1
শেষ লাইনটি হওয়া উচিতip netns exec myNamespace firefox
meuh

1
প্রয়োজনের সময় নাম স্থানটি সরাতে "sudo ip নেটস ডেল <namespace-name>" ব্যবহার করুন!
এডুয়ার্ডো লুসিও

1
@ এদুয়ার্দো লুসিও এটির মতো এটি কার্যকর করা উচিত: sudo ip netns exec myNamespace su -u someUser -c firefox
olivervbk

2

আমি মনে করি না যে কোনও প্রক্রিয়াটিকে একটি নির্দিষ্ট ইন্টারফেস ব্যবহার করতে বাধ্য করা সম্ভব is

তবে আমি মনে করি আপনি সম্ভবত আইপচেইন / iptables সঙ্গে খেলতে সক্ষম হবেন এবং আপনার প্রক্রিয়া যে নির্দিষ্ট পোর্টটি শুনছে তা কেবল একটি নির্দিষ্ট ইন্টারফেসের মাধ্যমে প্যাকেটগুলি পাবে তা জোর করে।

দরকারী হাওটো: http://tldp.org/HOWTO/IPCHAINS-HOWTO.html


2
দুটি উচ্চ-ভোট প্রাপ্ত পোস্ট অন্যথায় প্রমাণ করে।
পল গিয়ার

2

নীচে @olivervbk উত্তর উপর ভিত্তি করে আমার!

সমস্ত কমান্ড "রুট" হিসাবে চালান।

কমান্ডটি ব্যবহার করুন ...

ip a

... আপনি যে নেটওয়ার্ক ইন্টারফেসটি ব্যবহার করতে চাইবেন তার নামটি জানতে।

টেমপ্লেট হিসাবে নীচের কমান্ডগুলি চালনা করুন ...

ip netns add [INTERFACE_NAME]_ns
ip link set dev [INTERFACE_NAME] netns [INTERFACE_NAME]_ns
ip netns exec [INTERFACE_NAME]_ns ifconfig [INTERFACE_NAME] 10.1.1.10/24 up
ip netns exec [INTERFACE_NAME]_ns ifconfig lo 127.0.0.1/8 up
ip netns exec [INTERFACE_NAME]_ns route add default gw 10.1.1.1
ip netns exec [INTERFACE_NAME]_ns dhcpcd [INTERFACE_NAME]
ip netns exec [INTERFACE_NAME]_ns sudo -b -u [YOUR_USER] [APP_NAME] 2> /dev/null 1> /dev/null &
  • [INTERFACE_NAME] - নির্বাচিত নেটওয়ার্ক ইন্টারফেসের নামের সাথে প্রতিস্থাপন করুন।
  • [YOUR_USER] - আপনার ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন করুন।
  • [APP_NAME] - অ্যাপ্লিকেশনটির নাম যা "[INTERFACE_NAME] _ns" নাম স্পেসে কার্যকর করা হবে। যেমন: "ফায়ারফক্স"।

দ্রষ্টব্য আমি: "sudo" কমান্ডের "-b -u" পতাকাগুলি আপনার ব্যবহারকারীর ("মূল" নয়) ব্যবহার করে এবং টার্মিনালটি প্রকাশের পটভূমিতে অ্যাপ্লিকেশনটি চালানোর অনুমতি দেয়। 2> /dev/null 1> /dev/null &স্নিপেট থেকে "[APP_NAME এর]" টার্মিনালে ছাপা হচ্ছে আউটপুট প্রতিরোধ করা হয়।
দ্রষ্টব্য II: আইপি "10.1.1.10" এবং "10.1.1.1" এর মানগুলি নির্বিচারে।
নোট III: আমার জন্য কাজ করতে আমাকে dhcpcd [INTERFACE_NAME]কমান্ডটি চালাতে হয়েছিল run

নেমস্পেস ব্যবহার সরানোর জন্য ...

ip netns del [INTERFACE_NAME]_ns

... বা ...

ip -all netns delete

... যে বিদ্যমান তা মুছে ফেলতে।


1

সাধারণত যদি কোনও প্রোগ্রামের শোনার ইন্টারফেস সেট করার কোনও বিকল্প না থাকে, তবে এটি সমস্ত ইন্টারফেসে শুনছে। (আপনি এটি দিয়ে যাচাই করতে পারেন lsof -i)।

Iptables ফায়ারওয়াল নিয়ম তৈরি করা যা আগত ট্র্যাফিকটিকে তার পোর্টগুলিতে ইন্টারফেসগুলিতে নির্দেশ করে যা আপনি চান না যে এটি দৃশ্যমান হয় এটি করা সবচেয়ে সহজ কাজ।


1

বিকল্প আমি:

ইন্টারফেস গেটওয়ে জোর করতে ld_preload ব্যবহার করে https://github.com/Intika-Linux- নেটওয়ার্ক / অ্যাপ- রুট- জেল

কোনও অ্যাপ্লিকেশনকে একটি নির্দিষ্ট নেটওয়ার্ক ইন্টারফেস ব্যবহার করতে বাধ্য করুন

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

  • ইন্টারফেস গেটওয়ে কীভাবে সন্ধান করবেন (গেটওয়েটি সন্ধানের জন্য অনেকগুলি সমাধান রয়েছে এখানে কয়েকটি কমান্ড রয়েছে যা ব্যবহৃত গেটওয়ে সন্ধান করার অনুমতি দেয়)
$ 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

বিকল্প দ্বিতীয়:

ফায়ারজেল https://firejail.wordpress.com/ কোনও অ্যাপ্লিকেশনকে একটি নির্দিষ্ট নেটওয়ার্ক ব্যবহার করতে বাধ্য করতে পারে, তবে সামঞ্জস্যতা সীমিত।

firejail --dns=8.8.8.8 --net=eth0 --ip=192.168.1.1

নোট করুন যে চিহ্নটি সাধারণ ব্যবহারকারীর পক্ষে সম্ভব নয়, আপনাকে অবশ্যই রুট হিসাবে চালাতে হবে।
জর্নে

-2

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

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

সুতরাং তাদের যদি পৃথক আইপি ঠিকানা থাকে তবে সঠিক ইন্টারফেসটি নির্বাচন করতে রুটগুলি ব্যবহার করুন। তাদের যদি একই আইপি ঠিকানা থাকে তবে আপনাকে NAT ব্যবহার করতে হবে যাতে তাদের সিস্টেমে বিভিন্ন আইপি ঠিকানা রয়েছে বলে মনে হয়।


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

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