Ipfw limitează viteza internetului (partea 2)

În prima parte a articolului IPFW: limitarea vitezei la Internet, am descris elementele de bază ale construirii canalelor și a firelor în rețeaua DUMMYNET. Este timpul să luăm în considerare un exemplu concret de lucru într-o rețea mică, unde toți utilizatorii au în comun același canal de comunicare.

Avem o conexiune DSL, deoarece canalul este asincron, viteza de încărcare este de 5 Mbit / s, viteza de încărcare este de 512 Kbit / s.

Primul lucru pe care avem nevoie pentru a adăuga suport DUMMYNET în nucleul sistemului, în același timp, inclusiv NAT nucleară și firewall (cred că la poarta de acces, sunt necesare aceste opțiuni, în caz contrar este poarta de acces pentru acest lucru se dovedește):

opțiuni IPFIREWALL
opțiuni IPFIREWALL_VERBOSE
opțiuni IPFIREWALL_VERBOSE_LIMIT = 100
opțiuni IPFIREWALL_FORWARD
opțiuni IPFIREWALL_DEFAULT_TO_ACCEPT
opțiuni IPFIREWALL_NAT
opțiuni DUMMYNET
opțiuni HZ = 1000

Detaliile despre cum se colectează kernelul, nu voi - într-un blog despre acest lucru a fost deja scris, iar rețeaua nu este o problemă de găsit. Să trecem la ajustare. /etc/rc.firewall adăugăm regulile noastre la configurația firewallului:

$ țeavă 1 config bw 5Mbit / s
$ pipe 11 config bw 512Kbit / s
$ coadă 1 config pipe 1 mască dst-ip 0xffffffff
$ coadă 2 config pipe 11 mască src-ip 0xffffffff
$ add queue 1 ip de la orice la 192.168.1.0/24
$ add queue 2 ip de la 192.168.1.0/24 la orice

Să vedem ce scrie aici. Două țevi sunt create: conducta 1 - 5 Mbit / s și țeavă 11 - 512 Kbit / s:

$ țeavă 1 config bw 5Mbit / s
$ țeavă 11 config bw 512Kbit / s

Un punct important și fundamental trebuie notat când se specifică viteza conductei. Ar trebui să corespundă lărgimii reale a canalului, deoarece acest lucru determină direct funcționarea corectă a întregului sistem de separare a traficului.

De exemplu, furnizorul a declarat o viteză de 6 Mbit / s, dar pentru funcționarea corectă a țevii am stabilit 5 Mbit / s, tk. acest lucru este în concordanță cu viteza reală din canal. Cu o valoare de viteză mai mare decât canalul poate furniza, întregul sistem de separare încetează să mai funcționeze.

Pentru fiecare țeavă sunt create cozi:

$ coadă 1 config pipe 1 mască dst-ip 0xffffffff
$ queue 2 config pipe 11 mască src-ip 0xffffffff

Întrucât există o sarcină de distribuție uniformă a canalului de internet între toți utilizatorii, este necesar să se creeze cozi corespunzătoare numărului acelorași utilizatori, atât pentru traficul de intrare, cât și pentru cel de ieșire. Este clar că a face acest lucru manual, pentru a spune ușor, este plictisitor. Prin urmare, vom crea o singură coadă cu o mască pentru fiecare canal, simplificând astfel sarcina pentru noi înșine.

masca este valoarea prin care sunt divizate cozile:

Rămâne să ne conducem traficul în aceste cozi:

$ add queue 1 ip de la orice la 192.168.1.0/24
$ add queue 2 ip de la 192.168.1.0/24 la orice

# ipfw țeavă arată 00001: 5.000 Mbit / s 0 ms spargere 0
q131073 50 sl. 0 debite (1 găleți) proiectate 65537 greutate 0 lmax 0 pri 0 droptail
sched 65537 tip steaguri FIFO 0x0 0 găleți 0 activ
00011: 512.000 Kbit / s 0 ms spargere 0
q131083 50 sl. 0 debite (1 găleți) proiectate 65547 greutate 0 lmax 0 pri 0 droptail
sched 65547 tip steaguri FIFO 0x0 0 găleți 0 activ

Această comandă vă poate ajuta foarte mult când depanați regulile. Când testați și adăugați noi reguli IPFW, nu este o idee proastă de a curăța vechile reguli:

# ipfw -f flush # ipfw -f țeavă de spălare # ipfw -f queue flush

Dacă utilizați un paravan de protecție (dacă acesta nu este deschis), trebuie să setați variabila sysctl - net.inet.ip.fw.one_pass la 0 (defaulted la "1"). Acest lucru este necesar pentru ca pachetele să nu "cadă" pe țeavă din paravanul de protecție (ca în regula de rezolvare).

Pentru a face schimbările să nu se piardă în timpul rebootării, scrieți variabila net.inet.ip.fw.one_pass în fișierul /etc/sysctl.conf.

P.S. Am dat doar un exemplu de instalare a DUMMYNET pentru distribuția de viteză pe Internet. Desigur, puteți face configurații mai avansate - puteți aloca canale fixe cu o viteză dată pentru sarcini prioritare, protocoale individuale etc.

Dacă considerați că articolul este util,
nu fi leneș să-i placă și să-i împărtășești prietenilor.