मैं प्रति उपयोगकर्ता बैंडविड्थ को कैसे सीमित कर सकता हूं?


32

संक्षेप में: मेरे पास एक समर्पित सर्वर है जिसमें कुछ दोस्त हैं जो वेब गुई के साथ एक टोरेंट क्लाइंट चला रहे हैं। प्रत्येक उपयोगकर्ता सर्वर पर अपने उपयोगकर्ता नाम के तहत एक क्लाइंट चला रहा है, इसलिए डाउनलोड उनके उपयोगकर्ता निर्देशिका में जाते हैं, और केवल उनकी अपनी फ़ाइलों तक पहुंच होती है आदि।

मैं प्रति उपयोगकर्ता के आधार पर प्रति माह बैंडविड्थ की निगरानी कैसे कर सकता हूं?

मैं सोच रहा था कि शायद iptables का उपयोग करने का एक तरीका होना चाहिए। और उपयोगकर्ता X की सभी प्रक्रियाओं द्वारा उपयोग किए जाने वाले बैंडविड्थ की निगरानी करके। और यदि उन्होंने अधिक उपयोग किया है तो Y की मासिक अनुमति वाले बैंडविड्थ का उपयोग करते हुए, उन्हें यह कहते हुए एक संदेश मिलता है कि नेटवर्किंग उनके टोरेंट क्लाइंट के लिए अवरुद्ध हो जाती है, या क्लाइंट पूरी तरह से मारा जाता है। मैंने विद्रूप के बारे में भी सोचा था, लेकिन यह देखते हुए कि यह कई टोरेंट क्लाइंट का उपयोग कर रहा है, यह बहुत सारे सर्वर संसाधनों का उपयोग कर सकता है ...

मैं डेबियन लेन का उपयोग कर रहा हूं।

मुझे यकीन नहीं है कि यह कैसे करना है ...

क्या यह सब संभव होगा? मैं इस के लिए भी आंशिक समाधान के लिए आभारी हूँ ...


हम यह जान सकते हैं कि आप किस ओएस का उपयोग कर रहे हैं।
सैम कॉगन

डेबियन। एक एडिट में जोड़ा गया।
लोको 41211

बस जिज्ञासु, क्या आप TorrentFlux का उपयोग कर रहे हैं?
cop1152

यह उन चीजों में से एक है जो मैं कोशिश कर रहा हूं। इस समय हम डिस्क स्पेस लिमिटिंग (जिसके लिए हमारे पास हल है) और बैंडविड्थ लिमिटिंग के साथ सीडबॉक्स के लिए उपयोग करने के लिए कुछ भी देख रहे हैं। केवल कुछ Mbs। वास्तव में इसे प्रति उपयोगकर्ता समान रूप से सीमित करना चाहेंगे।
22o में लोको 41211

जवाबों:


13

आप 'tc' ट्रैफिक को आकार देने वाले कमांड का उपयोग कर सकते हैं।

अपने प्रत्येक मित्र को बिटटोरेंट के लिए उपयोग करने के लिए एक अलग पोर्ट दें। प्रत्येक पोर्ट के लिए iptables के साथ TCP पैकेट चिह्नित करें।

iptables -t mangle -A FORWARD -p tcp --sport 6881 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -p tcp --dport 6881 -j MARK --set-mark 100

फिर प्रत्येक उपयोगकर्ता के लिए अधिकतम बैंडविड्थ और दर निर्धारित करने के लिए टीसी कमांड का उपयोग करें।

महीने के अंत में आप गणनाओं को रीसेट करने के लिए 'tc' कमांड हटा सकते हैं और जोड़ सकते हैं।

आप प्रत्येक उपयोगकर्ता के लिए उपयोग की निगरानी कर सकते हैं:

tc filter show dev ethX

यदि आप डेबियन स्थापित शोरवेल का उपयोग कर रहे हैं, तो यह iptables के साथ खिलवाड़ किए बिना ट्रैफ़िक को आकार देना आसान बनाता है। आप बस / etc / shorewall निर्देशिका में tcdevices, tcclasses और tcrules संपादित करते हैं। अधिक जानकारी यहाँ: http://www.shorewall.net/traffic_shaping.htm

जैसा कि दूसरे व्यक्ति ने सुझाव दिया है, उपयोगकर्ता नाम पैकेट को संभवतः बंदरगाह से बेहतर है, उस तरह से बंदरगाहों को आईपीटबल्स को अपडेट किए बिना बदला जा सकता है।


क्या आप एक सीमा निर्धारित करने पर एक उदाहरण दे सकते हैं? 100GB आवक और आउटगोइंग एक साथ कहें?
loco41211

धार (और वास्तव में है) अन्य बंदरगाहों का उपयोग कर सकते हैं इसलिए उदाहरण वास्तव में समस्या को हल नहीं करता है।
cstamas

समाधान के रूप में उन दो विकल्पों को हटा देता है ...
loco41211

cstamas: आप एक पोर्ट या कई पोर्ट सेट कर सकते हैं जब एक बिटकॉइन क्लाइंट का उपयोग कर रहे हों। इसे देखें: dessent.net/btfaq/#ports
chris.moos

13

आप --quotaiptables में विकल्प का उपयोग करने का प्रयास कर सकते हैं , जो आपको बाइट्स में स्थानांतरण सीमा निर्धारित करने की अनुमति देता है। चूंकि आप कई टोरेंट क्लाइंट चला रहे हैं, प्रत्येक एक अलग उपयोगकर्ता नाम के तहत, आप उस --uid-ownerविकल्प के साथ संयोजन कर सकते हैं , जैसा कि कैटरील ने सुझाया था।

इस तरह आप अपने उपयोगकर्ताओं की डाउनलोड गति को सीमित किए बिना प्रति समय अवधि (दिन / सप्ताह / महीना / आदि) के लिए एक स्थानांतरण सीमा लागू कर सकते हैं।

पैकेट काउंटर को लगातार बनाए रखने के लिए, आपको उन्हें समय-समय पर सहेजना होगा (उदाहरण के लिए, क्रॉन जॉब के माध्यम से), ताकि आप उन्हें उस स्थिति में बहाल कर सकें, जिसमें आपको सर्वर को रिबूट करने या फ़ायरवॉल नियमों को फ्लश करने की आवश्यकता होती है।


लगता है कि यह काम करेगा। इसलिए iptables की मदद से मैं एक सेट उपयोगकर्ता के लिए आने वाले सभी ट्रैफ़िक को चिह्नित कर सकता हूं। और मैं इसे एक निर्धारित समयावधि के लिए सीमित कर सकता हूं। मैं अभी भी काम नहीं कर सकता कि पूरा सेट हालांकि कैसे होगा। तो सटीक कमांड है जो मैं आने वाले और बाहर जाने वाले ट्रैफ़िक को चिह्नित करने के लिए उपयोग कर सकता हूं: "iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100"? या मैं यह कैसे करूँगा? उदाहरण के लिए क्या होगा कि कमांड यूजरनाम बॉब को आईडी 56 के साथ 100GB की मासिक सीमा के साथ चिह्नित करेगा? मुझे लगता है कि एक मासिक क्रोन नौकरी ट्रैफिक काउंटर को रीसेट करेगी?
लोको 41211

12

बस उपरोक्त प्रश्न पर जोड़ने के लिए।

आप पैकेट को रंगने के लिए उपयोगकर्ता के साथ iptables का उपयोग कर सकते हैं जैसे:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100

और फिर प्रति उपयोगकर्ता आधार पर सीमित करने के लिए 'टीसी' का उपयोग करें।


क्या आप इस बात पर एक उदाहरण दे सकते हैं कि उपयोगकर्ता नाम blablaX के लिए tc का उपयोग 100GB की सीमा निर्धारित करने के लिए कैसे करें? और कोड का एक उदाहरण जिसका उपयोग एक महीने के बाद सीमा को रीसेट करने के लिए किया जाना चाहिए? धन्यवाद
loco41211

यह उपयोगकर्ता को स्थायी आधार पर सीमित करेगा, और समयबद्ध कोटा पर नहीं
katriel

8

आप प्रति माह प्रत्येक उपयोगकर्ता के लिए कितना मासिक ट्रैफ़िक चाहते हैं, इसके आधार पर, आप कुछ उपयोगकर्ताओं द्वारा सुझाए गए कुछ टूल का उपयोग करके, तदनुसार बैंडविड्थ सीमा निर्धारित कर सकते हैं।

उदाहरण के लिए, मान लें कि आप अधिकतम 250 GB / महीने की डाउनलोड सीमा निर्धारित करना चाहते हैं । अब, यदि आप एक महीने में घंटे की संख्या (~ 730) से विभाजित करते हैं, और फिर 3600 तक, आपको अधिकतम डाउनलोड दर मिलेगी, जो इस उदाहरण में 100 केबी / सेकेंड होगी ।

फिर, यदि आप 100 केबी / एस की अधिकतम डीएल दर निर्धारित करते हैं, तो आप अपनी 250 जीबी / महीना डाउनलोड सीमा को स्वचालित रूप से लागू करेंगे (यह मानते हुए कि आपका ट्रैफ़िक शेपर ठीक से काम कर रहा है)। यदि आपके उपयोगकर्ता 100 केबी / एस से अधिक तेजी से डाउनलोड नहीं कर सकते हैं, तो वे 250 जीबी / माह से अधिक डाउनलोड नहीं कर पाएंगे।

डाउनलोड की गई दर को सीमित करने के लिए आप tcकुछ अन्य साधनों का उपयोग कर सकते हैं जिनका उल्लेख किया गया है। यदि आप सीधे डील नहीं करना चाहते हैं tc, तो आप cbq.init का उपयोग कर सकते हैं , जो सेट अप करने के लिए बहुत सरल है। यह स्क्रिप्ट shaperपैकेज के रूप में डेबियन एच में मौजूद थी , लेकिन ऐसा लगता है कि इसके बाद हटा दिया गया है। वैसे भी, यह सिर्फ एक सरल स्क्रिप्ट है जिसे आप SourceForge से डाउनलोड कर सकते हैं।

बेशक यह दृष्टिकोण आपके मामले में उपयोगी नहीं हो सकता है (उदाहरण के लिए, यदि आप चाहते थे कि आपके उपयोगकर्ता अधिकतम उपलब्ध गति पर डाउनलोड कर सकें, लेकिन फिर भी अपनी सहज सीमा को लागू करें, तो मेरा सुझाव काम नहीं करेगा)।


मुख्य कारण है कि हम अपने पीसी पर सिर्फ टोर्रेंट्स के बजाय एक सीडबॉक्स का उपयोग करते हैं क्योंकि यह बहुत तेज़ है, इसलिए दुख की बात है कि इससे समस्या हल नहीं होती है ... धन्यवाद वैसे भी
loco41211

7

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन यहां तक ​​कि मैं इस पर जवाब देने की तलाश में आज भी लड़खड़ाया और मैंने आखिरकार कुछ ऐसा किया जो मेरे लिए पूरी तरह से काम करता है। मेरे पास 25Mbs डाउनलिंक और 2.5Mbs अपलिंक है और इस लिंक को साझा करने वाले 4 लोग और 5 सर्वर हैं। सर्वर के साथ अपलिंक बैंडविथ महत्वपूर्ण है, लेकिन डाउनलिंक 4 लोगों के साथ उपयोगी है, इसलिए कोई भी यह सब हॉग नहीं करता है।

मैं एक राउटर के रूप में सेंटोस 6.3 चला रहा हूं, लेकिन ये कमांड किसी भी लिनक्स पर काम करना चाहिए। eth0 प्रदाता अप करने के लिए मेरा अपलिंक है eth1 मेरा पोर्ट है जो 24 पोर्ट स्विच और वाईफाई एक्सेस प्वाइंट के माध्यम से है I डाउनलोड को 25 Mbs (लगभग 500KB / सेकंड) में से 5 तक सीमित करता है। मैं अपलोड को 200Kbit (लगभग 25KB / सेकंड) तक सीमित करता हूं

tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 200Kbit ceil 200Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 5Mbit ceil 5Mbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

फिर उपयोगकर्ताओं को सीमित करने के लिए आप प्रति उपयोगकर्ता 2 iptables लाइनों का उपयोग करते हैं

अपलोड को सीमित करने के लिए:

iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.0.100 -j CLASSIFY --set-class 1:11

डाउनलोड सीमित करने के लिए

iptables -t mangle -A POSTROUTING -o eth1 -p tcp -d 192.168.0.100 -j CLASSIFY --set-class 2:11

जो आप सीमित करना चाहते हैं, उससे मेल करने के लिए बस अपना आईपी पता और एथ पोर्ट बदलें


3

पूर्णता के लिए, एक उपयोगकर्ता नाम डेमॉन है trickle। इसका उपयोग किसी एकल प्रक्रिया की बैंडविड्थ को सीमित करने के लिए किया जा सकता है। उपयोग बहुत सरल है: एप्टीट्यूड द्वारा उपयोग की जाने वाली बैंडविड्थ को सीमित करने के लिए, आप लिख सकते हैं: trickle -d 10 aptitude install wesnothहालाँकि यह LD_PRELOAD का उपयोग करके काम करता है, इसे शेल द्वारा पहुँच प्राप्त करने वाले उपयोगकर्ता द्वारा आसानी से ओवरराइड किया जा सकता है।


स्वयं के अलावा किसी भी उपयोगकर्ता के पास शेल एक्सेस नहीं है। इसके अलावा, बैंडविड्थ सीमित करने के साथ मेरा मतलब है प्रति माह, या समय की एक निर्धारित अवधि। क्या ऐसा संभव होगा?
लोको 41211

1
नहीं, ट्रिकल गति प्रति सेकंड के अनुसार गति।
लोरी

2

Useripacct कर्नेल पैच पर नज़र डालें (यह वास्तव में काफी लंबा इतिहास है )। में पुराने संस्करण के लिये दस्तावेज यह भी रूप में अच्छी तरह कोटा प्रवर्तन प्रदान करने के लिए निगरानी के रूप में प्रकट होता है, और यह भी अपने स्वयं के नीति स्क्रिप्ट प्रदान करने के लिए संभव है।

यह देखते हुए कि उपयोगकर्ता को आपके इच्छित व्यवहार को प्राप्त करने के लिए कर्नेल पैच का सहारा लेना पड़ता है, ऐसा लगता है कि यह डिफ़ॉल्ट रूप से उपलब्ध एक सरल विधि है। अन्य विकल्पों में से अधिकांश (लेकिन वास्तव में आप जो खोज रहे हैं वह नहीं है), या प्रत्येक उपयोगकर्ता के लिए एक वीएम बनाकर (हल्के ओएस वर्चुअलाइजेशन का उपयोग करके) केवल विकल्प ही बैंडविड्थ को सीमित करते हुए (टीसी या ट्रिकल की तरह) द्वारा दिखाई देंगे। की तरह कुछ से OpenVZ वीएम प्रति) और लेखांकन यातायात (जो काफी आसान की तरह कुछ द्वारा मूल्यांकन किया है vnstat )। हालांकि ओवरकिल जैसा लगता है (अचानक आपके पास एक सिस्टम के बजाय VMs का एक गुच्छा है)।


यह सर्वर संसाधनों को खत्म करने के रूप में एक बिट overkill है .. लेकिन विचार के लिए धन्यवाद!
लोको 41211
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.