Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2005-03-09 00:35:05

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Czym sprawiedliwie dzielić łącze

Witam,
ostatnio przekopuje sobie google i szukam czegos lepszego niz mam do podzialu lacza. Szukam bo samemu skryptow nie napisze.
Obecnie testuje shaperd'a i nie jestem zadowolony. Podczas odpalenia przezemnie dc i gdy ktos wysyla wg programu z predkoscia 20 - 22kb to pingi mam juz ogromne. Mam 1mbit/256kbit na 12 kompow i chcialbym jakos dobrze to skonfigurowac. Zalezy mi na tym aby bylo to dobrze bo nielugo serwerem zajmie sie druga osoba bo ja nie bede mial jak i chcialbym aby wszystko to sobie bezproblemowo chodzilo. Piszac sprawiedliwego podzialu mam na mysli dynamiczny oczywiscie. Odpada na stale przypisywanie prekosci tak samo podzial na uslugi ze np p2p ma max polowe lacza bo to tez lipa jak sie samemu siedzi to sie chce max.

Offline

 

#2  2005-03-09 15:21:03

  BiExi - matka przelozona

BiExi
matka przelozona
Skąd: Gorlice
Zarejestrowany: 2004-04-16
Serwis

Re: Czym sprawiedliwie dzielić łącze

U mnie w siecach jakos dynamiczny podzial lacza sie nie sprawdzil najlepiej jest podzielic statycznie na ilosc kompow w sieci, do to shaperd'a to kicha jestwogule ine spelnia swoich zadan...
ja napisalm sobie wlasny system podzialu lacza na HTB :] i mam statycznie a ludzie z sieci sa zadowoleni

Offline

 

#3  2005-03-09 15:52:29

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

Ehh statycznie to wg mnie marnotrastwo. Co z tego, że każdemu dam 128kb/s i potem 3/4 łącza leży niewykorzystane. Jak ktoś chce sobie coś ściągnąć to lepiej niech zassa w 15 minut zamiast w 3 godziny.

Offline

 

#4  2005-03-09 16:02:29

  BiExi - matka przelozona

BiExi
matka przelozona
Skąd: Gorlice
Zarejestrowany: 2004-04-16
Serwis

Re: Czym sprawiedliwie dzielić łącze

tak tylko przydzielasz np wedlug nizszego schematu

3 uzytkownikow
czyli po 33% maksymalnego pasma

kazdemu z userow przydzielasz maksymalny transfer na 50%
a minimalny na 33% czyli kazydy user moze wypozycczyc d innych jesi jest to nie uzywane 17% pasma

dla twojeje sieci lacze 1 megabit 12 userow
czyli powiedzmyserdnio 10% lazca na kazdego usera
zakladajac ze w sieci parcuje przewaznie cos kolo 60% userow ustalamy minimalny (gwarantowany) transfer dla usera na 12% a maksymalny transfer dajemy w tym przypadku na 40%
czyli np gdy siec nie jest obciazona i np siedzi 5 userow z tego 2 siedzi na gg 2 sprawdza poczte czy oglada strony to ty mozesz miec do wykozystania (wypozyczenia) od pozostalych pasmo tak abys mial 40% lacza dla siebie....
i asz ladnie po statiku z wypozyczaniem pasma...

Offline

 

#5  2005-03-09 16:16:45

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

A jak jest z oddawanie pasma? To samo uzyskasz na dynamicznym. Jest wolne lacze to masz cale nei masz wolnego to masz mniej.

Offline

 

#6  2005-03-09 16:21:38

  BiExi - matka przelozona

BiExi
matka przelozona
Skąd: Gorlice
Zarejestrowany: 2004-04-16
Serwis

Re: Czym sprawiedliwie dzielić łącze

tak tylko na dynamicznym to est promocja taka ze co jakis czas systemsprawdza ile userow jest w sieci, i przeladowywuje kolejkowanie co najczesciej po kilku takich pzrzeladowaniach najczesciej nie dziala poprawnie.... np wogule nic sie nie che kolejkowac....

mam np siec polpak 2 megabity a naim 180 userow w rozproszonej sieci i moja metoda kolejkowania sie tam sprawdza dosc ladnie....

ty masz mala siec na 1 megabicie i ja Ci mowie ze to co napisalm wyzej u Ciebie by sie sprawdzilo idealnie, oczywiscie ja mam troszeczke inne zasady przydzielania pasma bo mam wiecej userow....

Offline

 

#7  2005-03-09 16:28:39

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

Hmm wrzuce tu to co obecnie testuje:

Kod:

#!/bin/bash
#
# rc.htb 1.4, (C)Lenthir 2oo4, GNU GPL
# 2004-08-13 19:30
VER=1.4
MAX=3330
#######################
#Konfiguracja interfejsów:
out="eth0"                                       #wyjście na świat (modem)

lan="`/root/kolejkowanie/lan100`"                #adresy IP dla interfejsów lan, bez IP serwera
srv="83.17.x.x"                               #IP zewnętrzny serwera
srv_l="192.168.100.1"

#echo ${lan}

ile=`echo ${lan}|awk '{print NF}'`                 #ilości komputerów w podsieciach, bez serwera

TC=/sbin/tc                                        #ścieżka do tc
MODPROBE=/sbin/modprobe                            #ścieżka do modprobe
IP=/sbin/ip                                        #ścieżka do ip
IPTABLES=/sbin/iptables                            #ścieżka do iptables
firewall="/etc/init.d/lfirewall restart"            #jak zrestartować firewall

u_r2q=1                                            #r2q
u_quantum=2500 #default 1500                                    #quantum

#220 443 993 143 195 65188
porty_tcp="20 21 22 23 25 53 80 55541 3128 110 27015 27016 33333 27018"
porty_udp="53 80 55541 3128 53 27015 27016 27018 33333"
pping=1

#(1Mbit = 1024kbit = 1048576bity = 0,125MB/s = 128kB/s = 131072B/s):
wan_dwl=1000                                    #prędkość łacza na świat w kbit/s
wan_upl=190
ratio_d=1                                       #prędkość maksymalna jaką mogą osiągać użytkownicy (1 = 100%)
ratio_u=1

#Konfiguracja serwera
srv_dwl=20                                      #minimalna prędkość downloadu z serwera
srv_upl=20                                      #minimalna prędkość uploadu z serwera

#Konfiguracja LAN
lan_dwl[0]=100                                    #prędkość sieci LAN w Mbit/s (wartość rzeczywista!!)
lan_upl[0]=100
lan_dwl[1]=100
lan_upl[1]=100
#######################

if [[ $ile -ge $MAX ]]
        then
        echo "Niedopuszczalnie dużo komputerów!"
        exit 1
        fi

#######################

stop()
{
$TC qdisc del root dev $out 2> /dev/null
$TC qdisc del root dev imq 2> /dev/null
$IP link set imq down
}
start()
{ stop

# download
tmp=$(echo "($wan_dwl-$srv_dwl)%$ile" | bc)
srv_dwl=$(echo "$srv_dwl+$tmp" | bc)
min=$(echo "($wan_dwl-$srv_dwl)/$ile" | bc)
pri_min=$(echo "$min/2+$min%2" | bc)
sec_min=$(echo "$min/2" | bc)
max=$(echo "$wan_dwl*$ratio_d" | bc)

echo " Ilość komputerów: $ile"
echo "%===================================================================%"
echo " Ustawianie kolejki downloadu."
echo " Maksymalny download: $max kbit/s"
echo " Minimalny download serwera: $srv_dwl kbit/s"
echo " Minimalny download userów: $min kbit/s"
echo " Primary: $pri_min kbit/s    Secondary: $sec_min kbit/s"
echo " "

if [[ u_r2q=="" ]]; then
$TC qdisc add dev imq root handle 1:0 htb
else
$TC qdisc add dev imq root handle 1:0 htb r2q $u_r2q
fi

$TC class add dev imq parent 1:0 classid 1:1 htb rate ${wan_dwl}kbit ceil ${wan_dwl}kbit

# Serwer
$TC class add dev imq parent 1:1 classid 1:2 htb rate ${srv_dwl}kbit ceil ${max}kbit quantum $u_quantum
$TC qdisc add dev imq parent 1:2 sfq perturb 10
$TC filter add dev imq protocol ip parent 1:0 u32 match ip dst $srv flowid 1:2

j=3
for usr in $lan
        do
        $TC class add dev imq parent 1:1 classid 1:$j htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq parent 1:$j classid 1:$(($j+1)) htb rate ${pri_min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev imq parent 1:$j classid 1:$(($j+2)) htb rate ${sec_min}kbit ceil ${max}kbit quantum $u_quantum
        $TC qdisc add dev imq parent 1:$(($j+1)) sfq perturb 10
        $TC qdisc add dev imq parent 1:$(($j+2)) sfq perturb 10
        for prt in $porty_tcp
                 do
                 $TC filter add dev imq protocol ip parent 1:0 pref 2 u32 match ip dst $usr match ip protocol 6 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $TC filter add dev imq protocol ip parent 1:0 pref 2 u32 match ip dst $usr match ip protocol 17 0xff match ip sport $prt 0xffff flowid 1:$(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $TC filter add dev imq protocol ip parent 1:0 pref 2 u32 match ip dst $usr match ip protocol 1 0xff flowid 1:$(($j+1))
                 fi
        $TC filter add dev imq protocol ip parent 1:0 pref 3 u32 match ip dst $usr flowid 1:$((j+2))
        let "j=j+3"
        done
i=0
for uvs in $srv_l
        do
        $TC class add dev imq parent 1:0 classid 1:$j htb rate ${lan_dwl[$i]}Mbit ceil ${lan_dwl[$i]}Mbit quantum $u_quantum
        $TC qdisc add dev imq parent 1:$j sfq perturb 10
        $TC filter add dev imq protocol ip parent 1:0 pref 1 u32 match ip dst $uvs flowid 1:$j
        let "j=j+1"
        let "i=i+1"
        done

$IP link set imq up

# upload
tmp=$(echo "($wan_upl-$srv_upl)%$ile" | bc)
srv_upl=$(echo "$srv_upl+$tmp" | bc)
min=$(echo "($wan_upl-$srv_upl)/$ile" | bc)
pri_min=$(echo "$min/2+$min%2" | bc)
sec_min=$(echo "$min/2" | bc)
max=$(echo "$wan_upl*$ratio_u" | bc)

echo " Ustawianie kolejki uploadu."
echo " Maksymalny upload: $max kbit/s"
echo " Minimalny upload serwera: $srv_upl kbit/s"
echo " Minimalny upload userów: $min kbit/s"
echo " Primary: $pri_min kbit/s    Secondary: $sec_min kbit/s"
echo "%===================================================================%"

if [[ u_r2q=="" ]]; then
$TC qdisc add dev $out root handle 2:0 htb
else
$TC qdisc add dev $out root handle 2:0 htb r2q $u_r2q
fi

$TC class add dev $out parent 2:0 classid 2:1 htb rate ${wan_upl}kbit ceil ${wan_upl}kbit

$TC class add dev $out parent 2:1 classid 2:2 htb rate ${srv_upl}kbit ceil ${max}kbit quantum $u_quantum
$TC qdisc add dev $out parent 2:2 sfq perturb 10
$IPTABLES -t mangle -A POSTROUTING -s $srv -j MARK --set-mark 1
$TC filter add dev $out protocol ip parent 2:0 handle 1 fw flowid 2:2

j=3
for usr in $lan
        do
        $TC class add dev $out parent 2:1 classid 2:$j htb rate ${min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev $out parent 2:$j classid 2:$(($j+1)) htb rate ${pri_min}kbit ceil ${max}kbit quantum $u_quantum
        $TC class add dev $out parent 2:$j classid 2:$(($j+2)) htb rate ${sec_min}kbit ceil ${max}kbit quantum $u_quantum
        $TC qdisc add dev $out parent 2:$(($j+1)) sfq perturb 10
        $TC qdisc add dev $out parent 2:$(($j+2)) sfq perturb 10
        $IPTABLES -t mangle -A POSTROUTING -s $usr -j MARK --set-mark $(($j+2))
        for prt in $porty_tcp
                 do
                 $IPTABLES -t mangle -A POSTROUTING -p tcp -s $usr --dport $prt -j MARK --set-mark $(($j+1))
                 done
        for prt in $porty_udp
                 do
                 $IPTABLES -t mangle -A POSTROUTING -p udp -s $usr --dport $prt -j MARK --set-mark $(($j+1))
                 done
        if [[ $pping -eq 1 ]]; then
                 $IPTABLES -t mangle -A POSTROUTING -p icmp -s $usr -j MARK --set-mark $(($j+1))
                 fi
        $TC filter add dev $out protocol ip parent 2:0 pref 2 handle $(($j+1)) fw flowid 2:$(($j+1))
        $TC filter add dev $out protocol ip parent 2:0 pref 3 handle $(($j+2)) fw flowid 2:$(($j+2))
        let "j=j+3"
        done

i=0
for uvs in $srv_l
        do
        $TC class add dev $out parent 2:0 classid 2:$j htb rate ${lan_upl[$i]}Mbit ceil ${lan_upl[$i]}Mbit quantum $u_quantum
        $TC qdisc add dev $out parent 2:$j sfq perturb 10
        $IPTABLES -t mangle -A POSTROUTING -s $uvs -j MARK --set-mark $j
        $TC filter add dev $out protocol ip parent 2:0 pref 1 handle $j fw flowid 2:$j
        let "j=j+1"
        let "i=i+1"
        done
}
echo "rc.htb 1.4, (C)Lenthir 2oo4, GNU GPL"
echo "2004-08-13 19:30"
case "$1" in
    'start')
      echo "Uruchamianie kolejkowania..."
      start
      echo "Gotowe."
      exit 0
      ;;
    'stop')
      echo -n "Zatrzymywanie kolejkowania..."
      stop
      echo " wykonano."
      ;;
    'restart')
      echo "Restartowanie kolejkowania..."
      $firewall
      start
      echo "Gotowe."
      ;;
    'status')
      echo "Klasy na interfejsie imq!"
      echo "%====================================%"
      $TC class show dev imq | grep root
      $TC class show dev imq | grep -v root | sort | nl
      echo "Klasy na interfejsie ${out}!"
      echo "%====================================%"
      $TC class show dev $out | grep root
      $TC class show dev $out | grep -v root | sort | nl
      ;;
    'stat')
      if [[ "$2" == "" ]]; then
        echo "Script need second argument - adress IP"
        exit 1
      elif [[ "$2" == "server" ]]; then
        watch -d -n 1 "echo "Serwer:" && tc -s class show dev imq | grep -A 3 "htb 1:2 " && tc -s class show dev $out | grep -A 3 "htb 2:2 ""
      elif [[ "$2" == "lan" ]]; then
      j=3
        for usr in $lan
                do
                let "j=j+3"
                done
      i=0;trs="echo "Transfer: klient -> serwer -> klient ""
        for uvs in $srv_l
                do
                trs="$trs && echo "Lan[$i]:" && tc -s class show dev imq | grep -A 3 "htb 1:$j " && tc -s class show dev $out | grep -A 3 "htb 2:$j ""
                let "j=j+1"
                let "i=i+1"
                done
        watch -d -n 1 "$trs"
      else
      j=3
        for usr in $lan
                do
                if [[ "$2" == "$usr" ]]; then
                        watch -d -n 1 "echo "Download: " && tc -s class show dev imq | grep -A 3 "htb 1:$j " && tc -s class show dev imq | grep -A 3 "1:$(($j+1)) " && tc -s class show dev imq | grep -A 3 "1:$(($j+2)) " && echo && echo "Upload: " && tc -s class show dev $out | grep -A 3 "htb 2:$j " && tc -s class show dev $out | grep -A 3 "2:$(($j+1)) " && tc -s class show dev $out | grep -A 3 "2:$(($j+2)) ""
                        echo "Zakończono."
                        exit 0
                fi
                let "j=j+3"
                done
      fi
      ;;
    *)
      echo
      echo "Użycie: rc.htb start|stop|restart|status"
      echo "rc.htb stat <server|adress IP>"
      exit 1
      ;;
esac

To wykorzystuje IMQ i nie jest taki zły ten skrypt. Nie działa tak jak shaper jako program chyba, że sie myle. odatkowo jest jeszcze plik lan100 gdzie mam wypisane IP lokalne. Nic poza tym.

Offline

 

#8  2005-03-21 08:57:48

  jata - Użytkownik

jata
Użytkownik
Skąd: Poznań
Zarejestrowany: 2004-10-14

Re: Czym sprawiedliwie dzielić łącze

http://lms.rulez.pl

ale nie wiem, jak to skonfigurowac, zeby dzialalo..
a zalozenia ma rewelacyjne!!


jata aka algol vel MaDfReAk

Offline

 

#9  2005-03-21 11:27:53

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

jata to jest raczej do zarzadzania siecia jakies faktury oplaty no i cos tam ma chyba podpiecie na sztywno jak mi sie wydaje predkosci. Kiedys to uruchomilem laen ie do konca bo tylko czesc o faktur itp. W jakiekolwiek ustawianie predkosci juz sie nie bawilem stad nawet nie mam pewnosci czyt ak sie da.

Offline

 

#10  2005-03-21 11:48:49

  jata - Użytkownik

jata
Użytkownik
Skąd: Poznań
Zarejestrowany: 2004-10-14

Re: Czym sprawiedliwie dzielić łącze

faktury mozna pominac, mi wlasnie chodzi o modul zarzadzania laczem..:/

ale zeby zarzadzac, trzeba najpierw ustrojstwo uruchomic..

mi sie nie udalo..:(


jata aka algol vel MaDfReAk

Offline

 

#11  2005-03-21 17:56:06

  BiExi - matka przelozona

BiExi
matka przelozona
Skąd: Gorlice
Zarejestrowany: 2004-04-16
Serwis

Re: Czym sprawiedliwie dzielić łącze

LMS to jest wielka porazka uzywalam tego przez 2 miesiace i wes porazka !!!!!!!!!!
czesc parametrow ustawiasz z programu a reszte niestety recznie w plikach od lms'a

Offline

 

#12  2005-03-22 23:07:38

  zlyZwierz - Moderator

zlyZwierz
Moderator
Zarejestrowany: 2005-02-18
Serwis

Re: Czym sprawiedliwie dzielić łącze

http://www.niceshaper.mikule.net/ - ten progs wymiata :) (oczywiscie mile widziana obsluga htb ,(e)sfq i imq w kernelu)

Offline

 

#13  2005-03-23 11:23:03

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Czym sprawiedliwie dzielić łącze

Wymiata? Czy to znaczy że testowałeś? Może byś opisał swoje wrażenia :)

Offline

 

#14  2005-03-23 12:42:05

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

Ja testowalem. Hmm nie jest zly ale lepiej sie sprawuje ten powyzej. Wprawdzie lekko troche go przerobilem tzn kilka linijek bo zle startowalo mi nowe IMQ ale zapewniam ze lepiej sie sprawowal niz niceshaper. Niceshaper ladnie mi moze cial tzn Troche za bardzo. W tym co ja uzywam malo tnie a wszystko dobrze chodzi. Pingi niskie choć wiadomo chciałoby się jeszcze niższe.

Offline

 

#15  2005-03-23 15:10:03

  zlyZwierz - Moderator

zlyZwierz
Moderator
Zarejestrowany: 2005-02-18
Serwis

Re: Czym sprawiedliwie dzielić łącze

poprzez NS dziele ruch pomiedzy 274 osoby (na dzien dzisiejszy) pingi mam w szczycie po 200ms max (łącze: polpak 1mbit/s i dwa dsl 2mbit/s), poprawiłem NS zeby korzystal z esfq zamiast sfq, niceshaper nie współpracuje ze squidem (zadowalająco) ale delay polls w squidzie zdają egzamin... przy takiej liczbie userów potrzeba 2,5GHz i 1,5G RAM zeby to sie bujało :)

polecam NS

pozdro

Offline

 

#16  2005-03-23 16:43:45

  Mick - Członek DUG

Mick
Członek DUG
Skąd: Oleśnica/Wrocław
Zarejestrowany: 2004-04-26
Serwis

Re: Czym sprawiedliwie dzielić łącze

A możesz udostępnić Twoją wersję NS przerobioną? Dalej nie rozumiem co mam zrobić bo chciałbym squida. Ruch na squida przekierowywuje na iptables tylko z portu 80 na 3128.

Offline

 

#17  2005-03-24 12:15:05

  zlyZwierz - Moderator

zlyZwierz
Moderator
Zarejestrowany: 2005-02-18
Serwis

Re: Czym sprawiedliwie dzielić łącze

wiesz.. cala przeróbka sprowadza sie do zrobienia "znajdz i zamien" ... :)
tutaj masz link do niego

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)