Monitoring i ograniczenie transferu w sieci lokalnej na routerze z OpenWrt

Wraz ze wzrostem liczby użytkowników, przychodzi pora na wprowadzenie ograniczeń prędkości w sieci.

O ile na moim routerze domowym nie mam takiej potrzeby, to w zastosowaniu firmowym warto wiedzieć kto i jak bardzo obciąża łącze i w ramach potrzeby wprowadzić niezbędne ograniczenia.

W pierwszej kolejności należy się dowiedzieć kto, a następnie jak bardzo.

A więc zacznijmy od narzędzi do monitoringu naszego łącza.

Sprawdzone z OpenWrt 19.07.x oraz 21.02.x

Monitoring

W zależności, jak dużo informacji potrzebujemy, z poziomu routera możemy zainstalować dwa pakiety: luci-app-vnstat lub luci-app-nlbwmon.

luci-app-vnstat

Po zainstalowaniu pakietu ujrzymy dodatkową opcję w menu Status > VnStat Traffic Monitor

Aplikacja domyślnie skonfigurowana będzie na monitorowanie ruchu w naszej sieci lokalnej (br-lan) oraz podstawowym łączu internetowym (eth1.2).

W sekcji głównej VnStat Graphs mamy do dyspozycji kilka metod prezentacji zgromadzonych danych.

Summary display otrzymujemy informację w postaci danych oraz wykresów, ile to pobraliśmy danych dzisiaj, wczoraj, w tym miesiącu oraz w miesiącu poprzedzającym.

Top 10 display przestawi nam 10 najintensywniejszych dni w naszej sieci. Oczywiście, musimy pozwolić naszemu routerowi na ich zebranie, więc od razu wszystkiego nie zobaczymy.

Hourly traffic przedstawi nam obciążenie w ciągu ostatnich 24 godzin. Analogicznie Daily traffic w przełożeniu na dni oraz Monthly traffic miesiące.

Nie otrzymamy natomiast żadnych informacji odnośnie kto obciążył nam łącze. Pakiet ten służyć będzie nam głównie do przeanalizowania, jak bardzo wykorzystujemy nasze łącze.

luci-app-nlbwmon

Ten pakiet daje nam wgląd w jeszcze więcej informacji.

Do dyspozycji mamy dedykowane menu Bandwidth Monitor (w OpenWrt 21.02.x Bandwidth Monitor jest w sekcji Services) z rozbudowanymi opcjami konfiguracji (Configuration) oraz możliwości zapisania danych zebranych na przełomie czasu (Backup), jak również ich przywróceniu. Szczególnie przydatne w przypadku aktualizacji oprogramowania na routerze.

W zakładce Display otrzymamy podgląd, jak poszczególni użytkownicy w naszej sieci obciążali nasze łącze (Traffic Distribution).

W tym z podziałem na protokoły poszczególnych aplikacji (Application Protocols)

Jeżeli komunikacja w naszej sieci odbywa się zarówno po IPv4, jak i IPv6, zakładka IPv6 przedstawi nam, jak kształtuje się podział ruchu w zależności od sposobu komunikacji.

Co więcej, w zakładce Export mamy możliwość zapisania zebranych danych w kilku formatach, pozwalające na ich późniejszą analizę w zewnętrznych programach.


Nie ma nic przeciwko zainstalowaniu obu pakietów i w przeciągu kolejnych dni podjąć decyzję, który okaże się lepszy. Spora część użytkowników zauważa, że nlbwmon pomija niektóry ruch, przez co jego statystyki okazują się niższe od vnstat.

Oczywiście, należy zauważyć, że w vnstat możemy ustawić, które interfejsy mają być przez niego monitorowane (domyślnie nasze główne łącze internetowe oraz sieć lokalna). W przypadku nlbwmon domyślnie monitorowany jest interfejs odpowiadający za sieć lokalną (w to jednak również wlicza się transfer z klientów WireGuard, jeżeli mamy go zainstalowanego wg mojego opisu ).

Ogólnie wszystko fajnie, ale brakuje mi tutaj jeszcze czegoś.

Otóż chciałbym wiedzieć, jakie jest aktualne wykorzystanie łącza internetowego. W danej chwili, z jaką prędkością dany użytkownik coś pobiera. Jest to szczególnie ważne na następnym kroku, gdzie będziemy chcieli ograniczyć co niektórych.

OpenWrt teoretycznie posiada wbudowany system monitoringu (Status > Realtime Graphs).

Oprócz graficznych wykresów mamy dostępną zakładkę Realtime Rate, która powinna pokazywać na żywo aktualne wykorzystanie łącza przez poszczególne adresy IP. Mówię powinna, gdyż osobiście otrzymujemy komunikat “Collecting data…" i nic więcej. Podejrzewam, że jest to jakiś mankament obecnej wersji (19.07.7). Zobaczymy, czy nadchodząca 21.02 wniesie poprawę.

Na szczęście, aby uzupełnić powyższą lukę, możemy posłużyć się dodatkowym pakietem luci-wrtbwmon . Dzięki niemu otrzymamy dodatkową zakładkę Usage w sekcji Network, która wyświetli nam to, co Realtime Rate powinno, czyli wykorzystanie naszego łącza przez poszczególne urządzenia w sieci.

Instalacja powyższego pakietu (oraz pakietu podstawowego wrtbwmon) opisana jest tutaj a odbywa się z poziomu terminala naszego routera.

Nim to jednak zrobisz, przeczytaj aktualizację na samym końcu wpisu .


W momencie, gdy mamy zebrane informacje odnośnie do tego, komu musimy nałożyć ograniczenia, pora na ich wprowadzenie.

Ograniczenia

Do tego celu posłużymy się pakietem luci-app-nft-qos.

Po jego zainstalowaniu otrzymamy opcję Qos over Nftables w menu Services.

W zakładce Limit Rate możemy nałożyć limity na poszczególnych użytkowników, natomiast w Traffic Priority możemy ustawić, który ruch w naszej sieci powinien mieć pierwszeństwo przed innym. Jest to szczególnie ważne w środowisku, w którym mamy do sieci podłączone kilka telefonów VoIP. Nie chcielibyśmy mieć sytuacji opóźnionej rozmowy, podczas gdy ktoś w sieci zacznie ściągać jakiś duży plik.

Po włączeniu (Enable Traffic Priority) i zaakceptowaniu zmian ukażą się dodatkowe opcje, w których możemy sprecyzować to, co dla nasz, w naszej sieci, jest ważne. Np. protokół SIP/VoIP na porcie 5060, żeby miał pierwszeństwo przed ruchem HTTP(80)/HTTPS(443).

Po kliknięciu Limit Enable w zakładce Limit Rate od razu otrzymamy kilka opcji do skonfigurowania.

Na początku musimy zdecydować, jak nasz transfer będzie zarządzany (Limit type). Czy w sposób statyczny (Static) czy dynamiczny (Dynamic)

W dalszej części możemy wykluczyć poszczególnych użytkowników (tutaj zalecane jest przypisanie użytkownikom w sieci stałych adresów IP, aby można było ich lepie zarządzać: Network > DHCP and DNS > Static Leases).

Tutaj należy zwrócić uwagę na jednostki. Megabit/s to nie to samo co Megabyte/s. Łącze 100Mbps (100 Megabit/s) to inaczej ~12.5MB/s (Megabyte/s). Google, odpowiednio zapytane, bezpośrednio z pola wyszukiwarki może nam przeliczyć jedną jednostkę na drugą.

W przypadku statycznego zarządzania łączem otrzymamy dodatkowe opcje, które możemy przypisać zidentyfikowanym użytkownikom, pozostawiając wszystkich innych z domyślnymi opcjami (Default Rate).

Osobiście, przy pracowym łączy 100/100, każdy niezidentyfikowany użytkownik otrzymuje 5/5 przy tym ci, co są zidentyfikowani, mają dostępne inne limity.

Brakuje mi jednak czegoś pośredniego, a co będę szukał i jak znajdę, to napiszę. Mianowicie, chciałbym mieć możliwość dolnego limitu dla użytkowników w momencie, gdy jest duże zapotrzebowanie, jednakże w przypadku gdy w sieci jest spokojnie, przypisać cały dostępny transfer dynamicznie. Troche głupio jest nakładać limit 5Mbps na użytkownika, gdy w sieci nikt inny nie używa internetu.

Zobaczymy, może znajdę coś lepszego.

Jeżeli zależy ci, oprócz monitoringu transferu nad monitorowaniem innych parametrów z routers, pakiet luci-app-statistics będzie dla ciebie nieodzowny. Pakiet ten, wraz z listą modułów opkg list | grep collectd-mod znacząco rozszerzy możliwości naszego urządzenia.

Aktualizacja

Jak wspomniałem na początku, gdzie Status > Realtime Graphs > Rate nie spełniał swojego zadania, gdyż wyświetlał jedynie komunikat “Collecting data…”.

Otóż zainstalowanie pakietu luci-app-nft-qos pozwala magicznie dodać tę funkcjonalność i w zakładce Rate zobaczymy nasze dane na żywo.

Jeżeli nie widzimy jakiejkolwiek z powyższych opcji po zalogowaniu, wylogujmy się i logując się na nasz router przez SSH wykonajmy komendę rm /tmp/luci-indexcache* w celu opróżnienia pamięci podręcznej.

Usunięcie tego pakietu powoduje całkowitą utratę tej zakładki. Wygląda na to, że na jakimś etapie mojej pracy z OpenWrt, jakiś element należący do powyższego pakietu został zainstalowany, ale nie działał prawidłowo, dlatego też moja zakładka Rate wyświetlała komunikat “Collecting data…”. Teraz wszystko działa i nie ma potrzeby ręcznego instalowania zewnętrznych pakietów.

Pozdrawiam.

Uważasz, że moja strona jest przydatna?

Moja strona nie wyświetla reklam, a zawartość dostępna jest za darmo.
Aby mnie wesprzeć, możesz kupić mi kawę.

Postaw mi kawę

Jeżeli nie możesz, będę wdzięczny za udostępnienie.

Komentarze