Nie można uzyskać tc, aby ograniczyć ruch w sieci


6

Na podstawie tej sekcji Linux Advanced Routing & Traffic Control HOWTO nie mogę tcograniczyć 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.5na 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.


Czy na komputerze jest włączony protokół IPv6? Być może pobieranie odbywa się przez IPv6?
Jan

@ Jan Miałem włączony IPv6 na / etc / hosts, ale wyłączenie go nie miało znaczenia. wondershaperfaktycznie 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ół wondershaperużywa handle ffff:, ale nadal nie jestem pewien, jak to działa.
Teresa e Junior

Specjalny uchwyt ffff: 0 jest zarezerwowany dla kolejki wejściowej. Ingress qdisc pozwala na zastosowanie filtrów tc do pakietów przychodzących przez interfejs, niezależnie od tego, czy mają one miejsce docelowe, czy mają być przekazywane. Spróbuj dodać kolejkę wejściową, użyj uchwytu ffff i zgłoś się.
stycznia

@Jan Gdy próbuję zastąpić pierwiastek z dostaniem TC drukuje Co to jest „cbq”? . I naprawdę nie wiem, jak to zrobić, więc wziąłem to od wondershaper: 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.
Teresa e Junior

Odpowiedzi:


1

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ć tcna 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.


funtoo.org/Traffic_Control w sekcji „Ruch przychodzący i wychodzący” ma prawdopodobnie lepszą dyskusję niż strona Gentoo.
Ian Macintosh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.