UWAGA
Projekt ten jest już od dawna nie rozwijany. Obecnie pracuję nad bardziej uniwersalnym shaperem (nazywa się shaperd), pracującym zarówno na ipchains jak i na iptables. Dlatego zalecam instalowanie daemona 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)
Uwaga
Jeśli nie potrafisz się posługiwać ipchains, o samodzielnym pisaniu skryptów w shellu nawet nie wspomnę - to nie masz tu czego szukać. Nie będę pomagał instalować ten skrypt ludziom, którzy nie mają pojęcia o podstawach. Jak ktoś się nie czuje na siłach a mieszka w Krakowie to nie ma problemu - zainstaluję mu to osobiście (pewnie nie za darmo ;-) Reszta musi sobie radzić sama. Jeśli komuś nie pasuje ten skrypt z powodu założeń to wolna droga - proszę sobie go przerobić. Nie mam czasu na pisanie ludziom skryptów pod kątem ich potrzeb - przykro mi bardzo.
historia:
ipchains -M -S 300 10 60 ipchains -N eth0-out ipchains -A output -i eth0 -j eth0-out ipchains -A eth0-out -p all -s ! 192.168.1.1 -d 192.168.1.2 -j ACCEPT ipchains -A eth0-out -p all -s ! 192.168.1.1 -d 192.168.1.3 -j ACCEPT ipchains -A eth0-out -p all -s ! 192.168.1.1 -d 192.168.1.4 -j ACCEPTGdzie:
ipchains -vL eth0-out -n | grep ! | awk '{print $11,$2}'Co powinno wyświetlić mniej wiecej coś takiego:
192.168.1.2 414M 192.168.1.3 0 192.168.1.4 0 192.168.1.5 93M 192.168.1.6 304M 192.168.1.7 51M 192.168.1.9 347MJeśli wszytkie numery ip są takie same to znaczy, że twoja wersja ipchains różni się od mojej i w innej kolumnie trzyma te numery. Sprawdź to wpisując:
ipchains -vL eth0-out -n | grep !Otrzymasz w wyniku coś mniej więcej takiego (podaję jako przykład jedną linijkę, choć na ekranie mieści się w dwóch):
991K 858M ACCEPT all ------ 0xFF 0x00 * 0x1f !192.168.1.1 192.168.1.2 n/aI teraz policz kolumny od lewej do prawej (traktując te dwie linijki jak jedną długą). W tym przypadku wartość 192.168.1.2 znajduje się w 11 kolumnie, a ilość pobranych danych w kolumnie 2, czyli komenda:
ipchains -vL eth0-out -n | grep ! | awk '{print $11,$2}' ^^ ^ | | pozycja numeru ip docelowego ---/ \---- pozycja licznika pobranych danychJeśli u Ciebie potrzebne dane są w innej pozycji w zmień je w skrypcie /root/ckspeed - na samym końcu skryptu jest:
ipchains -vxL eth0-out -n | grep ! | awk -v pos=$dt '{print $11,$2,pos}' > /var/shaper/bitrate_user.tmpJeśli regułki nie rejestrują żadnego ruchu przychodzącego (są same zera) to poczytaj sobie man do ipchains lub ipchains-HOWTO. Pewnie wcześniej w regułkach masz wpisane coś, co spełnia wszystkie warunki dla każdego numeru ip. Jeśli masz kilka interfejsów to może być troche kłopotliwe wpisywanie ręczne tylu regułek. Dlatego do archiwum shaper_cbq dołączyłem skrypt ipallow w wersji obsługującej wiele lokalnych interfejsów i korzystającego częściowo z konfiguracji shapera_cbq. Jedyne co w skrypcie ipallow trzeba skonfigurować to zmienić nazwę interfejsu który jest dołączony do internetu w linijce:
internet_iface="ppp0"Reszta opisu do tego skryptu znajduje się na stronie Maskarada mogę tylko jeszcze wspomnieć, że jakby ktoś chciał to mogę mu podesłać dodatkowo skrypt do generowania statystyk poszczególnych użytkowników w programie lstat-0.94 (działa na pewno z wersją 0.94 - z nowszą nie sprawdzałem) z zapisów generowanych przez ipallow.
tc -d qdiscJeś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).
mainip=212.17.14.118 local_int=eth0;10485760;192.168.0.0/16;192.168.1.0/24;10Gdzie:
mainip=212.17.14.118 local_int=eth0;10485760;192.168.0.0/16;192.168.1.0/24;10 local_int=eth1;104857600;192.168.0.0/16;192.168.2.0/24;11
mainip=212.17.14.118 local_int=eth0;10485760;192.168.0.0/16;192.168.1.0/24;10 local_int=eth1;104857600;192.168.0.0/16;192.168.2.0/24;11 local_int=ppp1;786432;192.168.3.1/32;192.168.3.0/24;12
192.168.1.2=eth0 192.168.1.3=eth0 192.168.1.4=eth0 192.168.1.5=eth0 192.168.2.2=eth1 192.168.2.3=eth1 192.168.2.4=eth1 192.168.2.5=eth1
/sbin/shaper 115200 8000gdzie 115200 to maksymalnie 115kbit a 8000 to 8kbit czyli minimalny przydział dla użytkownika (podzielić sobie szybkość na ilość użytkowników sieci). Dobrze jest podawać szybkość nie deklarowaną a rzeczywistą, jaką udaje się uzyskać ciągnąc coś przez dłuższy czas przez to łącze w kierunku z internetu do sieci. Inaczej dzielenie wirtualnej szybkości mija się z celem. Łącze SDI nie pracuje z szybkością 115kbit tylko 96kbit (w jedną stronę) więc wpisywanie większych wartości powoduje tylko tyle, że ktoś dostanie w sieci przydział szybkości, którego nigdy nie uda mu się osiągnąć. Po co więc kogoś oszukiwać. Ja dla SDI daję 100000.
modprobe sch_cbq modprobe sch_tbf modprobe cls_u32
*/1 * * * * root /sbin/shaper 115200 8000
shaper_test
192.168.1.2 441127061 1008227523 192.168.1.3 0 1008227523 192.168.1.4 0 1008227523 192.168.1.5 93120766 1008227523 192.168.1.6 304302374 1008227523 192.168.1.7 51299622 1008227523 192.168.1.9 373967723 1008227523 n/a 0 1008227523
192.168.1.2 40000 192.168.1.9 58000
192.168.1.5 192.168.1.9
ckbitrate_user 192.168.1.2
ckbitrate_user_last 192.168.1.2
shaper_test
shaper_test
shaper_test_dns 192.168.1.2
shaper_off
tc -s qdiscWyniki jej działania mogą wygladac 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 0Nalezy 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 i czy pojawiają się jakieś wartości przy dropped i overlimits. Jeśli tak to znaczy, że CBQ działa i obcina transfer przekraczający widełki.
<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>
Powrót | Linux |