Dnia czw 3. of July 2003 14:54, napisa³e¶:
> Oto moj skrypcik:(sklecilem cos takiego na =
podstawie 2 innych opisow).
>
> #!/bin/sh
> =
#------------------------------------------------------------------
> # Konfiguracja dla po│aczenia internetowego w domu
> #- =
----------------------------------------------------------------
> # usage: rc.htb start|stop|restart
> #
> # Ustaw poniâ”sze wartosci =
trochŕ =
poniâ”ej =
faktycznych prŕdkosci
> # sciagania i wysy│ania =
(w kilobitach)
>
> #Lacze do internetu:
> DOWNLINK=115
> UPLINK=115
> LINKDEV=ppp0
> LINKIP=213.25.228.224
>
> #Lacze lokalne LAN:
> LANSPEED=10000
> LANDEV=eth0
>
> #Konfiguracja uzytkownikow
>
> # all names must be taken from /etc/hosts
>
> # machine which shares the link (this =
> SERVER="router"
>
> # which machines are using the link:
> USERS="kadzbi mirek siara rysiek baniak =
laptop"
> ENABLE="YES"
>
> # ADVANCED AND IMPORTANT: Changing field =
> # If you use TABs in your /etc/host to divide IP =
from host just go further.
> # If you use space as delimeter, uncomment the =
line below:
> # DELIM="-d ' '"
>
> =
#------------------------------------------------------------------
> #KONIEC CZESCI KONFIGURACYJNEJ
> =
#------------------------------------------------------------------
>
> SPEED=$[$LANSPEED-$DOWNLINK]
> # wyczysÅ kolejki dla =
wysy│ania i sciagania danych, nie =
> # o b│ŕdach
> IP=""
> getip()
> {
> IP=`grep -v ".*#.*\b$1\b" =
/etc/hosts | grep "\b$1\b" | cut -f 1 $DELIM`
> }
>
> USERCOUNT=0
> USERSPEED=$DOWNLINK
> calculate()
> {
> USERCOUNT=$#
> USERSPEED=$[$DOWNLINK/$USERCOUNT]
> echo "Setting up for $USERCOUNT users =
(${USERSPEED}kbits for each):"
> }
>
> delroot()
> {
> tc qdisc del root dev $LANDEV 2> =
/dev/null
> tc qdisc del root dev $LINKDEV 2> =
/dev/null
> tc qdisc del dev $LINKDEV =
root 2> /dev/null > /dev/null
> tc qdisc del dev $LINKDEV ingress 2> =
/dev/null > /dev/null
> }
>
> stop()
> {
> echo -n "rc.htb: Disabling =
queuing..."
> delroot
> echo " done."
> }
> start()
> {
> check()
> {
> if [ $ENABLE != "YES" ]; then
> echo "rc.htb is not yet configured, please =
> exit 1
> fi
> }
>
> instream()
> {
> tc qdisc add dev $LANDEV root handle 1:0 =
htb
> tc class add dev $LANDEV parent 1:0 classid 1:1 =
htb rate ${LANSPEED}kbit
> ceil ${LANSPEED}kbit
> }
>
> linklocal()
> {
> tc class add dev $LANDEV parent 1:1 classid 1:2 =
htb rate ${DOWNLINK}kbit
> ceil ${DOWNLINK}kbit
> tc class add dev $LANDEV parent 1:1 classid 1:3 =
htb rate ${SPEED}kbit ceil
> ${SPEED}kbit
> }
>
> userdiv()
> {
> for i in `seq 1 $USERCOUNT`;
> do
> tc class add dev $LANDEV parent 1:2 =
> ${USERSPEED}kbit ceil ${DOWNLINK}kbit
> done
> }
>
> userfilter()
> {
> NUM=4
> for i in $USERS;
> do
> getip $i
> echo " - $i ($IP)"
> tc filter add dev $LANDEV protocol ip =
parent 1:0 u32 match ip dst $IP
> flowid 1:${NUM}
> NUM=$(($NUM+1))
> done
> getip $SERVER
> tc filter add dev $LANDEV protocol ip parent 1:0 =
u32 match ip src $IP
> flowid 1:3
> tc filter add dev $LANDEV protocol ip parent 1:0 =
u32 match ip src $LINKIP
> flowid 1:3
> tc filter add dev $LANDEV protocol ip parent 1:0 =
u32 match ip sport 80
> 0xffff flowid 1:3
> NUM=4
> for i in $USERS;
> do
> getip $i
> tc filter add dev $LANDEV protocol ip =
parent 1:0 u32 match ip dst $IP
> match ip sport 80 0xffff match ip tos 8 0xff =
flowid 1:${NUM}
> NUM=$(($NUM+1))
> done
> tc filter add dev $LANDEV protocol ip parent 1:0 =
u32 match ip src $LINKIP
> match ip sport 80 0xffff flowid 1:3
>
> }
>
> sfqin()
> {
> tc qdisc add dev $LANDEV parent 1:3 handle 3:0 =
sfq perturb 10
> for i in `seq 1 $USERCOUNT`;
> do
> tc qdisc add dev $LANDEV parent 1:$[$i+3] =
handle $[$i+3]:0 sfq perturb 10
> done
> }
>
> outstream()
> {
> tc qdisc add dev $LINKDEV root handle 1: htb =
> tc class add dev $LINKDEV parent 1: classid 1:1 =
htb rate ${UPLINK}kbit
> burst 6k
> }
>
> servdiv()
> {
> # klasa z duâ”ym priorytetem 1:10:
>
> tc class add dev $LINKDEV parent 1:1 classid =
1:10 htb rate ${UPLINK}kbit
> burst 6k prio 1
> # klasa domyslna dla ruchu `masowego' 1:20 - =
otrzymuje trochŕ =
mniej
> # ruchu i ma mniejszy priorytet
> tc class add dev $LINKDEV parent 1:1 classid =
1:20 htb rate
> $[9*$UPLINK/10]kbit burst 6k prio 2
> #klasa edonkey i all ssawki
> tc class add dev $LINKDEV parent 1:1 classid =
1:30 htb rate
> $[$UPLINK/11]kbit burst 6k prio 3
> #Spowalniamy ruch przychodzacy zeby nie tworzyla =
sie kolejka na modemie
> tc qdisc add dev $LINKDEV handle ffff: =
> tc filter add dev $LINKDEV parent ffff: protocol =
> src \
> 0.0.0.0/0 police rate =
${DOWNLINK}kbit burst 10k drop flowid :1
> }
>
> servfilter()
> {
> # w│aczamy filtry
> # Minimalna zw│oka w =
polu ToS (ssh, NIE scp) dla 1:10:
> tc filter add dev $LINKDEV parent 1:0 protocol =
> match ip tos =
0x10 0xff flowid 1:10
> # ICMP (protokˇ│ ip =
numer 1) w klasie interaktywnej 1:10 tak bysmy
> # mogli wykonywaÅ pomiary i =
pochwaliŠsiŕ naszym przyjacio│om
> tc filter add dev $LINKDEV parent 1:0 protocol =
> =
match ip protocol 1 0xff flowid 1:10
> # By zwiŕkszyŠprŕdkosŠsciagania danych w =
trakcie wysy│ania, pakiety
> # ACK wsadzamy do klasy interaktywnej
> tc filter add dev $LINKDEV 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
> # ca│a `nie-interaktywna' reszta trafia =
> tc filter add dev $LINKDEV parent 1: protocol ip =
prio 14 u32 \
> match ip dst 0.0.0.0/0 flowid =
1:20
> #edonkey
> tc filter add dev $LINKDEV parent 1: protocol ip =
prio 13 handle 99 fw
> flowid 1:30
> }
> sfqout()
> {
> # obie klasy kontrolowane sa przez Sprawiedliwy =
podzia│ stochastyczny:
> tc qdisc add dev $LINKDEV parent 1:10 handle 10: =
sfq perturb 10
> tc qdisc add dev $LINKDEV parent 1:20 handle 20: =
sfq perturb 10
> tc qdisc add dev $LINKDEV parent 1:30 handle 30: =
sfq perturb 10
> }
> echo "HTB script completed"
> # starting...
> echo "rc.htb: Starting..."
> check
> echo "Performing root =
> delroot
> echo "OK, now let's get to =
work..."
> echo "Assuming link-in/link-out/LAN speed: =
$DOWNLINK/$UPLINK/$LANSPEED
> kbits."
> calculate $USERS
> instream
> linklocal
> userdiv
> userfilter
> sfqin
> outstream
> servdiv
> servfilter
> sfqout
> echo "rc.htb: Finished starting up, have =
fun... :)"
> }
> # =
==========================
==========================
===
> echo "htb.script, by Kadzbi based on =
(c)PriSM 2oo3 rc.htb, version 0.22,
> (c)PriSM 2oo3 - under GNU general public =
license"
> case "$1" in
> 'start')
> start
> ;;
> 'stop')
> stop
> ;;
> 'restart')
> stop
> start
> ;;
> *)
> echo "Usage: $0 =
start|stop|restart"
> ;;
> esac
A jakie pakiety musz± byc zainstalowane aby to =
zmodyfikowaæ do w³asnych potrzeb? czy pakowaæ =
go tak jak jest?