Configurarea formatorului htb pe un router bazat pe linux de birou cu blogul lui Alexandr

Am decis să scriu un mic HOWTO pentru a configura configurația HTB pe un router Linux (router) utilizând scriptul htb.init. Sarcina este următoarea: există rețea de birou, există o conexiune la Internet la o anumită viteză, în cazul de față este de 20 de megabiți pe intrare și 5 megabiți de rezultat, rata ar trebui să fie împărțită echivalent între calculatoare de birou, dar în cazul în care canalul nu este încărcat - pentru a da posibilitatea de a lucra la viteza maximă . În acest mod, vor exista nu numai traficul de intrare, ci și cel de ieșire, iar conexiunea la Internet se face prin PPP, ceea ce impune anumite nuanțe în tuning.







Configurația este prezentată în exemplul distribuției CentOS (RHEL, Fedora), pentru Debian (Ubuntu), de asemenea, pentru că unele utilitare de sistem sunt diferite.

Mai întâi trebuie să descărcați și să configurați script-ul pentru a construi reguli pentru formatorul pentru a da un exemplu, nu script-ul original, și modificat de mine (corectează unele bug-uri, a adăugat ștergeți cache-ul atunci când reporniți formatorul, adică. A. este în cache sunt înregistrările care nu mai există în configurația fișiere, versiunea 0.8.4):

Scriptul este încărcat, realizat pornind, symlink-ul este plasat acolo unde este necesar, acum este necesar să îl includeți în autoloading, pentru CentOS (RHEL, Fedora):

Același lucru pentru Debian (Ubuntu):

Apoi, trebuie să creați directoare pentru fișierele de configurare Shaper:

Apoi, descrierea fișierului din clasa de interfață a rădăcinilor indică viteza fizică a interfeței, în acest caz este de 100 megabit.

În primul rând, trebuie să tăiați viteza de trafic provenită de la routerul însuși, de exemplu, dacă are instalat un server de fișiere, puteți da o viteză mai mare decât Internetul și această viteză nu va afecta viteza internetului. 100 - 20 de megabiți, bine, 10 pot fi lăsate pe pachete de service etc, astfel încât bara nu se formează (sarcină interfață completă), iar lucrul rămâne confortabil, obținem 70 de megabiți. Viteza de la serverul de fișiere poate fi, de asemenea, împărțită în mod egal între participanții la rețea, dar în acest exemplu este omisă.

Acum coada de descriere a clasei de trafic de pe Internet. Un megabit va rămâne pentru trafic care nu este prins în reguli, 19 megabiți rămân de descris. Aici, prioritatea este specificată mai mult decât în ​​traficul local de la router, ceea ce este mai mult, cu atât este procesat mai târziu.

Acest trafic, care nu se încadrează în regulile anterioare - se formează la o viteză de 1 megabit.

Acum, traficul de ieșire. În principiu, aceeași interfață ppp0, viteza de 5 megabiți, traficul care nu se încadrează în reguli este dat 128 kilobiți (ultimul fișier), restul de la 512 kilobiți la 5 megabiți. Traficul de la router va fi, de asemenea, formabil.

Acum despre etichete. În iptables, trebuie să marcați traficul de ieșire, aceasta se face prin următoarea regulă din tabelul de mangle:

Pentru fiecare calculator - propria sa regulă. În CentOS (RHEL, Fedora), regulile de firewall sunt de obicei găsite în fișierul / etc / sysconfig / iptables. După editare, trebuie să aplicați modificările cu comanda:

În Debian (Ubuntu) puteți face acest lucru. Eliminați configurația curentă în fișier:

Corectați și aplicați:

Aceste comenzi funcționează în CentOS (RHEL, Fedora), dacă este necesar. Mai departe. Configurarea a fost terminată, acum trebuie să verificați corectitudinea configurației:

Dacă nu există erori, veți vedea că ați construit scriptul htb.init pentru sistem bazat pe fișierele de configurare. Acum puteți începe formatorul:

Fișierul trebuie să fie executat:

Acesta va fi rulat pe cron, în fiecare minut, în acest scop următoarele fișiere sunt adăugate fișierului / etc / crontab:

Bine ai venit! ar putea să vă spun de configurare, de configurare a rețelei astfel, interfața eth0 este în căutarea în lumea de 1,5 megabiti, eth1 = 1Gbit LAN poarta de acces la 192.168.2.100, eth2 = 1Gbit gateway-ul 192.168.2.99, există 2 tipuri de utilizatori pe utilizatorii de internet adresa eth1 fără restricții 1Mbit pentru resurse, iar clienții gateway-eth2 jocuri online 512Kbit cu acces numai porturile de jocuri și nu orice pagini, lokalku de 30 de mașini pe aceeași subrețea

Care este lățimea canalului dvs. extern? Câte persoane sunt în clasa RATE? Și, în general, ce viteze aveți pentru CEIL și RATE în clasa rădăcină și în clasele individuale? Căci, dacă aveți negarantat ceil = 512Kbit la toate, și (partajat) clasa rădăcină este, de asemenea, la 512, atunci totul este corect, viteza ar trebui să fie împărtășită în mod proporțional cu două / trei, și așa mai departe. N. clienților, în funcție de numărul lor.

Priviți cu atenție exemplul meu, viteza maximă a canalului din clasa rădăcină, iar acest maxim în viteza neglijată CEIL este deja înregistrată în clasa client, iar viteza garantată este deja scrisă în RATE.

situația este după cum urmează:
router, fc14, 2 interfețe, eth0 - privitor la clienți, IP = 172.20.10.1, rețea 172.20.10.0/24
interfata eth1 - canal dedicat Internetului, IP alb

în directorul / etc / sysconfig / htb. fișiere:
eth0:
DEFAULT = 9

eth0-2: 9.default:
RATE = 256Kbit
PRIO = 5
LEAF = sfq

eth1-2: 9.default:
RATE = 256Kbit
PRIO = 5
LEAF = sfq

și terminat
/ etc / sysconfig / htb restart

Când clientul este deconectat, acest fișier este șters.

Viteza la client în loc de 512 doar 256.
Ce altceva am uitat să fac?

Se pare că regula pe care o adăugați nu se aplică sau regula nu intră în traficul utilizatorului, deoarece 256 este clasa DEFAULT, care primește trafic care nu se încadrează în alte reguli. Uită-te la situația reală de pe interfață:







tc -s arată clasa dev eth0

Trebuie să existe o clasă de primă clasă pentru această regulă, în al doilea rând, ar trebui să existe pachete în contoare, bine, a scăzut pachetele atunci când limita de viteză este depășită.

clasa este, contoarele sunt goale:

clasa htb 1: 9 părinte 1: 2 frunze 9: prio 5 rate 256000bit plafon 256000bit spargere 1600b cburst 1600b
Trimise 10920 octeți 174 pkt (a scăzut 0, depășesc 0 cerințe 0)
rata 2128bit 4pps backlog 0b 0p requeues 0
împrumutat: 174 împrumutat: 0 giganți: 0
jetoane: 765641 ctokens: 765641

clasa htb rata rădăcină 1: 2 rata 100000Kbit plafon 100000Kbit spargere 1600b cburst 1600b
Trimise 10920 octeți 174 pkt (a scăzut 0, depășesc 0 cerințe 0)
rata 2128bit 4pps backlog 0b 0p requeues 0
împrumutat: 0 împrumutat: 0 giganți: 0
jetoane: 1969 cokeni: 1969

> pisică / etc / sysconfig / htb / eth0-2: 5: 1010
CEIL = 5Mbit
RATE = 512Kbit
LEAF = sfq
PRIO = 5
REGULAMENT = 172.20.10.10

Și tcpdump -nni eth0 dst gazdă 172.20.10.10 traficul arată?

Evident, traficul nu intră în regulă, așa că nu este confuz, poate interfețe sau confuzie de intrare / rezultat?

REGULA = 172.20.10.10 - indică gazda dst, dar
REGULA = 172.20.10.10, - indică gazdă src

NDA ...
totul sa dovedit a fi mult mai rău ...
acele cifre de viteză pe care le-am obținut au fost pentru traficul de ieșire (iperf-um măsurat, s-ar putea ajunge la server prin curent, în sens invers - în nici un fel)
așa se dovedește așa - viteza de ieșire este reglată de valoarea din fișierul eth1-2: 9.default.
Ei bine, nu-mi pasă de cei care pleacă, dar cel care vine este întotdeauna același și egal cu 128 kbit / s, ceea ce nu aș face ...
a plecat să stea

Apropo, pentru a nu fi confuz - pentru a stabili mai întâi intrarea și cei care pleacă nu ating deloc, veți fi confundați mai puțin.

Văd că ești un om de înțelegere. Am configurat această schemă prin tc, tot traficul, din anumite motive, a fost trimis la clasa implicită, indiferent ce am scris în filtru. Am găsit această instrucțiune, am creat totul ca în imagine. Totuși, tot traficul merge la clasa implicită. Care ar putea fi problema? Distribuție Ubuntu 10.04

Am redeschis-o într-un mod nou, în speranța că undeva am făcut încă o greșeală. Problema a rămas, dacă nu greu să arunci un deget unde să săpească)

compile afișează următoarele:

tc qdisc del dev rădăcină eth0
tc qdisc adăugați dev eth0 rădăcină mâner 1 htb implicit 9

tc clasă adăugați dev eth0 părinte 1: classid 1: 2 rata de htb 100Mbit

tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 4 htb rata 90Mbit prio 4
tc qdisc adăugați dev eth0 părinte 1: 4 mâner 4 sfq perturb 10
tc filtru adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip src 192.168.0.0/24 classid 1: 4

tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 5 htb rata 100Kbit prio 5

tc clasă adăugați dev eth0 părinte 1: 5 classid 1: 1010 htb rata 50Kbit plafon 100Kbit prio 5
tc qdisc adăugați dev eth0 părinte 1: 1010 mâner 1010 sfq perturbare 10
tc filtru adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip dst 10.8.0.10 classid 1: 1010

tc clasă adăugați dev eth0 părinte 1: 5 classid 1: 1011 htb rata 50Kbit plafon 100Kbit prio 5
tc qdisc adăugați dev eth0 părinte 1: 1011 mâner 1011 sfq perturbare 10
tc filtru adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip dst 10.8.0.11 classid 1: 1011

tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 9 htb rata 20Kbit prio 5
tc qdisc adăugați dev eth0 părinte 1: 9 mâner 9 sfq perturbare 10

Reconfigurarea vsetaki a ajutat, în același timp a găsit o eroare în linie
tc filtru adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip src 192.168.0.0/24 classid 1: 4
Și am aceeași rețea 10.8.0.0/16 🙂

Multe mulțumiri pentru articolul Alexander.

🙂 nici un motiv, este doar o greșeală nefericită ...

Se agită dar greu pe RATE, ce poate fi comun?

Iată cum arată:

RATE = 1Mbit
CEIL = 10Mbit
PRIO = 5
LEAF = sfq
REGULA = 10.8.0.10

Rezultatul compilației din mesajul precedent.

Nu, mai intai da viteza mai aproape de CEIL, dupa cateva secunde coboara la RATE si nu se intoarce (

Aveți o viteză totală de 100 kilobiți:

tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 5 htb rata 100Kbit prio 5

Și apoi distribuiți garantat 50, negarantat 100 (KILOBIT). Nu știu de ce aveți nevoie de astfel de "viteze mari" :), dar ați descris 3 clienți, deși 2 pot deja să înscrie o banda comună la bar. Și această bandă este foarte ușor de înscris. Cred că asta se întâmplă. Și este încă bine că viteza scade doar la rată și nu este chiar mai mică.

Eu pentru test a pus astfel de viteze, și că nu byllo pe ceea ce va fi instruit)

Și când am decis să fac ceva serios, nu l-am schimbat. viteza, multumesc din nou)

Bună ziua! Spune-mi ce fac greșit:
interfață în locok eth0, eth1 la furnizor, ppp0 este în creștere pentru Ineta.
Am reglat totul pe manual, dar nu te agita

/ sbin / tc qdisc del dev rădăcină eth0
/ sbin / tc qdisc adăugați dev eth0 root handle 1 htb implicit 9

/ sbin / tc qdisc del dev ppp0 rădăcină
/ sbin / tc qdisc adăugați dev ppp0 root handle 1 htb implicit 9

/ sbin / tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 4 htb rata 100Mbit prio 4
/ sbin / tc qdisc adăugați dev eth0 părinte 1: 4 mâner 4 sfq perturb 10
/ Sbin / filtru tc adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip dst 192.168.0.0/16 classid 1: 4

/ Sbin / tc class add dev eth0 părinte 1: 5 classid 1: 1002 Rata htb 512Kbit ceil 1Mbit prio 5
/ sbin / tc qdisc adăugați dev eth0 părinte 1: 1002 mâner 1002 sfq perturb 10
/ Sbin / filtru tc adăuga dev eth0 părinte 1: 0 protocol ip prio 100 u32 meci ip dst 192.168.0.11 classid 1: 1002

/ sbin / tc clasă adăugați dev eth0 părinte 1: 2 classid 1: 9 htb rata 512Kbit prio 5
/ sbin / tc qdisc adăugați dev eth0 părinte 1: 9 mâner 9 sfq perturbare 10

/ class sbin / tc adăuga dev ppp0 părinte 1: 2 classid 1: 5 htb rata 5Mbit prio 5

/ Sbin / tc class add dev ppp0 părinte 1: 5 1 classid 1001 Rata htb 512Kbit ceil 5Mbit prio 5
/ sbin / tc qdisc adăugați dev ppp0 părinte 1: 1001 mâner 1001 sfq perturbare 10
/ filtru sbin / tc adăugați dev ppp0 părinte 1: 0 protocol ip prio 200 mâner 1001 fw classid 1: 1001

/ class sbin / tc adăuga dev ppp0 părinte 1: 2 classid 1: 9 htb rata 128Kbit prio 5
/ sbin / tc qdisc adăugați dev ppp0 părinte 1: 9 mâner 9 sfq perturbare 10

Pachetele etichetate:
Lanțul PREROUTING (politica ACCEPT)
direcționați țintă destinație sursă pro opt
MARK all - 192.168.0.11 oriunde MARK xset 0x3e9 / 0xffffffff

Deci nu modelează rezultatul? Dă ieșire iptables-salvează partea care pune etichetele, cred că există o problemă.

POSTROUTING ACCEPT [78714397: 34898500393]
-A PREROUTING -s 192.168.0.11/32 -j MARK -set-Xmark 0x3e9 / 0xffffffff
COMMIT

Fac toate acestea pe serverul Ubuntu, kernel 2.6.32-39

Din punct de vedere vizual, totul este corect. Puteți încerca să vedeți cum intră traficul în regulile:

tc -s qdisc arată dev eth0
tc -s qdisc arată dev ppp0

Mai mult, în acest nucleu 2.6.32 schimbat în unele versiuni ale mecanismului de formare, care ne conduce la o subestimare a vitezei de tăiere de intrare și de ieșire ar putea într-un fel în legătură cu ea. Puteți încerca o altă versiune a kernel-ului, de exemplu, 2.6.36?

tc -s qdisc arată dev eth0
qdisc pfifo_fast 0: RefCnt rădăcină 2 benzi priomap 1 2 2 3 2 1 2 0 0 1 1 1 1 1 1 1 1
Trimise 13365370 octeți 14533 pkt (a scăzut 0, depăși 0 cerințe 0)
backlog 0b 0p cerințe 0

Dar era un Poser, nu știu dacă formatorul sau nu a influențat - viteza de internet a scăzut la 2 Mbps și nu mai este în creștere, deși arată Iperf [3] 0.0-10.1 sec 12.9 MByți 10,8 Mbiți / sec
dar clienții spidtestom - 1-2 mb și toate, și acesta este de la 30-50 posibil 🙁
A devenit un cablu care merge la server - la viteza maximă ea, adică se pierde undeva în server, HTB script-ul eliminat pentru test, iar directorul / etc / HTB, de asemenea - nu a ajutat ....

Dacă doriți să opriți formatorul, nu este necesar să îl ștergeți, dar opriți-l.

I stopal HTB, nu a rezolvat problema. Pune cum ar fi ubuntu-doar configura ppp și masquerading, încă nu au viteza, problema nu este în formatorului a fost 🙁 pe CentOS 6 - viteza maximă ... minuni și mai mult!
Acum căutăm soluții de la ideco.
Vă mulțumesc foarte mult pentru consultare!

Da, nu puneți întrebări, vă rugăm să contactați :).







Trimiteți-le prietenilor: