লিনাক্সের প্রক্রিয়াটির জন্য ট্র্যাফিকটিকে নির্দিষ্ট ইন্টারফেসের মাধ্যমে রুট করুন


20

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

উদাহরণস্বরূপ, ডাউনলোড অ্যাপ্লিকেশন দ্বারা নেটওয়ার্ক ট্র্যাফিক সবসময় ইন্টারফেস ব্যবহার করা উচিত wlan0যেখানে মেশিনে থাকা অন্যান্য সমস্ত অ্যাপ্লিকেশন ব্যবহার করা উচিত eth0

লিনাক্সে কি এই জাতীয় নিয়ম রাখা সম্ভব?

উত্তর:


22

এটি লিনাক্স নেটওয়ার্ক নেমস্পেস ব্যবহার করে করা যেতে পারে।

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

আপডেট: কার্নেল 3.14 থেকে এটি নিবন্ধে বর্ণিত হিসাবে কন্ট্রোল গ্রুপগুলি ব্যবহার করা আরও সহজ । তোমাকে করতেই হবে:

1) শ্রেণিবদ্ধের সাথে প্রদত্ত প্রক্রিয়া থেকে প্যাকেটগুলি টীকা দেওয়ার জন্য একটি নেট_সিএলস নিয়ন্ত্রণ গ্রুপ সংজ্ঞায়িত করুন (বা প্রক্রিয়া গোষ্ঠী, নোট করুন যে তাদের মধ্যে কোনও পিতা-মাতার সম্পর্ক নেই)

২) প্যাকেটগুলিকে ফাইমার্ক করার জন্য iptables সিগ্রুপ মডিউলটি (লিনাক্স 3.14-এ যুক্ত) ব্যবহার করুন

3) চিহ্নিত প্যাকেটগুলির জন্য একটি নতুন রাউটিং টেবিল তৈরি করতে পলিসি রাউটিং (আইপি রুল অ্যাড ফাইউমার্ক ....) ব্যবহার করুন

সুবিধাটি হ'ল আমাদের ব্রিজিং জিনিসটি করতে হবে না এবং সবকিছু cgroups এর চেয়ে অনেক বেশি গতিশীল thanks


14

আমি সুও এর সাথে লড়াই করেছি তাই এখানে একটি সম্পূর্ণ সমাধান রয়েছে। এটি উবুন্টু 15 এবং 16 এ পরীক্ষা করা হয়েছে You

সম্পূর্ণ "সিগ্রুপ" সমাধান

কিভাবে কাজ করে?

  • লিনাক্স কার্নেল অ্যাপটিকে একটি নিয়ন্ত্রণ গ্রুপে রাখবে । এই সিগ্রুপে থাকা অ্যাপ্লিকেশনগুলি থেকে নেটওয়ার্ক ট্র্যাফিক নেটওয়ার্ক কন্ট্রোলার পর্যায়ে তাদের শ্রেণি আইডি দ্বারা চিহ্নিত করা হবে।
  • আইপটিবলগুলি এই ট্র্যাফিকটিকে চিহ্নিত করবে এবং এটিকে সঠিক আইপি দিয়ে প্রস্থান করতে বাধ্য করবে
  • আইপি রুটটি আপনি যা চান গেটওয়ে আইপি-র ডিফল্ট রুট সহ একটি ভিন্ন রাউটিং টেবিলের চিহ্নিত চিহ্নিত ট্র্যাফিকের প্রক্রিয়া করবে।

স্বয়ংক্রিয় স্ক্রিপ্ট

নির্ভরতা ইনস্টল ও চালন স্বয়ংক্রিয় করতে আমি একটি novpn.sh স্ক্রিপ্ট তৈরি করেছি । উবুন্টুতে পরীক্ষিত।

প্রথমে আপনার ভিপিএন শুরু করুন।

wget https://gist.githubusercontent.com/kriswebdev/a8d291936fe4299fb17d3744497b1170/raw/cf8b37fbe6c3f50a0be825eb77cafa3e0134946f/novpn.sh
# If you don't use eth0, edit the script setting.
sudo chmod +x novpn.sh
./novpn.sh traceroute www.google.com
./novpn.sh --help

ম্যানুয়াল হাওটো

প্রথমে সিগ্রুপ সমর্থন এবং সরঞ্জামগুলি ইনস্টল করুন:

sudo apt-get install cgroup-lite cgmanager cgroup-tools

রিবুট (প্রয়োজনীয় নাও হতে পারে)।

আপনার iptables 1.6 .0+ প্রয়োজন । Iptables 1.6.0 রিলিজ উত্স পান , এটি এক্সট্রাক্ট করুন, তারপরে এটি চালান ( --disable-nftablesপতাকা ত্রুটিগুলি এড়াতে পারবে) iptables উত্স দির থেকে:

sudo apt-get install dh-autoreconf bison flex
./configure --prefix=/usr      \
            --sbindir=/sbin    \
            --disable-nftables \
            --enable-libipq    \
            --with-xtlibdir=/lib/xtables
make
sudo make install
iptables --version

এখন, আসল কনফিগারেশন। নামের একটি নিয়ন্ত্রণ গ্রুপ সংজ্ঞায়িত করুন novpn। এই গোষ্ঠীগুলির প্রক্রিয়াগুলির 0x00110011(11 11) শ্রেণীবদ্ধ থাকবে ।

sudo su
mkdir /sys/fs/cgroup/net_cls/novpn
cd /sys/fs/cgroup/net_cls/novpn
echo 0x00110011 > net_cls.classid

এখন, আমরা ধরে নিই যে আপনি নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য যে ইন্টারফেসটি ব্যবহার করতে চান তা eth0একটি গেটওয়ে আইপি এর সাথে রয়েছে 10.0.0.1। এগুলি আপনি যা চান তা দ্বারা প্রতিস্থাপন করুন (এর কাছ থেকে তথ্য পান ip route)। মূল হিসাবে এখনও চালান:

# Add mark 11 on packets of classid 0x00110011
iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11

# Force the packets to exit through eth0 with NAT
iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o eth0 -j MASQUERADE

# Define a new "novpn" routing table
# DO THIS JUST ONCE !
echo 11 novpn >> /etc/iproute2/rt_tables

# Packets with mark 11 will use novpn
ip rule add fwmark 11 table novpn

# Novpn has a default gateway to the interface you want to use
ip route add default via 10.0.0.1 table novpn

# Unset reverse path filtering for all interfaces, or at least for "eth0" and "all"
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $i; done

অবশেষে, নির্দিষ্ট অ্যাপ্লিকেশনটিতে আপনার অ্যাপ্লিকেশনটি চালান:

exit
sudo cgcreate -t $USER:$USER -a $USER:$USER -g net_cls:novpn
cgexec -g net_cls:novpn traceroute www.google.com
# Close all Firefox windows first
cgexec -g net_cls:novpn firefox

অথবা আপনি যদি ইতিমধ্যে একটি চলমান প্রক্রিয়াটি সিগ্রুপে স্থানান্তর করতে চান তবে ভাল ... আপনি পারবেন না! এটি NAT (মাস্ক্রেড) ফাংশনের কারণে বলে মনে হচ্ছে: iptables -nvL -t natসিগ্রুপটি স্যুইচ করা অবস্থায় মেলে না তবে iptables -nvL -t mangleমিলছে।

# Get PID of the process (we'll then suppose it's 1234)
pidof firefox
# Add to cgroup - THIS DOESN'T WORK! Silently fails to produce the final result.
sudo echo 1234 > /sys/fs/cgroup/net_cls/novpn/tasks
# Remove - but this works...
sudo echo 1234 > /sys/fs/cgroup/net_cls

ক্রেডিট: কোন উত্তর আশানুরূপ কাজ করছিল, কিন্তু তাদের একটি মিশ্রণ নি: chripell evolware নিবন্ধ উত্তর রাউটিং Cgroups, iptables ও নীতি ব্যবহার করে: রাউটিং 2 প্রক্রিয়া প্রতি , আমি একটি নির্দিষ্ট প্রক্রিয়া একটি VPN খুলুন সংযোগ মাধ্যমে যাচ্ছেন না কিভাবে করতে পারি? , Iptables এর ভিত্তিতে ওপেনভিপিএন এর জন্য কিল স্যুইচ করুন


দুর্দান্ত উত্তরের জন্য ধন্যবাদ, আমি এপাচে এটি কীভাবে কাজ করব? আমি চেষ্টা করেছিলাম cgexec -g net_cls:novpn apache2এবং আমাকে ভেরিয়েবল অপরিবর্তিত এরোরগুলির পুরো তালিকা দিয়েছি!
রাজ্জাক

2
apache2টার্মিনাল থেকে সরাসরি চালিয়ে আপনি একই ত্রুটিগুলি পাবেন । এটি কারণ apache2হিসাবে একটি পরিষেবা হিসাবে সাধারণত চালু হয় systemctl start apache2। তবে, এটি কাজ করবে না cgexecapache2নেট_সিএলএস সিগ্রুপের প্রচারের জন্য ডাকা প্রোগ্রামটি অবশ্যই কাঙ্ক্ষিত ( ) প্রক্রিয়ার পিতা বা মাতা হওয়া আবশ্যক । সুতরাং আপনাকে লঞ্চ স্ক্রিপ্টটি সন্ধান করতে হবে। এই ক্ষেত্রে, এটি sudo cgexec -g net_cls:novpn /usr/sbin/apache2ctl start। সঙ্গে পরীক্ষা করুন ./novpn.sh --list
ক্রিসওয়েবদেভ

এটি এখন ওবুন্টু 16.04 এ কাজ করে না!
রাজ্জাক

2
আমি এটি উবুন্টু 16.04 এ ব্যবহার করছি এবং এটি ভাল কাজ করছে। ইন্টারফেস নাম উবুন্টু 16 পরিবর্তিত হয়েছে, আপনি প্রতিস্থাপন করা প্রয়োজন প্রতিস্থাপন করতে পারি eth0ভালো কিছু দ্বারা enp7s0ifconfigকমান্ড থেকে তথ্য পান ।
KrisWebDev

ধন্যবাদ. তবে এটি উবুন্টুতে কাজ করে না 18.04 কারণ সিপিম্যানের কারণে
সিস্টেমডের


3

মেরিউসমাটিয়া এবং ক্রিসউবদেভের দুর্দান্ত উত্তরগুলির সংমিশ্রণে আমি ক্রিসওয়েবদেভের দুর্দান্ত novpn.shস্ক্রিপ্টটি একটি বিস্তৃত পরিবর্তিত সংস্করণ তৈরি করেছি । যেখানে ক্রিস ওয়েবেডেভের স্ক্রিপ্টটি আরও নির্দিষ্ট চুলকানি স্ক্র্যাচ করার জন্য তৈরি করা হয়েছে (কোনও ভিপিএনের ভিতরে / বাইরে চলমান এবং চলমান প্রক্রিয়াগুলি), আমার সংস্করণ আপনাকে আপনার নির্দিষ্ট করা নেটওয়ার্কিং পরিবেশে মূলত কোনও কমান্ড চালানোর অনুমতি দেয়। আপনি ডিফল্ট রুটটি আবদ্ধ হওয়ার জন্য ইন্টারফেসটি নির্দিষ্ট করতে পারেন, নিজের আইপটবেবল বিধিগুলি, স্থিতিশীল রুটগুলি নির্দিষ্ট করতে পারেন, কমান্ড চালানোর আগে আপনার যেমন ইচ্ছা তেমন কাজ করছে তা নিশ্চিত করার জন্য একটি "পরীক্ষা" নির্দিষ্ট করুন ... ইত্যাদি)। এটি আপনাকে একাধিক কনফিগারেশন ফাইল ব্যবহার করার অনুমতি দেয় যাতে আপনি যে কোনও নির্দিষ্ট নেটওয়ার্কিং এনভায়রনমেন্টের যে কোনও সংখ্যক নির্দিষ্ট পরিবেশ নির্ধারণ করতে পারবেন যা আপনি ভিতরে কমান্ড / প্রক্রিয়া চালাতে পারবেন।

আমি এখানে এটি একটি টুকিটাকি পোস্ট করেছি: https://gist.github.com/level323/54a921216f0baaa163127d960bfebbf0

এটি পরে cgroup / iptables / রাউটিং টেবিলগুলি পরিষ্কার করতে পারে!

মতামত স্বাগত।

পিএস - এটি ডেবিয়ান 8 (জেসি) জন্য ডিজাইন করা হয়েছে


হাই @ সমস্ত প্রাকৃতিক, আমি আপনার altnetworking.sh স্ক্রিপ্টটি ব্যবহার করতে চাই, তবে কনফিগারেশন ফাইলটিতে আমার কী রাখার কথা?
ক্রিস 70

0

আবেদন প্রতি নয়, না। আপনি এটি প্রতি বন্দর বা প্রতি আইপি-ঠিকানা ইত্যাদি করতে পারেন, বা কোনও অ্যাপ্লিকেশন নিজেই একটি নির্দিষ্ট নেটওয়ার্ক কার্ডকে (এবং ব্যবহার করতে) বাঁধতে পারে।

এটি করার জন্য আপনি কোনও নিয়ম সেট করতে পারবেন না।


আমি একটি জাভা অ্যাপ্লিকেশন পেয়েছি, সেই অ্যাপ্লিকেশনটি কোনও ইন্টারফেসে বাঁধাই সম্ভব?
সুরেশ

আপনার কাছে জাভা অ্যাপ্লিকেশনটির সোর্স কোড রয়েছে এবং ইন্টার্নালগুলি পুনরায় প্রোগ্রাম করতে পারে?
মাজেঙ্কো

আমি একটি জাভা অ্যাপ্লিকেশন উত্স কোড যা অ্যাপাচি HTTP লাইব্রেরি ব্যবহার করে।
সুরেশ

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