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