ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ°:
ΡΡΠ΄Π°-ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΌΠΈΠ½/ΡΡ/ΠΌΠ°ΠΊΡ = 14.4/17.1/21.7 ΠΌΡΠ΅ΠΊ
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ, Π±Π΅Π· ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ°:
ΡΡΠ΄Π°-ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΌΠΈΠ½/ΡΡ/ΠΌΠ°ΠΊΡ = 560.9/573.6/586.4 ΠΌΡΠ΅ΠΊ
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ°, Π±Π΅Π· ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ°:
ΡΡΠ΄Π°-ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΌΠΈΠ½/ΡΡ/ΠΌΠ°ΠΊΡ = 2041.4/2332.1/2427.6 ΠΌΡΠ΅ΠΊ
Π‘ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠΊΠΎΡΠΎΡΡΠΈ 220 ΠΠ±ΠΈΡ/ΡΠ΅ΠΊ:
round-trip min/avg/max = 15.7/51.8/79.9 ΠΌΡΠ΅ΠΊ
Π‘ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΡΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠΊΠΎΡΠΎΡΡΠΈ 850 ΠΠ±ΠΈΡ/ΡΠ΅ΠΊ:
ΡΡΠ΄Π°-ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΌΠΈΠ½/ΡΡ/ΠΌΠ°ΠΊΡ = 20.4/46.9/74.0 ΠΌΡΠ΅ΠΊ
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°, ΡΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ~80% ΠΎΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΠΎΠ»Π΅Π±Π»Π΅ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 90%. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅Ρ Π΄ΠΎ 850 ΠΌΡΠ΅ΠΊ, ΠΏΡΠΈΡΠΈΠ½Π° ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΡΡΠ½Π΅Π½Π°.
Π§Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΠΎ ΠΈ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»ΠΈΠ²Π°Π΅Ρ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΏΡΠ΅Π΄Π΅Π», ΡΠ°Π·Π΄Π΅Π»ΠΈΠ² MTU Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π»Ρ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ΅. Π§ΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΡΡ Π»ΡΡΡΠ΅Π³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ MTU!
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ°. ΠΠ΄Π½Π° Π²Π΅ΡΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° Π±Π°Π·Π΅ HTB, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΠ΅Π²ΠΈΠΊΠΎΠΌ (Devik), Π΄ΡΡΠ³Π°Ρ -- Π½Π° Π±Π°Π·Π΅ CBQ, ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ HTB, Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠΎΡΡΠ°Π² ΡΠ΄ΡΠ° Linux. ΠΠ±Π° ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ ΠΈ Π΄Π°ΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
15.8.2. Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° Π±Π°Π·Π΅ CBQ.
ΠΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Ρ Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΠ΄ΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²Π½ΡΡΡΠΈ CBQ qdisc ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π΄Π²Π΅ SFQ (Stochastic Fairness Queues), ΡΡΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ .
ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ tc-ΡΠΈΠ»ΡΡΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Token Bucket Filter.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΡΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² bounded Π² ΡΡΡΠΎΠΊΠ°Ρ , Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΡΡ ΡΠΎ ΡΠ»ΠΎΠ² tc class add .. classid 1:20. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ MTU, Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ allot ΠΈ avpkt!
#!/bin/bash
# Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ° Π΄Π»Ρ Π΄ΠΎΠΌΠ°ΡΠ½Π΅Π³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ
#
#
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
# ΠΠ΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ -- ΠΊΠΈΠ»ΠΎΠ±ΠΈΡΡ
DOWNLINK=800
UPLINK=220
DEV=ppp0
# ΠΎΡΠΈΡΡΠΊΠ° Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΉ qdisc
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
###### ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ
# ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ CBQ
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit
# ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΎΠ±ΡΡΡ ΠΈΡΡ ΠΎΠ΄ΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ $UPLINK -- ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ
# ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π² DSL ΠΌΠΎΠ΄Π΅ΠΌΠ΅,
# ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π²Π΅Π»ΠΈΡΠΈΠ½Π΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ:
# Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ
tc class add dev $DEV parent 1: classid 1:1 cbq rate ${UPLINK}kbit \
allot 1500 prio 5 bounded isolated
# Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ (ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ) ΠΊΠ»Π°ΡΡ 1:10:
tc class add dev $DEV parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit \
allot 1600 prio 1 avpkt 1000
# ΠΊΠ»Π°ΡΡ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1:20 -- ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ°
# ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ:
tc class add dev $DEV parent 1:1 classid 1:20 cbq rate $[9*$UPLINK/10]kbit \
allot 1600 prio 2 avpkt 1000
# ΠΎΠ±Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Ρ Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
# ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠΎΠ²
# TOS = Minimum-Delay (ssh, ΠΠ ΠΠ scp) -- Π² 1:10:
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
match ip tos 0x10 0xff flowid 1:10
# ICMP (ip protocol 1) -- Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ 1:10
# ΡΠ°ΠΊ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄ΠΈΠ²ΠΈΡΡ ΡΠ²ΠΎΠΈΡ Π΄ΡΡΠ·Π΅ΠΉ:
tc filter add dev $DEV parent 1:0 protocol ip prio 11 u32 \
match ip protocol 1 0xff flowid 1:10
# ΠΠΎΠ΄Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ -- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ACK-ΠΏΠ°ΠΊΠ΅ΡΡ
# Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ:
tc filter add dev $DEV parent 1: protocol ip prio 12 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:10
# ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ Π² 1:20
tc filter add dev $DEV parent 1: protocol ip prio 13 u32 \
match ip dst 0.0.0.0/0 flowid 1:20
########## Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ #############
# Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°,
# ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ Ρ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΡΡΠ»ΡΠ³.
# ΠΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ,
# ΠΏΠΎΡΡΠΎΠΌΡ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠ΄Π±Π΅ΡΠΈΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ,
# ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
#
# ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ:
tc qdisc add dev $DEV handle ffff: ingress
# ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄ (0.0.0.0/0), ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΡΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ppp β ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² /etc/ppp/ip-up.d.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ β ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡ tc!
15.8.3. Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° Π±Π°Π·Π΅ HTB.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ HTB (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» Hierarchical Token Bucket). Π’ΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ "Π·Π°ΠΏΠ»Π°ΡΡ" Π½Π° ΡΠ΄ΡΠΎ!
#!/bin/bash
# Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ° Π΄Π»Ρ Π΄ΠΎΠΌΠ°ΡΠ½Π΅Π³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ
#
#
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
# ΠΠ΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ -- ΠΊΠΈΠ»ΠΎΠ±ΠΈΡΡ
DOWNLINK=800
UPLINK=220
DEV=ppp0
# ΠΎΡΠΈΡΡΠΊΠ° Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΉ qdisc
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
###### ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ
# ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ HTB, ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² 1:20:
tc qdisc add dev $DEV root handle 1: htb default 20
# ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΎΠ±ΡΡΡ ΠΈΡΡ ΠΎΠ΄ΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ $UPLINK -- ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ
# ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π² DSL ΠΌΠΎΠ΄Π΅ΠΌΠ΅,
# ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π²Π΅Π»ΠΈΡΠΈΠ½Π΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ:
tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k
# Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ (ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ) ΠΊΠ»Π°ΡΡ 1:10:
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
burst 6k prio 1
# ΠΊΠ»Π°ΡΡ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1:20 -- ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ°
# ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ:
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[9*$UPLINK/10]kbit \
burst 6k prio 2
# ΠΎΠ±Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Ρ Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
# TOS = Minimum-Delay (ssh, ΠΠ ΠΠ scp) -- Π² 1:10:
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
match ip tos 0x10 0xff flowid 1:10
# ICMP (ip protocol 1) -- Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ 1:10
# ΡΠ°ΠΊ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄ΠΈΠ²ΠΈΡΡ ΡΠ²ΠΎΠΈΡ Π΄ΡΡΠ·Π΅ΠΉ:
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
match ip protocol 1 0xff flowid 1:10
# ΠΠΎΠ΄Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ -- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ACK-ΠΏΠ°ΠΊΠ΅ΡΡ
# Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ:
tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:10
# ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² 1:20
########## Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ #############
# Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°,
# ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ Ρ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΡΡΠ»ΡΠ³.
# ΠΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ,
# ΠΏΠΎΡΡΠΎΠΌΡ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠ΄Π±Π΅ΡΠΈΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ,
# ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
#
# ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ: