HTB blues
k_dendra@o2.pl
k_dendra w o2.pl
Śro, 28 Sie 2002, 10:38:12 CEST
Witam wszystkich!
Ponieważ już tracę pomysły zwracam się z prośbą o pomoc.
Może robię coś absurdalnego, a nie widzę...
Moja konfiguracja testowa
serwer FTP - staruszek slackware
laptop - szajs, ale pcimcia 10MB chodzi
PLD - clue całej imprezy:
#uname -a
Linux test 2.2.21 #1 Wed Aug 21 10:21:47 UTC 2002 i686 Celeron_
(Mendocino) unknown GNU/Linux
laptop------------(eth1)PLD(eth0)---------serwer FTP
(z niego testuję) !HTB! do testów
Wszystkie kompy w zasięgu ręki.
Ponieważ za PLD mam zawiłą konfigurację (sieć na antenach preferuje
kaskadową maskaradę) nie przydzielam przepustowości po IP źródłowym,
więc skrypty typu shaperd-CBQ odpadają.
W planie - regulacja ruchu wejściowego i wyjściowego(żeby p2p
wszystkim chodziło podobnie i nie blokowało SMTP i ssh)
Problem pojawia sie juz w trakcie testów ftp/pld/laptop
nie mam pojęcia dlaczego:
Download ok 30..35kBps << nawet rate nie wykorzystuje :(
Upload ok 100..110 kBps < większy niż ceil!
Pomiary testowe bezczelnie robie ftp'em z WindowsCommandera.
Download zwiększa się dopiero, gdy ceil
Gdzie szukać błędu?
Skrypt poniżej.
Za wszelkie sugestie wielkie dzięki!
Krzysztof "Xyo" Dendra
#!/bin/bash
# w zależności od potrzeb debugu:
# set -x
###########################
#
# Xyo's Traffic Controller
#
# v:0.1
#interfejsy i predkosci outdev w kilobitach na sekunde
INDEV=eth1
OUTDEV=eth0
DOWNLINK=1024
UPLINK=1024
#aby kolejki nie tworzyly sie w modemie DSL dajemy XX% predkosci
# R bo niby "real"
RDOWNLINK=$[95*${DOWNLINK}/100]
RUPLINK=$[95*${UPLINK}/100]
#priorytety i przepustowosci
# DOWNLINK
# 10% na ICMP, SSH,ACK :klasa 10
PRIOMAXDOWN=$[10*${RDOWNLINK}/100]
# 65% na WWW i POP :klasa 20
PRIOMIDDOWN=$[65*${RDOWNLINK}/100]
# 25% na wszystko inne :klasa 30
PRIOLOWDOWN=$[25*${RDOWNLINK}/100]
# UPLINK
# 30% na SMTP, ICMP, SSH :klasa 10
PRIOMAXUP=$[30*$RUPLINK/100]
# 20% na FTP :klasa 20
PRIOMIDUP=$[20*$RUPLINK/100]
# 50% na wszystko inne :klasa 30
PRIOLOWUP=$[50*$RUPLINK/100]
#Wyczysc kolejki dla wysylania i sciagania danych, nie informuj o
bledach
tc qdisc del dev $INDEV root 2> /dev/null > /dev/null
tc qdisc del dev $INDEV ingress 2> /dev/null > /dev/null
tc qdisc del dev $INDEV egress 2> /dev/null > /dev/null
tc qdisc del dev $OUTDEV root 2> /dev/null > /dev/null
tc qdisc del dev $OUTDEV ingress 2> /dev/null > /dev/null
tc qdisc del dev $OUTDEV egress 2> /dev/null > /dev/null
# Ksztaltujemy ruch przychodzacy, czyli na interfejsie INDEV
#
# 1. Zainstaluj w korzeniu kolejke HTB i wyslij ruch domyslny do
kolejki 30
tc qdisc add dev $INDEV root handle 1: htb default 30
# 2. Stworz kolejke rodzicielska
tc class add dev $INDEV parent 1: classid 1:1 htb rate ${RDOWNLINK}
kbit ceil ${RDOWNLINK}kbit
# 3. Czas na kolejki wlasciwe
tc class add dev $INDEV parent 1:1 classid 1:10 htb rate
${PRIOMAXDOWN}kbit burst 30k ceil ${RDOWNLINK}kbit
tc class add dev $INDEV parent 1:1 classid 1:20 htb rate
${PRIOMIDDOWN}kbit burst 30k ceil ${RDOWNLINK}kbit
tc class add dev $INDEV parent 1:1 classid 1:30 htb rate
${PRIOLOWDOWN}kbit burst 30k ceil ${RDOWNLINK}kbit
# 4. Wszystkie trzy kolejki kontrolujemy przez stochastyczny
sprawiedliwy podzial (SFQ)
tc qdisc add dev $INDEV parent 1:10 handle 11: sfq perturb 10
tc qdisc add dev $INDEV parent 1:20 handle 22: sfq perturb 10
tc qdisc add dev $INDEV parent 1:30 handle 33: sfq perturb 10
# 5. Magia filtrow, czyli jak wrzucic wszystko do odpowiednich
kolejek
# 5a PRIOMAXDOWN
# po ToS czyli poszlo ssh
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
tos 0x10 0xff flowid 1:10
# na wypadek wszelki ssh po sporcie
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
sport 22 0xffff flowid 1:10
# ftpcontrol po sporcie
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
sport 21 0xffff flowid 1:10
# ICMP do klasy interaktywnej
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
protocol 1 0xff flowid 1:10
# ACK wsadz do klasy interaktywnej
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 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
# 5b PRIOMIDDOWN
# port przeznaczenia=80 czyli WWW
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
sport 80 0xffff flowid 1:20
# testowo ftpdata
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
sport 20 0xffff flowid 1:20
# port przeznaczenia=110 czyli POP3
tc filter add dev $INDEV parent 1:0 protocol ip prio 1 u32 match ip
sport 110 0xffff flowid 1:20
# 5c PRIOLOWDOWN
# tu trafia cala reszta, czyli nie piszemy nic
# Ksztaltujemy ruch wychodzacy, czyli na interfejsie OUTDEV
#
# 1. Zainstaluj w korzeniu kolejke HTB i wyslij ruch domyslny do
kolejki 30
tc qdisc add dev $OUTDEV root handle 1: htb default 30
# 2. Stworz kolejke rodzicielska
tc class add dev $OUTDEV parent 1: classid 1:1 htb rate ${RUPLINK}
kbit ceil ${RUPLINK}kbit
# 3. Czas na kolejki wlasciwe
tc class add dev $OUTDEV parent 1:1 classid 1:10 htb rate
${PRIOMAXUP} kbit burst 30k ceil ${RUPLINK}kbit
tc class add dev $OUTDEV parent 1:1 classid 1:20 htb rate
${PRIOMIDUP} kbit burst 30k ceil ${RUPLINK}kbit
tc class add dev $OUTDEV parent 1:1 classid 1:30 htb rate
${PRIOLOWUP} kbit burst 30k ceil ${RUPLINK}kbit
# 4. Wszystkie trzy kolejki kontrolujemy przez stochastyczny
sprawiedliwy podzial (SFQ)
tc qdisc add dev $OUTDEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $OUTDEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $OUTDEV parent 1:30 handle 30: sfq perturb 10
# 5. Magia filtrow, czyli jak wrzucic wszystko do odpowiednich
kolejek
# 5a.PRIOMAXUP
# po ToS czyli poszlo ssh
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 u32 match ip
tos 0x10 0xff flowid 1:10
# na wypadek wszelki ssh po dporcie
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 u32 match ip
dport 22 0xffff flowid 1:10
# ftpcontrol po dporcie
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 u32 match ip
dport 21 0xffff flowid 1:10
# ICMP do klasy interaktywnej
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 u32 match ip
protocol 1 0xff flowid 1:10
# ACK do klasy interaktywnej
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 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
# 5b.PRIOMIDUP
# port przeznaczenia = 20, czyli ftpdata
tc filter add dev $OUTDEV parent 1:0 protocol ip prio 1 u32 match ip
dport 20 0xffff flowid 1:10
# 5c.PRIOLOWUP
# tu trafia reszta, czyli nie piszemy nic
Więcej informacji o liście dyskusyjnej pld-users-pl