Oreska - Užice

WWW.UZICE.NET - Užičani, hajde da se družimo => Mikrotik => Temu započeo: Pedja 19.10.2007. 22:08:43



Naslov: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 19.10.2007. 22:08:43
Za potrebe nase vreme, napravio sam skript koji omogucava da se korisnicima ogranici internet protok, ali tako da su korisnici podeljeni po unapred definisanim nivoima. Isti skript se moze koristiti i za podesavanje drugih privilegija (recimo dozvole odredjene vrste saobracaja i slicno)

Uputstvo i sam skript mozete videti na http://wireless.uzice.net/uputstva/mikrotik-ogranicenjeprotokaponivoima, a ovde mozete komentarisati skript ili postavljati pitanja u vezi njega.



Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 19.10.2007. 22:15:10
Citat

vezano za dodavanje imena u queue simple, ako ispred imena usera dodam npr [Level A] tj. [LevelA] ime_usera da li ce obuhvatiti obracunavanje prometa ili u imenu samo treba da stoji naziv grupe kojoj pripada [LevelA] i da li svakom navedenom useru u simple queue dodajem manuelno max limit i ostale podatke osim ip adrese ?


Svakom pravilu koje sadrzi oznaku grupe skript ce automatski podesiti sve paramere za ogranicenje brzine. Sve sto je potrebno to je da se u komentar doda oznaka grupe i da se pokrene skript. Sve ostalo ce on da obavi.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: mvasiljevic 18.08.2009. 06:12:49
Sve sam radio po navedenom uputsvu, i naravno uspeo sam da ogranicim protok na zeljenu vrednost.

Ali problem se javlja kada tu zeljenu vrednost zelim da promenim.

Primer

Ukoliko je prva zadata vrednost bila 1mb,a ja ne zelim vise da bude 1mb vec 2mb.Kada ucukam sve zadate komande i stavim 2mb on to sve prihvati ali nece da realizuje,ogrnaci ga na neki cudan nacin nekad 10kb nekad 6kb,ali nikad vise od dvadeset.I onda moram da ukinem pravilo i idem bez ogranicenja da bi neko mogao da funkcionise.

Zakljucak
Kada jednu mac adresu ogranicim prvi put posle tu vrednost ne mogu da promenim na onu koju ja zelim, vec samo da ukinem to pravilo.

Nadam se da ste me razumeli


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 18.08.2009. 15:24:36
Nisam nailazio na takav problem. Moze da bude da je neki bug ako imas stariju verziu posto je jedno vreme bilo problema sa simple queues. Nisu bas uvek prvila radila kako treba.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: mvasiljevic 19.08.2009. 04:16:47
Ploca je 433ah mikrotik, licenciran softver.Ja sam licno smatrao da se brzina menja drukcije,ali izgleda da se menja isto, kao i prvi put kada se ogranicava.


Sad vidim da sam pobrkao temu.Ja sam protok ogranicaovao po osnovnom upustvu ne po skripti.Da li to ima nekakve veze?


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 19.08.2009. 06:22:00
Jedini razlog da ogranicenje brzine ne radi kako treba za koji znam je taj da svi korisnici zajedno pokusavaju da povuku vise nego sto link moze da pruzi, to jest da je link preopterecen.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: mvasiljevic 13.09.2009. 00:01:24
Nije to preoblem posto je link stvarno veliki jer i sam koristim isti.

Problem je bio u tome xaxa jos uvek mi je smesno, sto sam pobrkao upload umesto downloada pa je zato download nikad i nije bio veci od 10kb.Nikad tome nisam posvetio malo vise vremena da bih primetio to je bio glavni problem, hvala na pomoci u svakom slucaju.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 19.03.2010. 16:24:41
Na pocetku pozdrav svim forumasima.

Skrip je sjajan i radi odlicno na 2.9.43 verziji, kako smo odradili upgrade na 3.13 i na 4.x skript ne funkcionise. Na sajtu mikrotika postoji prepravljena verzija skripte sa novim kodom, ali radi polovicno. Prvi deo skripte koji se odnosi na pravila funkcionise i u simple queues dodje do svih prvobitnih podesavanja, medjutim kada je neophodno da skript proveri kolicinu prenetih podataka i da smanji brzinu svima koji su zadatu vrednost prekoracili ne desi se nista. Svim korisnicima bez obzira na grupu ostaju prvobitna podesavanja kao i bez provere protoka. Ukoliko neko ima resenje bilo bi sjajno da ga postuje. Skript je testiran na 3.13, 3.15, 3.22 i 4.5 verzijama.

pozdrav


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 19.03.2010. 17:25:39
Da, u međuvremenu je na Mikrotiku izmenjen skript sistem tako da skript više ne radi.

Ja sam u medjuvremenu sredio skript kod nas ali nikako da uhvatim vremena da napravim iisprobam veryiju koja je za objavljivanje, posto je ovaj nas dosta prilagodjen nasim potrebama.

Videću da uhvatim vremena za to.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 19.03.2010. 17:34:42
Evo trenutnog izgleda skripta, zvezidicama sam obelezio deo skripte koji ne radi. Mozda ce ti ovo ustedeti nesto vremena.

/queue simple;
:foreach i in=[find] \
do={  \
     :local sqName [get $i name]; \
     :local sqTotalBytes [get $i total-bytes]; \

     :local sqLevel [:find $sqName "[LevelA]"]; \
     :if ($sqLevel >= 0)  do={ \
        set $i limit-at=32000/32000 max-limit=64000/64000 burst-threshold=48000/48000 burst-limit=128000/128000 burst-time=30/30; \
 ***        :if ($sqTotalBytes  > (100 * 1048576))  do={ \
 ***         set $i limit-at=24000/24000 max-limit=32000/32000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
        }; \
     } else {

       :set sqLevel [:find $sqName "[LevelB]"]; \
       :if ($sqLevel >= 0)  do={ \
           set $i limit-at=64000/64000 max-limit=128000/128000 burst-threshold=78000/78000 burst-limit=256000/256000 burst-time=30/30; \
  ***         :if ($sqTotalBytes  > (200 * 1048576))  do={ \
  ***          set $i limit-at=64000/64000 max-limit=64000/64000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
           }; \

       } else { \

           :set sqLevel [:find $sqName "[LevelC]"]; \
           :if ($sqLevel >= 0)  do={ \
               set $i limit-at=72000/72000 max-limit=256000/256000 burst-threshold=96000/96000 burst-limit=1000000/1000000 burst-time=30/30; \
   ***            :if ($sqTotalBytes  > (300 * 1048576))  do={ \
   ***               set $i limit-at=72000/72000 max-limit=72000/72000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
                }; \
            }; \

        }; \
     }; \

     :if ($sqLevel >= 0) do { \
        :put ([get $i name] . " : " . [get $i limit-at] . " : " . [get $i max-limit]  . " : " . [get $i burst-limit]   . " : " . [get $i burst-threshold]  . " : " . [get $i burst-time]) ; \
     }; \

}

Samo da dodam...potpuno sam raspolozen da radim testiranje ukoliko ti bude potrebna pomoc.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 19.03.2010. 19:27:55
Evo nove verzije skripte koja radi na MT 3.xx i Mt 4.xx


{

:log info ("Setting user levels - started");

/queue simple

:foreach i in=[find] do={  \

 :local sqName [get $i name]
   :local sqDstAddress [get $i dst-address]
   :local sqTotalBytes [get $i total-bytes]

 :log info ("Setting user level for: " . $sqName)
 

# LevelA
   :local sqLevel [:find $sqName "[LevelA]"]

 :if ($sqLevel >= 0)  do={
   :put ($sqName . " > LevelA <")
   /ip firewall address-list add list=LevelA address=$sqDstAddress
   set $i limit-at=64k/64k max-limit=128k/128k \
   burst-threshold=32k/32k burst-limit=512k/512k \
   burst-time=30/30 priority=8
   }

 
   # LevelB
   :local sqLevel [:find $sqName "[LevelB]"]

 :if ($sqLevel >= 0)  do={
   :put ($sqName . " > LevelB <")
   /ip firewall address-list add list=LevelB address=$sqDstAddress
   set $i limit-at=64k/64k max-limit=256k/256k \
   burst-threshold=32k/32k burst-limit=512k/512k \
   burst-time=30/30 priority=8
   }
 

# LevelC
   :local sqLevel [:find $sqName "[LevelC]"]

 :if ($sqLevel >= 0)  do={
   :put ($sqName . " > LevelC <")
   /ip firewall address-list add list=LevelC address=$sqDstAddress
   set $i limit-at=128k/128k max-limit=512k/512k \
   burst-threshold=64k/64k burst-limit=1024k/1024k \
   burst-time=30/30 priority=8
   }

}
 

:log info ("Setting user levels - finished")

}
 





Ova verzija je stavljena i na nas sajt.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 19.03.2010. 21:21:15
Svaka cast na brzom odgovoru...testiram sutra i javljam rezultate. Mada ne sumnjam u tacnost uopste.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 20.03.2010. 19:39:16
Test odradjen i na zalost nista ne radi....zatim sam malo pogledao kod skripte i video da nigde ne postoji deo koji izracunava kolicinu prenetih podataka(100 * 1048576) i sl. Ovaj skript meni nece ni pocetne vrednosti da podesi, a promenu brzine ne moze ni da radi jer i ne proverava kolicinu prenetih podataka. Verujem da nemas vremena na pretek, ali bi bilo sjajno kad bi sredio skript.
Ja sam radio klasican copy/paste skripte odavde sa sajta u MT, nadam se da nisam povukao neki neodgovarajuci format.


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 22.03.2010. 06:05:02
Bilo je gresaka u formatu nakon kopiranja, ali i nakon sredjivanja skript i dalje ne radi. Verzije na kojima sam testirao 3.13, 3.15, 3.22, 3.24, 4.5 !


Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: kiza 22.03.2010. 09:00:54
Kad sam vec ugusio sa skriptom da kazem i resenje problema. . . . . dole navedeni skript radi. . . skinut sa sajta.  hxxp: wiki. mikrotik. com/wiki/Limiting_a_user_to_a_given_amount_of_traffic_with_user_levels
Problem je bio u tome sto sve nove verzije MT ne mere totalbytes ukoliko u queues stoji queue type default-small. . . stavite default i sve ce biti uredu.
Pozdrav za Pedju i hvala na trudu.

/queue simple;
:foreach i in=[find] \
do={  \
     :local sqName [get $i name]; \
     :local sqTotalBytes [get $i total-bytes]; \

     :local sqLevel [:find $sqName "[LevelA]"]; \
     :if ($sqLevel >= 0)  do={ \
        set $i limit-at=32000/32000 max-limit=64000/64000 burst-threshold=48000/48000 burst-limit=128000/128000 burst-time=30/30; \
         :if ($sqTotalBytes  > (100 * 1048576))  do={ \
          set $i limit-at=24000/24000 max-limit=32000/32000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
        }; \
     } else {

       :set sqLevel [:find $sqName "[LevelB]"]; \
       :if ($sqLevel >= 0)  do={ \
           set $i limit-at=64000/64000 max-limit=128000/128000 burst-threshold=78000/78000 burst-limit=256000/256000 burst-time=30/30; \
           :if ($sqTotalBytes  > (200 * 1048576))  do={ \
            set $i limit-at=64000/64000 max-limit=64000/64000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
           }; \

       } else { \

           :set sqLevel [:find $sqName "[LevelC]"]; \
           :if ($sqLevel >= 0)  do={ \
               set $i limit-at=72000/72000 max-limit=256000/256000 burst-threshold=96000/96000 burst-limit=1000000/1000000 burst-time=30/30; \
               :if ($sqTotalBytes  > (300 * 1048576))  do={ \
                  set $i limit-at=72000/72000 max-limit=72000/72000 burst-threshold=0/0 burst-limit=0/0 burst-time=0/0; \
                }; \
            }; \

        }; \
     }; \

     :if ($sqLevel >= 0) do { \
        :put ([get $i name] .  " : " .  [get $i limit-at] .  " : " .  [get $i max-limit]  .  " : " .  [get $i burst-limit]   .  " : " .  [get $i burst-threshold]  .  " : " .  [get $i burst-time]) ; \
     }; \
     }



Naslov: Odg: Mikrotik - Ogranicenje protoka po korisnickim nivoima
Poruka od: Pedja 22.03.2010. 20:53:23
Zaboravio sam da treba da se ogranicava i ukupan protok.

Evo ispravljen skript:


{

:log info ("Setting user levels - started");

/ip firewall address-list;

:local list [find list=LevelA]
 :if ([:len $list] > 0) do={remove $list}

:local list [find list=LevelB]
 :if ([:len $list] > 0) do={remove $list}

:local list [find list=LevelC]
 :if ([:len $list] > 0) do={remove $list}

:log info ("- user level lists deleted")

/queue simple

:foreach i in=[find] do={  \

     :local sqName [get $i name]
     :local sqDstAddress [get $i dst-address]
     :local sqTotalBytes [get $i total-bytes]

     :log info ("Setting user level for: " . $sqName)


# LevelA
     :local sqLevel [:find $sqName "[LevelA]"]

     :if ($sqLevel >= 0)  do={
       :put ($sqName . " > LevelA <")
       /ip firewall address-list add list=LevelA address=$sqDstAddress
        set $i limit-at=64k/64k max-limit=128k/128k \
                 burst-threshold=32k/32k burst-limit=512k/512k \
                 burst-time=30/30 priority=8

        :if ($sqTotalBytes  > (10 * 1048576))  do={ \
           set $i limit-at=12k/12k max-limit=32k/32k \
                     burst-threshold=10k/10k burst-limit=15k/15k burst-time=30/30 \
                     priority=8
   
          :log info ("Limit-exceeded on simple queue " . $sqName)

        }


     }

   
# LevelB
     :local sqLevel [:find $sqName "[LevelB]"]

     :if ($sqLevel >= 0)  do={
       :put ($sqName . " > LevelB <")
       /ip firewall address-list add list=LevelB address=$sqDstAddress
        set $i limit-at=64k/64k max-limit=256k/256k \
                 burst-threshold=32k/32k burst-limit=512k/512k \
                 burst-time=30/30 priority=8


        :if ($sqTotalBytes  > (20 * 1048576))  do={ \
           set $i limit-at=12k/12k max-limit=32k/32k \
                     burst-threshold=10k/10k burst-limit=15k/15k burst-time=30/30 \
                     priority=8
   
          :log info ("Limit-exceeded on simple queue " . $sqName)

        }

     }
   

# LevelC
     :local sqLevel [:find $sqName "[LevelC]"]

     :if ($sqLevel >= 0)  do={
       :put ($sqName . " > LevelC <")
       /ip firewall address-list add list=LevelC address=$sqDstAddress
        set $i limit-at=128k/128k max-limit=512k/512k \
                 burst-threshold=64k/64k burst-limit=1024k/1024k \
                 burst-time=30/30 priority=8

        :if ($sqTotalBytes  > (30 * 1048576))  do={ \
           set $i limit-at=12k/12k max-limit=32k/32k \
                     burst-threshold=10k/10k burst-limit=15k/15k burst-time=30/30 \
                     priority=8
   
          :log info ("Limit-exceeded on simple queue " . $sqName)

        }


     }

}


:log info ("Setting user levels - finished")

}