HTB के लिए न्यूनतम दर और डिफ़ॉल्ट श्रेणी की समस्या


29

मेरे द्वारा उपयोग किए जा रहे HTB संरचना के बारे में मुझे कुछ संदेह है।

मेरा उद्देश्य स्थानीय नेटवर्क में उपयोगकर्ताओं की डाउनलोड और अपलोड गति को सीमित करना है। नेटवर्क के प्रत्येक उपयोगकर्ता के पास डोमेन की एक व्यक्तिगत सूची होती है, वह उस डोमेन की डाउन और अप गति के साथ जो वह पार नहीं कर सकता है।

इसका मतलब है कि user1 में slashdot.org पर उनके उच्चारण और डाउनलोड के लिए 8KB तक सीमित है, और user2 पर slashdot.org हो सकता है जो 4KB डाउन और 1KB अप की प्रतिबंधित पहुंच है।

अभी के लिए मैं एक iptables / tc युगल को सेटअप करता हूं जो बहुत अच्छा काम करता है, लेकिन बहुत कम पैमाने पर, एक ही समय में 2 या 3 वर्चुअल होस्ट का उपयोग करके (दुर्भाग्य से, मैं वास्तविक आकार परीक्षण नहीं कर सकता)।

यहां मेरी वर्तमान संरचना है (मैं केवल लैन की प्रगति पर एक दिखाऊंगा, अपलोड के लिए यह केवल इस एक की "प्रतिलिपि" है)

HTB qdisc (हैंडल 2 :) इंटरफ़ेस पर संलग्न है, डिफ़ॉल्ट ट्रैफ़िक क्लास FFFF है।

मूल वर्ग 2: 1 सीधे HTB qdisc के तहत दर और DOWNLINK क्षमता की छत के लिए है।

डिफ़ॉल्ट कक्षा 2: FFFF 2 के बच्चे के रूप में: 1kbsp की दर और DOWRINK क्षमता की एक छत के साथ।

फिर, डायनेमिक रूप से अन्य कक्षाएं जोड़ी जाती हैं जब एक उपयोगकर्ता के लिए एक निश्चित डोमेन से एक नया प्रतिबंध होता है, उसके डोमेन से डाउनलोड गति को नियंत्रित करने के लिए एक नया टीसी वर्ग जोड़ा जाता है।

अभी के लिए, मैंने यहाँ क्या किया है:

एक अद्वितीय आईडी (डेटाबेस से लिया गया है, यहां बिंदु नहीं) के साथ एक नया टीसी वर्ग बनाएं, एक अभिभावक के रूप में कक्षा 2: 1, दर मूल्य 1 एमबी है, छत का मूल्य सीमित डाउनलोड गति पर सेट है।

यहाँ tc कमांड हैं:

-------------- BEGIN SCRIPT --------------
DOWNLINK=800

## Setting up the static tc qdisc and class

$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF

# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps

# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0

# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10

## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1

# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10

# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------

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

जिस बिंदु पर मुझे गंभीरता से संदेह है, वह डिफ़ॉल्ट वर्ग और प्रतिबंधित वर्ग के लिए न्यूनतम 1 एमबीपीएस गति की दर का उपयोग है। मैं प्रतिबंधित कक्षाओं की संख्या को नियंत्रित नहीं कर सकता, जो बनाए जाएंगे, और मैं प्रतिबंधित वर्ग की कुल दर को मूल वर्ग में से एक होना नहीं चाहता।

एक अन्य बिंदु, मैंने डिफॉल्ट को prio 0, और प्रतिबंधित वर्ग prio 1 को जोड़ा है, इसलिए यदि डिफॉल्ट क्लास को उधार लेना चाहिए (लगभग हमेशा इसकी बहुत धीमी दर के अनुसार), तो यह क्लास अन्य प्रतिबंधित डोमेन से पहले परोसी जाएगी। लेकिन क्या मैं उन डोमेन को भूखा नहीं रखूँगा अगर मैं डिफ़ॉल्ट वर्ग की छत को मूल वर्ग के रूप में रखता हूँ?

मैं कई युगल डोमेन या उपयोगकर्ता के लिए गति को सीमित करते हुए, उपयोगकर्ताओं को एक गैर-प्रतिबंधित उपयोग के लिए एक सभ्य अन्तरक्रियाशीलता और बैंडविड्थ रखने की अनुमति देने में कैसे सफल हो सकता हूं?

मैं यह भी सोच रहा हूं कि क्या डिफ़ॉल्ट क्लास यहां उपयोगी है, अगर मैं डॉन, टीएचटी क्यूडीस्क के लिए डिफ़ॉल्ट क्लास निर्दिष्ट नहीं करता है, तो फिल्टर से मेल नहीं खाने वाले पैकेट को हार्डवेयर गति से हटा दिया जाएगा। (लेकिन यहाँ फिर से प्रतिबंधित वर्ग को भूखा बनाने के साथ?)

मैं टीसी और नेटवर्क क्यूओएस के लिए वास्तव में नया हूं, इसलिए किसी भी सलाह, आलोचक (रचनात्मक व्यक्ति;) का स्वागत किया जाएगा।

विंसेंट।

जवाबों:


2

चूंकि आपने क्लासिफायर को शामिल नहीं किया है, इसलिए यह मुश्किल है कि आप प्रत्येक क्लास में किस ट्रैफ़िक को घटाएं। उदाहरण के लिए, आउटगोइंग http या ssh ट्रैफिक इंटरएक्टिविटी के लिए बहुत महत्वपूर्ण है, आने वाली http इतना नहीं।

मैं यह कहकर प्रत्येक सेवा के लिए निश्चित बैंडविड्थ की गारंटी देता हूं: मेरे पास आने वाले httpd ट्रैफिक के लिए एक्स केबीपीएस है, और यह उपयोगकर्ताओं के बीच समान रूप से विभाजित होता है। यदि आपके पास 10 या 100 उपयोगकर्ता हैं, तो यह उचित है। "यदि आपके पास इन सेवाओं में से प्रत्येक में उच्च प्राथमिकता वाले उपयोगकर्ता या कम प्राथमिकता वाले उपयोगकर्ता हैं, तो आपको उनके लिए अतिरिक्त कक्षाएं और क्लासिफायर करने की आवश्यकता है।

(इसके अलावा मुझे आशा है कि आप जानते हैं कि आप केवल एक इंटरफ़ेस से आउटगोइंग ट्रैफ़िक को आकार दे सकते हैं, इनकमिंग नहीं। इसका मतलब है कि यदि आप अपलिंक को सीमित करना चाहते हैं, तो आपको इंटरनेट पर आउटगोइंग इंटरफ़ेस के साथ काम करना होगा या इंटरमीडिएट कतार डिवाइस का उपयोग करना होगा ।) lartc.org गाइड एक बहुत अच्छा संसाधन है।)

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