TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
kierowanie ruchem w sieci w linuxie - dla zainteresowanych , josh 22/08/02 01:10 hej!
jakis czas temu mialem taki problem: na linuxie mam uruchomiony program MLDonkey, ktory (jak wiadomo) sciaga z sieci rozne rzeczy. Problem polegal na tym, ze zapychal cale pasmo biednego SDI i w trakcie 'intensywnego' sciagania - przegladanie stron WWW bylo baaaardzo wolne. tak wiec chcialem wykorzystac specjalne mechanizmy kierowania danymi na zasadzie priorytetow - tzn. ze jak komputer laduje strone WWW to MLDonkey ma w tym czasie 'wyhamowac'. Ostatecznie po wielu probach wyszlo, ze kierowanie ruchem w ten sposob nie daje rezultatow.
Chodzilo chyba o to, ze gdy MLDonkey otwieral, powiedzmy 150 polaczen to wtedy kazde jedno otwarte polaczenie przegladarki WWW nie dawalo tym 150 polaczeniom MLDonkeyowym rady...
Gdy juz bylem kompletnie zalamany - wpadl mi do glowy pomysl i juz po dwoch dniach nauki skladni BASH i pomocy dobrych ludzi z grupy dyskusyjnej udalo mi sie napisac prosty skrypt, ktory robi cos takiego:
(1)sprawdza ile jest przeslanych danych pomiedzy Internetem a komputerem za maskarada.
(2)czeka sekunde
(3)sprawdza jeszcze raz to, co w (1)
(4)jesli sie okaze, ze w ciagu tej sekundy przeszlo wiecej niz np. 0,5KB wtedy blokuje porty MLDonkeya (jesli byly otwarte)
(5)jesli jest mniej niz 0,5KB - wtedy otwiera te porty, jesli byly zamkniete.
w ten oto sposob, gdy przegladam strony WWW lub robie cos innego w sieci, to MLDonkey ma blokade. Jesli nic nie robie to MLDonkey nie ma ograniczen. Dziala to w miare sprawnie i nie obciaza znaczaco serwera.
Jesli sa chetni to moge podac na grupie ten skrypt (kilkanascie linijek) i dokladniejszy opis...
Aha - jesli nie macie pojecia o czym pisze (kilka miechow temu tez bym kompletnie nie mial pojecia o tym, co napisalem powyzej) to dodam tylko, ze to rozwiazanie dziala na Linuxie, ktory robi u mnie za serwer.
Dodam jeszcze, ze NIE MAM POJECIA jak cos takiego zrobic na Windowsie, wiec nie pytajcie o to (windowsa uzywam na moim glownym komputerze, linux tylko dostarcza Internet poprzez SDI, no i na nim dziala MLDonkey - odmiana eDonkey'a)- skrypt glowny , josh 22/08/02 12:14
echo "1" > run
Z=`iptables -L FORWARD -v -x -n |awk '{print $2}' |tail -n1`
while [ `cat run` = 1 ] ; do
Z1=$Z
sleep 1
Z2=`iptables -L FORWARD -v -x -n |awk '{print $2}' |tail -n1`
Z=$Z2
Z3=$((Z2-$Z1))
echo $Z3
if [ $Z3 -gt 500 ] ; then
if [ `cat state` = 0 ] ; then
./mlstop
echo "mlstop"
echo "1" > state
fi
else
if [ `cat state` = 1 ] ; then
./mlstart
echo "mlstart"
echo "0" > state
fi
fi
done - skrypty: mlstart i mlstop , josh 22/08/02 12:15
./MLSTART:
iptables -t filter -D INPUT -p tcp --destination-port 4662 -j REJECT
iptables -t filter -D INPUT -p tcp --source-port 4662 -j REJECT
iptables -t filter -D OUTPUT -p tcp --destination-port 4662 -j REJECT
iptables -t filter -D OUTPUT -p tcp --source-port 4662 -j REJECT
iptables -t filter -D INPUT -p tcp --destination-port 4661 -j REJECT
iptables -t filter -D INPUT -p tcp --source-port 4661 -j REJECT
iptables -t filter -D OUTPUT -p tcp --destination-port 4661 -j REJECT
iptables -t filter -D OUTPUT -p tcp --source-port 4661 -j REJECT
./MLSTOP
iptables -t filter -A INPUT -p tcp --destination-port 4662 -j REJECT
iptables -t filter -A INPUT -p tcp --source-port 4662 -j REJECT
iptables -t filter -A OUTPUT -p tcp --destination-port 4662 -j REJECT
iptables -t filter -A OUTPUT -p tcp --source-port 4662 -j REJECT
iptables -t filter -A INPUT -p tcp --destination-port 4661 -j REJECT
iptables -t filter -A INPUT -p tcp --source-port 4661 -j REJECT
iptables -t filter -A OUTPUT -p tcp --destination-port 4661 -j REJECT
iptables -t filter -A OUTPUT -p tcp --source-port 4661 -j REJECT - krotki opis: , josh 22/08/02 12:24
od poczatku: skrypt zaklada plik o nazwie ./run i wpisuje w nim "1". jest to warunek do powtarzania sie petli czyli calego programu. jesli chcesz zatrzymac program musisz z np. innej konsoli wpisac do pliku ./run "0" - wtedy program sie zatrzyma.
Nastepnie "Z=bla bla bla" to (1) wg pierwszego opisu, a "Z2=bla bla bla" to jest punkt (3). Warunek "$Z3 - gt 500" to sprawdzenie, czy roznica Z2 i Z1 jest wieksza od 0,5KB. Nastepny warunek "if `cat state` = 0" to sprawdzenie, czy aktualnie blokada jest wlaczona czy nie.
Chodzi o to, ze gdy blokada jest uruchamiana z linijki "./mlstop" zaraz potem w pliku ./mlstop jest wpisywana wartosc 1. Chodzi o to, zeby program nie wlaczal ani nie wylaczal blokady wiele razy, skrypt mlstart i mlstop uruchomi sie tylko wtedy, kiedy jest piotrzeba, a nie co sekunde.
Podsumowujac pliki w katalogu, jakie wystepuja:
skrypt-glowny, nazwany przeze mnie:
"josh-pseudo-shaper"
potem: "mlstart" i "mlstop"
i pliki pomocnicze:
"state" i "run".- Interesujace , Gali 22/08/02 18:20
Powinni to umiescic na jakiejs stronie jako artykul.
Pozdrawiam
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|