Jak zrobić dzielenie łącza pod Linux'em - shaperd


UWAGA
Dzielenie łącza to uproszczona nazwa określająca różne metody regulowania szybkości pobierania danych z internetu przez użytkowików. Dzielenie łącza nie ma nic wspólnego z udostępnianiem łącza czyli z umożliwieniem użytkownikom wewnątrz sieci łączenia się z internetem za pośrednictwem serwera. Udostępnianie jest osobnym zagadnieniem i nie jest omówione na tej stronie (szukaj na wyszukiwarkach hasła: maskarada, masquerade, nat, firewall)


UWAGA1
Proszę, jeśli to możliwe, o korzystanie z mirrorów:
http://www.cbq.pluton.one.pl
http://www.cbq.trzepak.net

a dopiero w ostateczności ze strony głównej:
http://sp9wun.republika.pl/

Na wszystkich stronach jest to samo a na http://sp9wun.republika.pl/ są założone limity miesięczne ilości pobieranych danych i jak się okazało na mojej stronie limity te zostały w kwietniu przekroczone i stronę mi wyłączono. Musiałem zapłacić z własnej kieszeni onetowi za "ulepszenie" strony a nie mam zamiaru non-stop dokładać do interesu. Więc jak ktoś zagląda na tą stronę regularnie to proszę o korzystanie z mirrorów.


UWAGA2
Proszę nie pisać na mój adres prywatny listów z prośbami o pomoc w instalacji i konfiguracji shapera.
Jak ktoś ma problem - nich pisze na listę dyskusyjną. Na adres prywatny można wysyłać jedynie raporty o błędach. Ale zanim ktoś taki raport wyśle - proszę najpierw sprawdzić w opisie czy błąd nie jest już znany.
Nie będę odpisywał na inne maile, bo już nie wyrabiam czasowo - bardzo mi przykro.


Zapisz się na listę mailową shaperd
Powered by groups.yahoo.com
  1. Historia zmian
  2. Zasada działania
  3. Pobierz pliki
  4. Warunki działania
  5. Znane błędy
  6. Problemy
  7. FAQ
  8. Księga Gości

historia:

Na wstępie chciałbym zaznaczyć, że program ten jest w wersji beta a to znaczy, że jest niedostatecznie przetestowany i może sprawiać nijakie problemy. Należy się spodziewać, że będzie jeszcze nie raz uaktualniany.


Zasada działania:

Po włączeniu się w sieć nowego użytkownika i rozpoczęciu transmisji z internetem (lokalne połączenia nie rezerwują łącza), daemon przydziela część łącza wynikającą z prostego podziału szybkości maksymalnej łącza przez ilość aktualnie przez nie pracujących komputerów.
Po określonym czasie (zależnie od konfiguracji) - np. po 10 sekundach - shaperd sprawdza, czy użytkownik wykorzystał co najmniej 50% z przydzielonego łącza. Jeśli nie wykorzystał to zostaje mu przydział zmniejszony o 25%. Jeśli użytkownik wykorzystuje przydział w granicach 50%-75% to program niczego nie zmienia a jeśli wykorzystuje więcej od 75% to shaperd zwiększa mu transfer o minimalny transfer - pod warunkiem, że coś jeszcze zostało do przydzielenia. Zasada jest taka, że w pierwszej części daemon sprawdza, komu można obciąć a dopiero na samym końcu z tego co zostanie z przydzielania szybkości dodaje tym co dużo ciągną.
Dzięki temu program zapobiega przejęciu całkowitej kontroli nad łączem przez jednego nawiedzonego maniaka programów P2P lub idioty otwierającego kilkadziesiąt sesji WWW. Program ten reguluje transfer przychodzący z internetu do użytkowników, transfer wychodzący od użytkowników do internetu oraz transfer wychodzący z serwera do internetu.
Przy włączonej opcji extended_queue shaperd dodatkowo dla każdego użytkownika tworzy 4 podklasy z różnymi priorytetami.
Shaperd jest programem napisanym w języku C funkcjonalnie odpowiadającym skryptowi shaper_cbq.


Shaperd sam nie ogranicza transferu - on tylko tworzy odpowiednie reguły dla kernela. Resztą zajmuje sięjuż system. Shaperd jest więc w pewnym sensie nakładką na iproute2.


Uwaga

Istnieje, jak na razie nie rozwiązany, bład w kernelach 2.4.x polegający na tym iż niektóre połącznia wiszą ma maskaradzie przez 5 dni pomimo tego, że komputer, dla którego je utworzono nie był od kilku dni włączony w sieć. W przypadku shaperd problem wiszących połączeń obszedłem ignorując połączenia z czasem wygaśnięcia większym niż 600 sekund).


OSTRZEŻENIE

Autor tego oprogramowania nie bierze odpowiedzialności za jakiekolwiek błedy, awarie i uszkodzenia wywołane przez działanie tego programu. Wszystko co robisz - robisz na własną odpowiedzialność.
Program ten testowany jest na systemach opartych na jądrzach: 2.4.8, 2.4.12 i 2.4.18-grsec, 2.4.20-grsec, 2.4.21, firewall'ach na ipchains i iptables (1.2.6a, 1.2.7a) oraz na dystrybucjach: Mandrake 8.1 i Mandrake 9.1 - łączach: SDI, iDSL 512Kbit, iDSL 1Mbit, DSL 768Kbit, asynchroniczne 1Mbit, Polpak 1Mbit, Polpak 2Mbit.


Jeśli masz jakiś problem z uruchomieniem tego programu - zanim do mnie napiszesz zaglądnij do sekcji Problemy.



Ostatnia wersja:shaperd.2.2.2.tar.gz (11.07.2003)

Starsze wersje 2.XX:
shaperd.2.200beta61.tar.gz (2.00beta61-26.04.2003)
shaperd.2.200beta59.tar.gz (2.00beta59-05.04.2003)
shaperd.2.200beta56.tar.gz (2.00beta56-07.03.2003)
shaperd.2.200beta44.tar.gz (2.00beta44-03.02.2003)
shaperd.2.200beta36.tar.gz (2.00beta36-19.01.2003)
shaperd.2.200beta28.tar.gz (2.00beta28-03.01.2003)
shaperd.2.200beta27.tar.gz (2.00beta27-28.12.2002)
shaperd.2.200beta26.tar.gz (2.00beta26-15.12.2002)
shaperd.2.200beta23.tar.gz (2.00beta23-08.12.2002)
shaperd.2.200beta22.tar.gz (2.00beta22-03.12.2002)
shaperd.2.200beta19.tar.gz (2.00beta19-15.11.2002)
shaperd.2.200beta17.tar.gz (2.00beta17-13.11.2002)
shaperd.2.200beta14.tar.gz (2.00beta14-12.11.2002)
shaperd.2.200beta11.tar.gz (2.00beta11-04.11.2002)
shaperd.2.200beta8.tar.gz (2.00beta8-01.11.2002)
shaperd.2.200beta6.tar.gz (2.00beta6-27.10.2002)
shaperd.2.200beta4.tar.gz (2.00beta4-26.10.2002)
shaperd.2.200beta3.tar.gz (2.00beta3-25.10.2002)

Starsze wersje 1.XX


Warunki działania

Aby wogóle dzielenie łącza pod Linuxem zaczęło działać to musi być spełnione wiele warunków:
  1. zainstalowany pakiet iproute2

  2. przekompilowane jądro aby obsługiwało CBQ (nie wiem jak jest z innymi dystrybucjami ale w Mandrake 8.1 CBQ (QoS) było wkompilowane standardowo przez dystrybutora więc nic nie musiałem kompilować.
    Jeśli nie wiesz, co ustawić do kompilacji to zaglądnij tutaj.

  3. Daemon współpracuje zarówno z ipchains jak i iptables (rodzaj firewalla jest rozpoznawany automatycznie).

  4. Nie jest potrzebne robienie jakichkolwiek wpisów na firewall'u specjalnie dla shaperd. Daemon robi wszystkie potrzebne wpisy sam przy starcie.

  5. Aby przetestować jądro pod kątem zgodności z CBQ trzeba zainstalować iproute2 (na Mandrake 8.1 iproute2 jest instalowane domyślnie) i wpisać komendę:
    tc -d qdisc
    Jeśli w wyniku jej działania pojawi się jakiś komunikat typu RTNETLINK error to jądro nie obsługuje CBQ (lub nie ma załadowanego modułu).
    Jeśli jest gotowe to ta komenda nic nie wyświetli (lub wyświetli przydzielone widełki).

  6. Aby działało dzielenie łącza wychodzącego oraz kolejkowanie (opcja extended_queue) firewall musi prawidłowo zaznaczać (MARK) pakiety. Niestety - na niektórych systemach jest z tym problem i nic na to nie jestem w stanie poradzić oprócz uaktualnienia firewalla/kernela/iproute2 (* - niepotrzebne skreślić ;)

Konfiguracja

  1. shaperd działa przy pewnych założeniach:
  2. Daemon musi działać na prawach root i mieć możliwość zapisu do katalogu /var/lib/shaper. Katalog taki trzeba założyć z właścicielem root i prawami 755

  3. W /etc/shaper/ignore.X sa wpisane wyjątki dla których shaper nie rezerwuje łącza. Mogą to być przykładowo:
    217.96.55.5 411 - numer ip i port 411
    213.180.130.190 - numer ip i kazdy port
    22$ - każdy numer ip i port 22 (telnet)
    Zrobione jest to po to, żeby skrypt nie rezerwował łącza na transmisje nie generujące praktycznie ruchu (np. GaduGadu, IRC, telnet, Chaty itp). Należy pamiętać aby każdy numer IP kończył się znakiem spacji. Proszę nie wstawiać pustych linii w tym pliku oraz nie edytować go pod systemem Windows (problem z CR+LF).
    Aktualną listę branych pod uwagę przy podziale numerów ip i portów na maskaradzie (czyli po wyeliminowaniu połączeń z pliku /etc/shaper/ignore.X) można podglądnąć pisząc:
    /sbin/shaperd shownat
    W dostarczonym przykładowym pliku są zrobione wpisy dla popularnych komunikatorów np. GaduGady, Tlen oraz dla kilku czatów i MUD'ów.


  4. W katalogu /var/lib/shaper generowane są pliki:
    • bitrate_user_sh.X.old - zawiera numery ip oraz przydzielone widełki dla download.
    • bitrate_user_up.X.old - zawiera numery ip oraz przydzielone widełki dla upload.
    • Można to wykorzystać do wizualizacji na stronie www - przykład użycia. Zawartość tych plików może wyglądać mniej-więcej tak:
      192.168.1.2/32 40000
      192.168.1.9/32 58000
      
      lub gdy speed_ext jest ustawiony inny niż bit (w tym przypadku Kbit):
      192.168.1.2/32 40 Kbit
      192.168.1.9/32 58 Kbit
      
    • Warto sprawdzić jak program działa wydając komendę:
      tc -s qdisc show dev eth1
      
      gdzie: eth1 to nazwa interfejsu lokalnego jeśli sprawdzamy dzielenie download
      Jeśli używasz HTB zamiast CBQ to sprawdzaj komendą:
      tc -s class show dev eth1
      
      Wyniki jej działania mogą wyglądać tak:
       qdisc tbf d09f: dev eth0 rate 5430bps burst 10Kb lat 1.2s              
       Sent 108930 bytes 73 pkts (dropped 0, overlimits 0)                   
                                                                             
       qdisc tbf d09e: dev eth0 rate 5430bps burst 10Kb lat 1.2s             
       Sent 126618 bytes 89 pkts (dropped 0, overlimits 0)                   
                                                                             
      
       qdisc tbf d09d: dev eth0 rate 1638bps burst 10Kb lat 3.8s             
       Sent 54699 bytes 65 pkts (dropped 0, overlimits 321)                  
       backlog 6110b 5p                                                      
                                                                             
       qdisc tbf d09c: dev eth0 rate 10Mbit burst 10Kb lat 4.8ms             
       Sent 0 bytes 0 pkts (dropped 0, overlimits 0)                         
                                                                             
       qdisc tbf d09b: dev eth0 rate 10Mbit burst 10Kb lat 4.8ms             
       Sent 5690 bytes 53 pkts (dropped 0, overlimits 0)                     
                                                                             
      
       qdisc cbq 10: dev eth0 rate 10Mbit (bounded,isolated) prio no-transmit
       Sent 310829 bytes 302 pkts (dropped 0, overlimits 1555)               
       backlog 5p                                                            
        borrowed 0 overactions 0 avgidle 624 undertime 0
      
      Nalezy zwrócić szczególną uwagę na linie z rate innym niż 10Mbit (lub innym w przypadku posiadania łącza lokalnego o innej szybkości maksymalnej). W tym przypadku trzy pierwsze klasy obrazują transfery trzech różnych komputerów w sieci lokalnej. Należy zwrócić uwagę, czy rejestrowane są wielkości wysłanych danych Sent. Jeśli tak to znaczy, że CBQ działa i obcina transfer przekraczający widełki.

    • W razie wystąpienia problemów przy uruchomieniu tego daemona, zanim do mnie napiszesz - postaraj się przeczytać ten opis jeszcze raz i sprawdź, czy nie popełniłeś gdzieś błedu. Potem dopiero możesz pisać. Ze względu na brak czasu moja pomoc może być trochę opóźniona (lub może jej nie być wcale) więc polecam zaglądnięcie do Księgi gości. Może ktoś z wpisanych tam adminów zechce pomóc wcześniej niż ja będę w stanie to zrobić.

    • Poniżej można zobaczyć jak zachowuje się w praktyce shaperd (łącze DSL).


      Statystyki wygenerowano programem lstat 2.2


      Ponieważ część z Was zanudza mnie mailami z prośbą o pomoc w konfiguracji programu lstat do współpracy z shaperd to poniżej postaram się wyjaśnić jak to zrobić.
      • Zakładamy nowy wykres Statystyki Pakietów i jakoś go tam nazywamy (dla identyfikacji). Właściwie to domyślna konfiguracja jest wystarczająca do współpracy z shaperd więc nie zmieniamy w ustawieniach wykresu niczego.
      • Pod wykresem klikamy na przycisk Nowy element i w tabelce, która pojawi się poniżej wpisujemy w pozycji Filtr danych nazwę filtru dla lokalnego usera oraz jego nazwę. Nazwę filtru dla transferów przychodzących (download) znajdujemy wpisując:
        /usr/local/lstat/bin/show_filters | grep shaper | awk '{print $1,$11}'
        
        a dla wychodzących (upload):
        /usr/local/lstat/bin/show_filters | grep shaout | awk '{print $1,$10}'
        
        Dostaniemy listę z nazwami filtrów po lewej stronie i numerami ip im odpowiadającymi Kolejność jest taka sama jak wpisy w pliku iplist dlatego lepiej potem nie przestawiać linijek w iplist.
        Zakładamy osobne wykresy dla download i upload (z tego co zauważyłem to można maksymalnie 10 userów na jeden wykres wpisać a potem trzeba tworzyć kolejne wykresy) i to jest cała filozofia. Mam nadzieję, że mi wreszcie dacie spokój z lstat'em.

    • Jeśli przebrniesz przez instalację i uda Ci się skonfigurować ten program na swoim serwerze, może zechcesz się wpisać do Księgi gości. Proszę, podaj w niej:
      • Wersja shaper'a
      • Opis systemu na serwerze (dystrybucja, wersja kernela, inne uwagi)
      • swój e-mail kontaktowy (możesz go zakończyć jakimś "ściemniaczem anyspamowym" ;) typu .NOSPAM)
      • url strony www (jesli isnieje) serwera
      Może pomożesz innym w instalacji tego daemona a mnie trochę odciążysz. Będę bardzo wdzięczny.

    • Będzie mi miło, jeśli jakiś szczęśliwy administrator wrzuci gdzieś na swoją stronę sieciową ten mały banerek:

      Powered by Shaper CBQ

      A tutaj jest kod html do wklejenia:
      <p><a href="http://sp9wun.republika.pl/">
      <img src="http://sp9wun.republika.pl/linux/pics/shaper.png" border="0" 
      width="89" height="32" alt="Powered by Shaper CBQ"></a></p>
Zobacz skrypt PHP kto.php (dodatkowy skrypt ckwintalk do kontroli wintalka - u mnie w sieci wintalk jest obowiązkowy) do generowania listy aktywnych komputerów wraz z przydzielonymi im widełkami przez shaper'a. Skrypt trzeba wyedytować i powpisywać dane ze swojej sieci. Wywołuje się go odwołując się do kto.php.
60 - oznacza, że skrypt będzie odświerzany co 60 sekund. Skrypt wymaga skonfigurowania DNSa dla lokalnych numerów ip. Ponadto mogą wystąpić błędy z niektórymi wersjami binda. Trzeba się pobawić w przerabianie.

Znane błędy

Komunikaty w logu:
  • shaperd0: Can't find mask for IP v]ţ.Ň
    - Tak objawia się bug, którego jeszcze nie zlokalizowałem. Wygląda na to, że coś jeździ mi po pamięci ale nie mogę tego zlokalizować. Wpis pojawia się sporadycznie i jeśli kogoś denerwuje to może sobie wyłączyć wyrzucanie przez shapera komunikatu "Can't find mask for IP ..." ustawiając w konfiguracji mask_mesg=no


  • kernel: CBQ: class XXXXXXXX has bad quantum==0, repaired
    - Błąd pojawiający się na niektórych systemach i jak na razie przyczyny jego występowania nie znalazłem.


  • kernel: CBQ: class XXXXXXXX has bad quantum==YYYYY, repaired
    - Błąd pojawiający się na niektórych systemach i jak na razie przyczyny jego występowania nie znalazłem.


  • kernel: HTB init, kernel part version 3.7
    - Wpis pojawia się przy inicjalizacji klasy HTB dla wersji 3.X. Nie oznacza on niczego złego jednak fakt, że przy każdym tworzeniu klasy HTB tworzony jest taki wpis powoduje, że nie ma sensu używać shapera z wyłączoną opcją continuous_control bo co parę sekund będzie ten komunikat w logu zapisywany.


  • Feb 27 23:52:43 frodo kernel: htb*g j=3799623                  
    Feb 27 23:52:43 frodo kernel: htb*r7 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r6 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r5 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r4 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r3 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r2 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r1 m=0                       
    Feb 27 23:52:43 frodo kernel: htb*r0 m=0                       
    
    pojawia się u mnie przy inicjalizacji klasy HTB 3.X. Uwagi jak wyżej.


  • kernel: HTB: need tc/htb version 3 (minor is 7), you have 10
    - uaktualnij sobie komendę tc - najlepiej pobierz ją ze strony autora HTB.


  • kernel: HTB: mindelay=500, report it please !
    - Błąd opisany na stronie HTB FAQ. Przyczyna jego może być taka, że jakiś user dostał przydział mniejszy niż zalecany przez autora HTB 4Kbit. Aby go uniknąć wystarczy wpisać lospeed nie mniejsze niż 4Kbit.


  • kernel: assertion (cl && cl->un.leaf.q->q.qlen) failed at sch_htb.c(959)
    htb: class 10159 isn't work conserving ?!
    - Błąd opisany na liście dyskusyjnej lartc - u mnie występuje przy inicjalizacji HTB - żadnych przykrych objawów nie zauważyłem.


Problemy

Aby ustrzec się pewnych problemów, które mogą wyniknąć w trakcie normalnej eksploatacji daemona należy przestrzegać kilku zasad (zasady te będą ulegać zmianom w trakcie wprowadzania zmian w kolejnych wersjach programu - na razie jednak mysząbyć ponieważ nie jestem wszechwiedzący i nie z każdym problemem potrafię sobie poradzić)

  1. Jeśli shaperd wiesza się lub nie chce się uruchomić - zacznij od skompilowania na swoim systemie kodów źródłowych. Plik wykonywalny dostarczany w archiwum jest skompilowany na dość świerzym systemie i mogą być problemy z uruchomieniem na bardziej wiekowych dystrybucjach.


  2. Przy starcie systemu skrypt startowy /etc/init.d/shaperd uruchamiaj możliwie na końcu a w szczególności zawsze uruchamiaj go po jakichkolwiek skryptach, które mogą modyfikować firewall (np. wszelkie skrypty do konfiguracji maskarady, firewalla itp.).


  3. Jeśli wykonywałeś jakiekolwiek operacjie na firewallu (wyczyściłeś liczniki regułek, dopisałeś lub skasowałeś jakieś regułki, przeładowałeś firewall itp.) obowiązkowo zrestartuj shaperd. Zaniechanie tego może skutkować zdławieniem całego transferu przychodzącego, ponieważ shaperd przy starcie tworzy własne regułki na firewall'u i muszą być one sprawdzane w pierwszej kolejności. Zmiana kolejności reguł na firewallu może (choć nie musi) skutkować tym, że reguły rejestrujące ruch przychodzący dla shaper'a niczego nie będą rejestrować i daemon stwierdzi, że nikt nie wykorzystuje przydzielonych widełek więc zacznie obniżać przydziały (aż do minimum gwarantowanego). Aby sprawdzić czy reguły dla shapera znajdują się na właściwym miejscu i pracują prawidłowo wystarczy zrobić następującą operację:
    • dla ipchains:
      • ipchains -L output -n
        tablica shaperX powinna być na najwyższej pozycji
        Chain output (policy ACCEPT):                                            
        target     prot opt     source                destination           ports
        shaout0    all  ------  0.0.0.0/0             0.0.0.0/0             n/a
        shaper0    all  ------  0.0.0.0/0             0.0.0.0/0             n/a
        ppp-out    all  ------  0.0.0.0/0             0.0.0.0/0             n/a  
        eth-out    all  ------  0.0.0.0/0             0.0.0.0/0             n/a  
        


      • ipchains -L shaper0 -n
        w tej tablicy powinny znajdować się reguły dla wszystkich numerów IP z pliku /etc/shaper/iplist.0. Przykład:
        Chain shaper0 (1 references):                                               
        target     prot opt     source                destination           ports   
        RETURN     tcp  ------ !192.168.1.1           192.168.1.2           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.3           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.4           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.5           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.6           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.7           * ->   *
        RETURN     tcp  ------ !192.168.1.1           192.168.1.8           * ->   *
        
        Analogicznie jest dla tablicy upload shaout, z tym, że w kolumnie source będą numery IP userów.
      • watch ipchains -vxL shaper0 -n
        watch ipchains -vxL shaout0 -n
        
        pozwoli na obserwowanie, czy regułki liczą ilość pobranych danych przezd poszczególne numery IP. Generalnie - jeśli jakiś numer aktualnie coś ciągnie z internetu to jego regułka musi liczyć. Jeśli tego nie robi to należy próbować zrestartować shapera

    • dla iptables:
      • iptables -L FORWARD -n --line-numbers | grep sha
        tablica shaoutX powinna mieć pozycję 1 a shaperX pozycję numer 2:
        1    shaout0     all  --  0.0.0.0/0            0.0.0.0/0
        2    shaper0     all  --  0.0.0.0/0            0.0.0.0/0
        
      • iptables -L shaper0 -n
        w tej tablicy powinny znajdować się reguły dla wszystkich numerów IP z pliku /etc/shaper/iplist.0. Przykład:
        Chain shaper0 (1 references)                          
        target     prot opt source               destination 
        RETURN     all  -- !192.168.0.0/16       192.168.1.2 
        RETURN     all  -- !192.168.0.0/16       192.168.1.3 
        RETURN     all  -- !192.168.0.0/16       192.168.1.4 
        RETURN     all  -- !192.168.0.0/16       192.168.1.5 
        RETURN     all  -- !192.168.0.0/16       192.168.1.6 
        RETURN     all  -- !192.168.0.0/16       192.168.1.7 
        RETURN     all  -- !192.168.0.0/16       192.168.1.8 
        RETURN     all  -- !192.168.0.0/16       192.168.1.9 
        RETURN     all  -- !192.168.0.0/16       192.168.1.10
        
        Analogicznie jest dla tablicy upload shaout, z tym, że w kolumnie source są numery IP userów.
      • watch iptables -vxL shaper0 -n
        watch iptables -vxL shaout0 -n
        
        pozwoli na obserwowanie, czy regułki liczą ilość pobranych danych przezd poszczególne numery IP. Generalnie - jeśli jakiś numer aktualnie coś ciągnie z internetu to jego regułka musi liczyć. Jeśli tego nie robi to należy próbować zrestartować shapera

  4. Nie wolno samodzielnie ustawiać czasów utrzymywania połączeń na maskaradzie (np. komendą ipchains -M -S) - dotyczy posiadaczy kerneli 2.2.x (ponieważ w 2.4.x komenda ta nie działa ;). Czasy te ustawia shaperd i na ich podstawie kontroluje, który numer IP jest aktywny na łączu. Ustawienie tych czasów przy pracującym shaperze może spowodować, że shaperd nie będzie widział niektórych połączeń przez maskaradę a co za tym idzie - nie przydzieli dla nich widełek.


  5. Generalnie odradzam niewpisywania wybranych (uprzywilejowanych?) numerów IP do pliku /etc/shaper/iplist.X w celu uniknięcia przydzielenia im widełek. Skutek takiego działania wcale nie jest oczywisty i może być daleki od zamierzonego. W zależności od systemu i wersji zainstalowanego na nim oprogramowania, na jednych systemach coś takiego może zadziałać i wybrany numer IP będzie mógł przejąć całe łącze dla siebie. Na innych systemach może być problem z dopchaniem się do łącza bez przydzielonych widełek. Niemniej skutek zawsze będzie jeden - shaperd będzie bardzo gwałtownie zmieniał przydziały innym użytkownikom "szarpiąc" im szybkościami. Prowadzi to niewątpliwie do nierównomiernego obciążenia łącza i wypacza ideę stosowania shapera.


  6. Kolega Grzegorz Cichowski stwierdził, że w przypadku wpisywania w pliku /etc/shaper/shaper.X.cfg parametrów dla łącza lokalnego 100Mbit należy podać szybkość 8Gbit co po przeliczeniu na bity dałoby w wyniku liczbę 8589934592, która jest z kolei liczbą 33 bitową i przekracza wielkość rejestrów procesora. Aby wpisać taką liczbę należy przeliczyć ją na kbit a nie podawać w bit. Po przeliczeniu liczba ta wynosi 8388608 i jednostka kbit. Proszę pamiętać o przeliczeniu na tą jednostkę wszystkich szybkości podawanych w konfiguracji jak i w lini poleceń!


  7. Proszę nie używać do edytowania plików konfiguracyjnych programów pracujących pod Dosem/Windowsem z powodu niestandardowego formatu końca linii (CR+LF).


  8. Nie należy wstawiać pustych linii do plików konfiguracyjnych.


FAQ

  1. Nie rozumiem jaka jest idea funkcji "jump". Jakie ustawienie by mi Pan polecał dla łącza 256 downstream i 64 upstream. Przydzielane minimum u mnie wynosi 16kbit/s?


  2. Jeśli na łączu 230 kbit siedzą dwie osoby i dostają one po 50 i 35 kbit to oznacza to ze skrypt określił, że więcej one nie potrzebują ? (Te wartości w konfiguracji oznaczają wartości minimalne dla tych hostow).


  3. Gdy w pliku iplist.0 nic nie jeste wpisane to shaperd uruchamia się bez błędów, gdy wpiszę tam jakiś lokalny adres to zaraz pojawia się błąd "interface name for IP number 192.168.42.12/32 not found in /etc/shaper/iplist.0. Co jest tego przyczyną?


  4. Mam server-router na Freesco i chciałbym wiedzieć czy jest wersja shaperd'a dla niego?


  5. Shaperd czasem nie widzi maski (jak sądze podsieci). Kartę sieciową mam ustawioną statycznie 192.168.0.1/24 i działa kilka, kilkanaście minut po czym pisze "can't find mask for IP....". Jedyne co zaobserwowałem, to że dzieje się to zwykle po podłączeniu się kogoś do sieci (dhcp).


  6. Czy shaperd udałoby się odpalić na systemie rodziny OpenBSD?


  7. Według tego co jest napisane na stronie - jest możliwość konfiguracji żeby do jednych widełek przypisywać 2 ipki. Czy jest też taka możliwość jeśli ipki nie są sąsiadujące? np 192.168.1.4 i 192.168.1.14 żeby miały ten sam przydział?


  8. Coś mi nie gra - mianowicie ustawienie w Kbit transferow sdi - czy ta linia jest prawidlowa ??
    inter_int=ppp0;0,5;92;0,5;60;auto;1
    i nie wiem czy mam prawidłowo ustawione?? Bo chciałbym żeby było download min 0,5kbit max 9kbit a upload min 0.5kbit max 6kbit


  9. ----[router]--tu jest podsiec (adresy publiczne) z serwerami www, poczty, proxy---[router]---tu podsieć (adresy publiczne), do której jest podłączony router z shaperkiem :)----[router z shaperkiem]--- klienci, podsieć 192.168.1.0/24.
    Czy jest możliwe, aby ruch do sieci z proxy, www, pocztą był ogólnie pomijany w dzieleniu - po wpisaniu do ignorowanych z tego co rozumiem transfer nie będzie obcięty tylko w momencie, gdy podczas sprawdzania aktywnych połączeń na maskaradzie będzie tam ruch do ip tej podsieci.


  10. Jak mam dopisywac 'virualne' karty sieciowe do shapera ? Chodzi mi o sytuacje kiedy jedna karta siecowa ma dwa IP i w systemie sa to dwa rozne urzadzenia, np.: eth0 i eth0:0. Nie moge przekonac shapera aby przyjal urzadzenie eth0:0.


  1. Policz - jeśli cykl pracy (delay) masz ustawiony na 10 sekund i co cykl shaperd zwiększa komuś widełki od 16kbit to pełnej szybkosci to ile czasu mu to zajmie? 15 cykli czyli 150 sekund dla jump_type=1 (skok co cykl o 16kbit). Jeśli to wartość do zaakceptowania przez Ciebie to sobie zostaw tyle.


  2. Tak (pod warunkiem, że shaperd pracuje prawidłowo - jest pewien objaw nieprawidłowego działania shaperd jeśli wszyscy mają zawsze przydzielone minimalne widełki i nigdy się one nie zwiększają (oprócz momentów kiedy ktoś się włącza po przerwie w pracy. Można sprawdzić czy shaperd rozpędza połączenie czekając na minimalny przydział a potem otwierając dużą ilość połączeń i ciągnąc ile się da. Powinien się rozpędzać. Jeśli tego nie robi to polecam lekturę sekcji Problemy.)


  3. Brak przypisanego interfejsu dla tego numeru IP wpis w iplist powinien wyglądać przykładowo tak (należy wpisać odpowiednie nazwy interfejsów - podane nazwy eth0 i eth1 to przykład):
    192.168.42.12/32=eth1 eth0
  4. Nie ma - fressco nie ma czegoś takiego jak CBQ i shaperd nawet jakby zadziałał to i tak nic nie ograniczy bo nie ma czym (nie ma odpowiednich narzędzi w kernelu do zarządzania pasmem). Istnieje za to skrypt dynamicznego ograniczania pasma dla FreeSCO (dla innych systemów opartych na jądrach 2.0.3x po drobnym przystosowaniu też powinno działać). Skrypt ten nazywa się justice, i jest ciągle niedokończoną prowizorką :), ale jest bardzo skuteczny w zakresie ruchu przychodzącego. http://www.freesco.internetdsl.pl/justice.htm (podał Robert R "RaaDaaR" z *Polska Grupa FreeSCO*)


  5. To jest efekt tego, że dla iptables w tablicy ipconntrack pojawiają się czasem takie połączenia, które shaperd nie potrafi wyeliminować - jak na przykład w Twoim przypadku 192.168.0.1 czyli numer IP serwera - rozwiązania są dwa:
    • wpisać do ignore.0 numer ip 192.168.0.1
      gdzie to znak spacji - to ważne bo inaczej shaperd będzie ignorował wszystkie numery ip zaczynające sie od 192.168.0.1 czyli np 192.168.0.1 ale i 192.168.0.10-19, 192.168.0.100-199
    • lub włączyć opcję nomasq=yes - wtedy shaperd nie sprawdza tablicy ipconntrack tylko regułki na firewallu

  6. Nie wiem - nie znam się na BSD. Jak BSD ma kernel z jadrem serii 2.2.x lub 2.4.x, obsługuje CBQ i ma firewall na ipchains lub iptables to powinno działać.


  7. Nie. Numery IP muszą być sąsiadujące i spełniać takie same warunki jak numery IP ze wspólną maską. Czyli pierwszy IP musi być podzielny przez 2^n gdy chcemy połączyć 2^n numerów IP w jeden przydział.


  8. Na komputerach znak dziesiętny to nie przecinek tylko kropka. Nawiasem mówiąc shaperd i tak ułamków nie przyjmuje więc wpisywanie z przecinkiem spowoduje tylko tyle, że wartość zostanie zaokrąglona do pełnej liczby bez przecinka - czyli 0.5 = 0. Przelicz sobie wszystko na bity jak musisz mieć mniejsze wartości.


  9. Nie jest możliwe. Ignore na to nie pomoże. Można by próbować wpisywać z zewnątrz dodatkowe filtry u32 z tymi wyjątkami (pamiętaj aby wpisywać po każdym restarcie shapera). Na przykład:
    tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 217.97.124.128/32 flowid 1:1
    Gdzie:
    • eth1 - to interfejs lokalny do sieci
    • 1:0 - dla numeru klasy dla tego interfejsu lokalnego (wpis w shaper.cfg sekcja local_int - ostatnia cyfra w definicji - 1)
    • 217.97.124.128/32 numer IP wcześniejszego routera, dla którego transfer ma być nieograniczany
    • 1:1 - analogicznie jak dla 1:0
    Należałoby też oczywiście wpisać ten numer IP wcześniejszego routera w pliku ignore.


  10. Shaperd nie dopuszcza wpisu aliasów interfejsów. Generalnie iproute2 wogóle nie rozpoznaje czegoś takiego jak nazwa interfejsu z dwukropkiem. Można shaperd zmusić do pracy z dodatkowymi numerami IP ale z pewnymi kombinacjami i ograniczeniami.
    Załóżmy, że mamy interfejs lokalny eth1 na którym jest założony alias eth1:1 z numerem ip zewnętrznym. W local_int definiujemy numery IP lokalne podstawowe dla danego interfejsu:
    local_int=eth1;10240;192.168.1.1/32;192.168.1.0/24;2
    ustawiamy opcje:
    nomasq=1
    i w iplist oprócz numerów IP lokalnych wpisujemy dodatkowo ten zewnetrzny IP.
    Problem takiego wpisu jest tylko jeden - user posługujący się tym numerem zewnętrznym będzie miał ograniczony transfer lokalny z serwera. Można oczywiście to ominąć dopisując dodatkową regułkę filtru u32 - coś a la przykład
    wcześniejszy. Lepsze rozwiązanie to wogóle nie stosowanie aliasów tylko zrobienie translacji SNAT/DNAT zewnętrznych numerów IP tak aby były widziane wewnątrz sieci jak lokalne. Wtedy problemów nie ma żadnych.




Powrót Linux
@
Webmaster Grzegorz Fitrzyk

stat4u