Na podstawie tej sekcji Linux Advanced Routing & Traffic Control HOWTO nie mogę tc
ograniczyć prędkości sieci na moim komputerze.
Router to modem Motorola SurfBoard z kilkoma możliwościami routingu i zaporą ogniową. Maszyna, którą chcę ograniczyć ruch, to 192.168.0.5 , a także skrypt jest uruchamiany z 192.168.0.5 .
Oto moja adaptacja poleceń z linku powyżej dla /etc/NetworkManager/dispatcher.d/
:
#!/bin/sh -eu
# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:
# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
# set to a 3mbit interface for more precise calculations
tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000 \
bandwidth 3mbit
# leave 30KB (240kbps) to other machines in the network
tc class add dev wlan0 parent 1: classid 1:1 cbq \
rate 2832kbit allot 1500 prio 5 bounded isolated
# redirect all traffic on 192.168.0.5 to the previous class
tc filter add dev wlan0 parent 1: protocol ip prio 16 \
u32 match ip dst 192.168.0.5 flowid 1:1
# change the hashing algorithm every 10s to avoid collisions
tc qdisc add dev wlan0 parent 1:1 sfq perturb 10
fi
Problem polega na tym, że próbowałem ustawić 2832kbit na bardzo małe wartości do testowania (jak 16kbit ), ale nadal mogę przeglądać internet z dużą prędkością. Problem nie istnieje NetworkManager
, ponieważ testuję skrypt ręcznie.
EDYCJA: Przekonałem się, że zmieniając dst 192.168.0.5
na src 192.168.0.5
, prędkość wysyłania jest niezawodnie ograniczona, ale nadal nie zastanawiałem się, jak uzyskać szybkość pobierania, która jest dla mnie najważniejsza.
źródło
wondershaper
faktycznie działa na moim komputerze, ale w rzeczywistości wyrzuca kilka błędów, a także robi więcej niż to, czego potrzebuję (ustalanie priorytetów itp.). W przypadku łącza w dółwondershaper
używahandle ffff:
, ale nadal nie jestem pewien, jak to działa.tc qdisc add dev wlan0 handle ffff: ingress; tc filter add dev wlan0 parent ffff: protocol ip prio 50 u32 match ip dst 192.168.0.5 police rate 200kbps burst 10k drop flowid :1
. Problem polega na tym, że jest bardzo zawodny, powoduje niestabilne prędkości pobierania (jeśli ustawiony na 200, pobiera z ~ 80-120). Jak wspomniano w moim pytaniu, prędkość wysyłania jest naprawdę ograniczona do pożądanej wartości.Odpowiedzi:
Nie można ograniczyć ruchu przychodzącego na maszynie docelowej, ponieważ już do niego dotarł.
Aby właściwie zrobić to, co chcesz, musisz umieścić
tc
na swojej bramie. Prawdopodobnie nie jest to dla ciebie opcja, ale tak jest.Ruch Ingress można kontrolować tylko w ten sposób, że odrzuca on pakiety przekraczające ograniczenie prędkości. Jest to nieefektywne, ponieważ później zabierasz więcej przepustowości, aby ponownie otrzymać ten sam pakiet. Działa to mniej więcej w przybliżeniu, ponieważ TCP jest zaprojektowany do obsługi utraty ruchu poprzez spowolnienie, gdy pakiety są tracone, ale kończysz się coraz wolniej i szybciej, gdy TCP skaluje się, co pokazuje twój najnowszy komentarz.
Istnieje jednak sposób, aby uczynić swój system bramą dla siebie, wpychając „pośrednie funkcjonalne urządzenie blokujące” na ścieżkę sieci. Sugeruję przeczytanie go, a następnie wypróbowanie go w celu ograniczenia szybkości ruchu przychodzącego.
Zobacz dyskusję „Teoria” na temat INGRESS / EGRESS shaping / policing na stronie Gentoo.
źródło