tasiorek pisze:
Wiecej info na ten temat mozna znalezc np tu:
http://www.marcinmazurek.com/teksty/con ... ntrack.pdfNie mozna wiec ograniczyc ilosci polaczen udp, bo czegos takiego nie ma. Mozna za to limitowac ilosc rozpoczynanych transmisji i ich intensywnosc.
W tym dokumencie użyto pojęcia "strumień udp" w znaczeniu, w jakim ja pisałem o "połączenie udp" i chyba to określenie będzie najwłaściwsze.
Przede wszystkim należaloby określić, co potrzeba limitować i dlaczego. Dlaczego duża ilość jednoczesnych połączeń/strumieni jest szkodliwa? Ja rozumiem to w ten sposób, że każde połączenie tcp i strumień udp przechodząc przez router (lub inne urządzenie, które z jakiegoś powodu śledzi połączenia) zostawia wpis w tablicy połączeń. Każdy wpis zabiera jakieś zasoby. Poza tym każdy kolejny pakiet należący do strumienia musi być porównany z tą tablicą i odpowiednio pokierowany przez router. Dlatego im więcej wpisów w tablicy połączeń tym większa moc obliczeniowa potrzebna do obsłużenia routingu. No i tutaj pojawiają się problemy z wydajnością. Taka jest moja teoria. Nie wiem, na ile słuszna. Nie pasuje mi do niej tylko jedno: od czasu do czasu spotykam się z tym, że ktoś wiąże przypadki zawieszania się accesspointów z ilością połączeń. Sam nie zauważyłem takiej zależności. Nie przypuszczam, żeby te urządzenia miały powód śledzić połączenia. Dla nich pakiet to pakiet: może być większy albo mniejszy, może ich być dużo lub mało, ale nie powinno je interesować, jakie flagi ma poustawiane ani do jakiego połączenia należy. Przypuszczam nawet (nie sprawdzałem), że accesspointy mogą przesyłać pakiety w innych niż ip protokołach czyli np. ipx/spx albo NetBEUI.
Interesują mnie opinie, czy to co wyżej napisałem odzwierciedla rzeczywistość.
Trzeba ograniczać połączenia tak, żeby rozwiązywało to nasze problemy a było to jak najmniej uciążliwe. Uważam, że klient, który płaci nam za neta ma prawo sam decydować, czy będzie oglądał www, grał w quake'a czy wymieniał się plikami przez p2p. Bo jak nie, to nas oleje i weźmie neostradę (miałem już tak - miał za długie pingi i wywalało go z serwera Call of Duty).
Jeżeli źródło problemów jest takie, jak napisałem wyżej to najlepiej wypacować takie rozwiązanie, że każdy ma przydzieloną pulę połączeń tcp i strumieni udp. Limitowanie tcp jest rozwiązane przez connlimit. Natomiast dla udp widziałbym rozwiązanie oparte na cylkicznym analizowaniu tablicy conntrack, zliczaniu strumieni udp z poszczególnych ip i odpowiedniej reakcji na przekroczenie limitu. Reakcją tą mogłoby być:
- blokada nie pozwalająca na rozpoczęcie kolejnych strumieni (dosyć proste w realizacji: iptables -A FORWARD -p udp -s $ip_użytkownika -j DROP lub coś w tym stylu);
- skasowanie wszystkich strumieni:(/usr/sbin/clr_conns $ip_użytkownika - chyba zbyt restrykcyjne);
- skasowanie ostatnio nawiązanych połączeń, które przekraczają limit (najlepsze, ale nie wiem jak zrealizować. Może coś opartego na hping2 ?)
Zliczanie możnaby zrealizować w sposób zbliżony do zaprezentowanego w
http://forum.freesco.pl/viewtopic.php?p=73401#73401
Wydaje mi się, że rozwiązanie tasiorka może spowodować problemy w grach, VoIP i pewnie paru innych zastosowaniach interetu.
EDIT:
Pisałem: skasowanie wszystkich strumieni:(/usr/sbin/clr_conns $ip_użytkownika)
clr_conns odpada - działa tylko na tcp

Czy ktoś zna metodę usunięcia z conntrack wpisu dot. udp? (inną niż restart routera

)