Linux Traffic Control (tc): praktiline juhend
12 min lugemine - 5. juuni 2026

Kontrollige ribalaiust, seadke liiklus prioriteediks ja kujundage sisse- ja väljaminekuid Linuxis koos tc-ga. Töötav HTB, IFB, DSCP ja fq_codel konfigureerimine reaalsete serverite jaoks.
Linuxi liikluse juhtimine (tc): praktiline juhend
Linuxi tc käsu abil saate otseselt kontrollida, kuidas teie server võrguliiklust haldab. Saate piirata ribalaiust teenuse kaupa, hoida interaktiivseid sessioone nagu SSH reageerivana, kui massülekanded tõusevad, ning kujundada nii väljaminevaid kui sissetulevaid vooge ühe tööriista abil. Käesolev juhend hõlmab põhimõisteid, töötavat HTB seadistust, sissetuleva liikluse kujundamist IFB abil, DSCP-põhist prioriteerimist ning seda, kuidas seda siluda, kui midagi ei tööta.
Kuidas tc töötab
Iga tc seadistus koosneb neljast liikuvast osast:
- qdisc (järjekorra distsipliin). Võrguliidesega seotud ajastaja. See otsustab, kuidas pakette järjekorda lisatakse ja sealt eemaldatakse.
- Klass. Alajaotus klassipõhises qdisc-is. Mõelge sellele kui sõidurajale, millel on oma kiiruspiirang.
- Filter. Kontrollib paketi päiseid (IP-aadresse, porte, märgistusi) ja määrab iga paketi klassi.
- Action. Mis juhtub paketiga, kui see vastab tingimustele: edastamine, kõrvaldamine, ümbersuunamine.
Need moodustavad puu. Paketid sisenevad juur-qdisc-i, läbivad filtrid, sorteeritakse klassidesse major:minor käepideme järgi klassidesse ja jõuavad edastamiseks lehe-qdisci järjekorda.
Kõikide portipõhisest vastavusest keerulisemate juhtude puhul märgistage paketid iptables või nftables abil mangle-tabelis, seejärel kasutage fw filtrit tc märgi järgi klassifitseerimiseks. See skaleerub palju paremini kui toore u32 reeglite ahelat iga liiklustüübi jaoks.
Väljaminev vs sissetulev
Suund on oluline. Tuum võib väljaminevaid pakette puhverdada ja viivitada, mis võimaldabki tõelist kujundamist. Sissetulevad paketid on juba võrgu läbinud, kui te neid näete, seega saate neid ainult kontrollida (kõrvalda üle künnise), kui te neid esmalt IFB-seadmesse ümber ei suuna.
| Funktsioon | Väljaminev | Sissetulev |
|---|---|---|
| Suund | Väljaminev | Sissetulev |
| Kujundamine | Põhine | Nõuab IFB-d |
| Järelevalve | Toetatud | Toetatud |
| Tüüpiline kasutus | QoS, ribalaiuse jagamine, kiiruse reguleerimine | Kiiruse piiramine, põhiline DDoS-rünnakute leevendamine |
Qdiscid, mida tegelikult kasutate
- HTB (Hierarchical Token Bucket). Klassipõhine. Kasutage seda, kui soovite garanteeritud minimaalse ribalaiuse teenuse kohta koos võimalusega laenata kasutamata võimsust teistest klassidest.
- TBF (Token Bucket Filter). Klassivaba. Kasutage seda, kui soovite piirata kogu liidese ühe kiirusega.
- fq_codel (Fair Queuing Controlled Delay). Ühendab vooõigluse aktiivse järjekorrahaldusega, et vältida puhvri ületäitumist. See on olnud vaikimisi qdisc enamikus Linuxi distributsioonides alates systemd 217-st ja on vaikimisi kaasas RHEL 9-s. Kinnitage see alati lehe-qdisc-ina HTB-klasside alla, vastasel juhul võib üks ahne voog hõivata kogu klassi.
Tc seadistamine Linuxi serveris
tc tuleb koos iproute2 paketiga. Debianis ja Ubuntus installige see käsuga apt-get install iproute2. RHEL-is ja selle derivaatides yum install iproute. Vajate root-õigusi või sudo-õigusi.
Leidke esmalt õige liidese nimi. Liidese vale nimetamine on kõige tavalisem põhjus, miks konfiguratsioon vaikimisi midagi ei tee:
ip link showKontrollige, mis liidesel juba on, sealhulgas reaalajas loendurid:
tc -s qdisc show dev eth0Kustutage kõik olemasolevad root qdisc-id enne uue konfiguratsiooni rakendamist, et vältida RTNETLINK answers: File exists vigu:
tc qdisc del dev eth0 root 2>/dev/null || trueKui te uuendate olemasolevat reeglit, mitte ei alusta nullist, kasutage replace asemel add atomaarse vahetuse jaoks.
Riistvaraline koormuse ülekandmine, nagu TSO ja GSO, pakettide koondamine viisil, mis segab kujundamist. Lülitage need kujundatud liidesel välja:
sudo ethtool -K eth0 tso off gso offMäärake fq_codel uute liideste süsteemiülese vaikimisi qdisc-iks:
sysctl -w net.core.default_qdisc=fq_codelHõivatud serverite puhul kombineerige seda BBR-i ülekoormuse kontrolli algoritmiga (kernel 4.9+). BBR hoiab läbilaskevõime kõrgena ilma järjekordi suurendamata:
sysctl -w net.ipv4.tcp_congestion_control=bbrÜks ohutusharjumus, kui konfigureerite kaugseadet SSH kaudu: avage teine sessioon ja hoidke tc qdisc del dev eth0 root valmis kleepimiseks. Vale filtrireegel võib teid koheselt välja lukustada.
Väljamineva liikluse kujundamine HTB abil
HTB võimaldab määrata igale teenusele garanteeritud miinimumi (rate) ja ülempiiri (ceil). Kasutamata ribalaius suunatakse sellele, kes seda vajab, prioriteetsuse järjekorras. Siin on toimiv kolmeastmeline seadistus 1 Gbps üleslingile.
Looge juur-HTB qdisc. default 30 saadab kõik klassifitseerimata paketid klassi 1:30 , selle asemel et lasta sellel teie reegleid mööda minna:
tc qdisc add dev eth0 root handle 1: htb default 30Piirata koguvõimsust 900 Mbps-ni. Kujundage alati veidi alla tegeliku ühenduse võimsuse, vastasel juhul moodustub järjekord ülesvoolu ruuteris või modemis, mida te ei kontrolli:
tc class add dev eth0 parent 1: classid 1:1 htb rate 900mbit ceil 900mbitMäärake teenuse tasemed. Madalamad prio väärtused saavad kasutamata ribalaiuse esimesena:
# High priority: web and API traffic
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500mbit ceil 900mbit prio 1
# Medium priority: database replication
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 300mbit ceil 900mbit prio 2
# Low priority: bulk and backup traffic
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 100mbit ceil 900mbit prio 3Lisage fq_codel iga klassi lehe-qdisc-ina, nii et üks voog ei saaks oma taset domineerida:
tc qdisc add dev eth0 parent 1:10 handle 10: fq_codel
tc qdisc add dev eth0 parent 1:20 handle 20: fq_codel
tc qdisc add dev eth0 parent 1:30 handle 30: fq_codelNüüd liigita liiklus. Lihtsa pordi sobitamise puhul u32 on kiireim:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 443 0xffff flowid 1:10Kõigi seisundipõhiste juhtumite puhul märgista iptablesis ja sobi märge kokku fw:
iptables -t mangle -A OUTPUT -p tcp --dport 5432 -j MARK --set-mark 2
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 2 fw flowid 1:20Sissetuleva liikluse kujundamine IFB abil
Sissetulevat liiklust ei saa algselt kujundada, sest kui pakett saabub, on see juba teie ribalaiust kasutanud. Lahenduseks on suunata sissetulev liiklus Intermediate Functional Block (IFB) virtuaalse liidese poole, kus tuum käsitleb seda väljaminevana ja võimaldab teil rakendada klassipõhiseid qdisc-e.
Laadige moodul ja käivitage liides:
modprobe ifb numifbs=1
ip link set dev ifb0 upLisage füüsilisele liidesele sissetuleva liikluse qdisc ja suunake kõik ümber ifb0:
tc qdisc add dev eth0 ingress handle ffff:
tc filter add dev eth0 parent ffff: protocol all u32 \
match u32 0 0 action mirred egress redirect dev ifb0Siit alates ifb0 käitub see nagu iga teine liides. Rakendage sellele oma HTB-puu täpselt nii, nagu teeksite väljamineva liikluse puhul:
tc qdisc add dev ifb0 root handle 1: htb default 30
tc class add dev ifb0 parent 1: classid 1:1 htb rate 900mbit ceil 900mbit
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 500mbit ceil 900mbit prio 1Liikluse prioriseerimine DSCP abil
DSCP (Differentiated Services Code Point) märgistab pakette 6-bitise väärtusega TOS-baitis, nii et teie tc filtrid saaksid klassifitseerida märgise järgi, selle asemel et otsida reeglistikus porte. Kui sobitate DSCP-d tc, nihutage väärtust 2 bitti vasakule. DSCP EF (46) muutub 0xb8. Mask 0xfc eraldab 6 DSCP-bitti 2 ECN-bitist.
Mõistlik vaikimisi kaardistus serveri töökoormuste jaoks:
| Liikluse tüüp | DSCP | TOS hex | Näited |
|---|---|---|---|
| Interaktiivne | EF | 0xb8 | SSH, DNS, VoIP |
| Äri | AF41 | 0x88 | HTTP, HTTPS, API-d |
| Hulgimüük | CS1 | 0x20 | Varukoopiad, FTP, pakettide uuendused |
| Parim tulemus | CS0 | 0x00 | Kõik muu |
Märgi väljaminevad paketid iptablesis enne, kui need jõuavad su tc filtritesse jõuavad:
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 46Seejärel sobita silt tc ja suunake see õigesse HTB-klassi:
# EF (SSH, VoIP) goes to the high-priority class
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip tos 0xb8 0xfc flowid 1:10
# AF41 (web traffic) goes to the medium class
tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
match ip tos 0x88 0xfc flowid 1:20
# CS1 (bulk) goes to the low-priority class
tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
match ip tos 0x20 0xfc flowid 1:30Jälgimine ja veaotsing
Kolm käsku, mida kasutate pidevalt:
tc -s qdisc show dev eth0
tc -s class show dev eth0
tc -s filter show dev eth0Jälgi dropped ja overlimits loendureid. Kaotatud paketid tähendavad, et järjekord on ülekoormatud; piiride ületamine tähendab, et olete jõudnud klassi ülempiirini ja tuum pidi liiklust edasi lükkama või katkestama. Reaalajas vaate saamiseks:
watch -n 1 'tc -s class show dev eth0'Lisage -d sisemiste parameetrite jaoks (sihtmärk, intervall, kvant) ja -j JSON-väljundiks, kui suunad andmed mõõdikute kuhja. Kasuta koos ss -tin , et näha RTT-hinnanguid ja kordusülekandeid TCP-kihis.
Enamik rikkeid kuulub lühikesse nimekirja:
| Sümptom | Tõenäoline põhjus | Parandus |
|---|---|---|
RTNETLINK answers: File exists | Root qdisc on juba konfigureeritud | tc qdisc del dev eth0 root esimene |
| Reeglid kehtivad, kuid liiklust ei piirata | Vale liides või TSO/GSO on endiselt sisse lülitatud | Kinnita ip link show, keela offloadid käsuga ethtool -K |
| Filter ei sobi kunagi | Vale pordi/IP-süntaks või maski joondus | Lisa vastumeede ja kontrolli tabamuste arvu tc -s filter show |
| Reeglid kaovad pärast taaskäivitamist | Konfiguratsioon asub ainult mälus | Pakenda skriptiks ja kutsu välja systemd või NetworkManageri dispetšerist |
| Suur latentsus prioriteetsel liiklusel | Puudub leaf qdisc või burst on liiga madal | Liitke fq_codel leheklassidele, tõsta burst |
Kui te kunagi lukustate end välja valesti konfigureerimise tõttu, on taastamine lihtne:
tc qdisc del dev eth0 roottc ei saa luua ribalaiust, mida sul pole, kuid hästi varustatud üleslingil teeb see vahe, kas jõudlus on ennustatav või server kukub kokku kohe, kui üks klient alustab suurt andmeedastust. Kui vajad toor-ribalaiust ja vabadust seda kujundada just nii, nagu soovid, vaata FDC pühendatud servereid.

Linux Traffic Control (tc): praktiline juhend
Kontrollige ribalaiust, seadke liiklus prioriteediks ja kujundage sisse- ja väljaminekuid Linuxis koos tc-ga. Töötav HTB, IFB, DSCP ja fq_codel konfigureerimine reaalsete serverite jaoks.
12 min lugemine - 5. juuni 2026
Miks on oluline, et VPS oleks võimas ja mittemeterdatud
7 min lugemine - 9. mai 2025

Kas teil on küsimusi või vajate kohandatud lahendust?
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt