Simple conntrack netlink based traffic accounting
Ostatnia zmiana: 2018-09-15 11:25

Demon nlbwmon pozwala na zbieranie statystyk ruchu sieciowego bazując na mechanizmie kernela conntrack netlink. Mechanizm ten pozwala na proste zbieranie danych nie powodując znacznego obciążenia procesora w stosunku do rozwiązań wykorzystujących np. iptables. W działaniu przypomina inne projekty tego typu: vnstat, bandwidthd, BitMeter OS, ale jest dość dobrze konfigurowalny i umożliwia uzyskania podsumowania danych w różnych formatach.

Co nlbwmon zbiera:
- adresy mac
- liczbę połączeń
- ilość danych wysłanych, w bajtach
- ilość danych wysłanych, w pakietach
- ilość danych pobranych, w bajtach
- ilość danych pobranych, w pakietach
- rodzinę połączeń (ipv4/ipv6)
- protokół (icmp, tcp itd)

Czym nlbwmon nie jest:
- nie przechowuje statystyk sekundowych/minutowych/godzinowych
- nie zawiera historii odwiedzanych stron czy adresów IP
- nie udzieli informacji ile pasma zużył jakiś komputer we wtorek dwa tygodnie temu po południu

Dane zbierane są w cyklach miesięcznych (lub innych określonych przez konfigurację) i umożliwiają późniejszą prezentację zużycia pasma w podziale na hosty (mac adresy), protokoły czy inne dostępne dane.

Nlbwmon zbiera tylko informacje o połączeniach (bez informacji typu ruch broadcast, narzuty protokołu itp), więc może wyświetlać liczby inne niż pozostałe programy do monitoringu. Link do wyjaśnień autora projektu: https://github.com/jow-/nlbwmon/issues/7

Instalacja

Obecna wersja dostępna jest od wydania LEDE, zarówno w wersji rozwojowej jak i stabilnej. Pakiety dostępne są standardowo w repozytorium, wystarczy więc wykonać polecenia:


    # opkg update
    # opkg install nlbwmon

Konfiguracja

Jak dla większości programów w OpenWrt czy LEDE zawarta jest w pliku /etc/config/nlbwmon. Wszystkie opcje są dość czytelne opisane więc nie powinno być problemów z konfiguracją. Domyślna konfiguracja powinna być wystarczająca na początek, choć parę opcji można ustawić "po swojemu".
- warto zwrócić uwagę na listę opcji local_network która definiuje zakres adresów IP na których demon nasłuchuje - można podawać zarówno adresy IP jak również nazwy logiczne sieci typu lan.
- demon domyślnie zbiera i przechowuje dane w pamięci ram (w katalogu określonym przez opcję database_directory - domyślnie jest to /var/lib/nlbwmon). Warto więc albo zmienić katalog żeby wskazywał np. na nośnik USB lub zapewnić systematyczny backup bazy z danymi.
- w pliku konfiguracyjnym można znaleźć opcję commit_interval która określa co jaki czas dane zostają przeniesione z pamięci do pliku. Domyślnie opcja ta ma wartość 24 godzin; jeżeli mamy na stałe włączony router to wydaje się ona dobrą wartością. Jednakże w przypadku gdy resetujemy często router można tą wartość zmienić na inną - np. co 15 minut (15m). Można posługiwać się jednostkami czasu: w, d, h, m i s.
- w pliku określonym przez opcję protocol_database (domyślnie jest to /usr/share/nlbwmon/protocols) znajduje się lista portów wraz z typami protokołu które program wykorzystuje do gromadzenie danych według aplikacji, czyli klasyfikując ruch według typu połączeń. Można samodzielnie dodać inne porty, jak również usunąć zbędne wpisy dla późniejszej czytelności prezentacji danych.
- warto także zastanowić się nad opcją database_interval, ponieważ określa ona okres zbierania danych. Domyślnie nowa baza danych powstaje pierwszego dnia każdego miesiąca (wartość "1"). Możliwe jest także określenie dowolnego innego dnia miesiąca, dnia liczonego od końca miesiąca ("-2" powoduje rozpoczęcie nowej bazy np. 30 stycznia) lub określonego okresu - podane "2017-01-22/14" powoduje tworzenie nowej bazy co 14 dni zaczynając do 22 stycznia 2017r.

Zmiana wartości database_interval czy protocol_database może spowodować bezużyteczność zebranych dotychczasowych danych.

Uruchomienie

Program powinien uruchomić się samodzielnie po instalacji. Jeżeli z jakiegoś powodu tego nie zrobił można to wykonać standardowo ręcznie:


    # /etc/init.d/nlbwmon enable
    # /etc/init.d/nlbwmon start

Prezentacja wyników

Konsola

Demon działa w tle i zbiera cyklicznie dane umieszczając je następnie w swojej lokalnej bazie danych. Potrzebny jest program służący do prezentacji tych danych - i tu z pomocą przychodzi nlbw. Dostępne są polecenia:

  • show: pokazuje zawartość bazy danych w postaci czytelnej dla użytkownika
  • json: pokazuje zawartość bazy danych w formacie json
  • csv: pokazuje zawartość bazy danych w formacie csv
  • list: wyświetla spis baz danych
  • commit: zapisuje bazę danych z pamięci do pliku
Polecenie podajmy po przełączniku "-c", czyli np.


    # nlbw -c show
Fam Host ( MAC ) Layer7 Conn. > Downld. ( > Pkts. ) Upload ( Pkts. )
IPv4 192.168.10.120 (a8:1a:83) HTTPS 60 4.25 MB ( 4.69 K) 327.08 KB ( 3.77 K)
IPv4 192.168.10.208 (ee:d0:59) HTTPS 2 46.64 KB ( 54 ) 5.84 KB ( 49 )
IPv4 192.168.10.120 (a8:1a:83) POP3S 3 15.84 KB ( 49 ) 3.98 KB ( 46 )
IPv4 10.1.1.187 (00:00:00) other 102 7.49 KB ( 101 ) 7.49 KB ( 101 )
IPv4 192.168.10.120 (a8:1a:83) POP3 2 6.72 KB ( 27 ) 1.87 KB ( 25 )
IPv4 192.168.10.208 (ee:d0:59) other 3 5.74 KB ( 17 ) 2.37 KB ( 21 )
IPv4 192.168.10.120 (a8:1a:83) HTTP 5 3.59 KB ( 42 ) 27.91 KB ( 49 )
IPv4 192.168.10.120 (a8:1a:83) other 5 1.03 KB ( 14 ) 1.03 KB ( 14 )
IPv4 192.168.10.208 (ee:d0:59) HTTP 1 351 B ( 5 ) 507 B ( 6 )

    # nlbw -c json
{"columns":["family","proto","port","mac","ip","conns","rx_bytes","rx_pkts","tx_bytes","tx_pkts","layer7"],"data":[[4,"TCP",443,"88:53:2e:xx:xx:xx","192.168.10.120",60,4462753,4811,334937,3865,"HTTPS"],[4,"TCP",443,"00:03:7e:xx:xx:xx","192.168.10.208",2,47764,54,5986,49,"HTTPS"],[4,"TCP",995,"88:53:2e:xx:xx:xx","192.168.10.120",3,16228,49,4079,46,"POP3S"],[4,"IP",0,"00:00:00:00:00:00","10.1.1.187",102,7676,101,7676,101,null],[4,"TCP",110,"88:53:2e:xx:xx:xx","192.168.10.120",2,6882,27,1919,25,"POP3"],[4,"IP",0,"00:03:7e:xx:xx:xx","192.168.10.208",3,5887,17,2429,21,null],[4,"TCP",80,"88:53:2e:xx:xx:xx","192.168.10.120",5,3681,42,28590,49,"HTTP"],[4,"IP",0,"88:53:2e:xx:xx:xx","192.168.10.120",5,1064,14,1064,14,null],[4,"TCP",80,"00:03:7e:xx:xx:xx","192.168.10.208",1,351,5,507,6,"HTTP"]]}

Polecenia można używać łącznie z kilkoma przełącznikami umożliwiającymi modyfikację formatu prezentacji danych. Są to głównie: -g (grupowanie danych) oraz -o (prezentacja określonych kolumn). Dla przykładu:


    # nlbw -c show -g mac -o -tx,layer7
MAC < Layer7 Conn. Downld. ( Pkts. ) > Upload ( Pkts. )
88:53:2e:xx:xx:xx other 115 4.89 MB ( 7.21 K) 630.84 KB ( 6.35 K)
00:03:7e:xx:xx:xx other 16 145.40 KB ( 228 ) 46.38 KB ( 230 )
00:00:00:xx:xx:xx other 140 10.39 KB ( 140 ) 10.39 KB ( 140 )

    # nlbw -c show -g layer7 -o -tx
Layer7 Conn. Downld. ( Pkts. ) > Upload ( Pkts. )
HTTPS 168 7.46 MB ( 12.76 K) 930.16 KB ( 11.58 K)
HTTP 25 99.18 KB ( 272 ) 150.08 KB ( 320 )
other 178 40.88 KB ( 232 ) 34.02 KB ( 238 )
POP3S 9 47.54 KB ( 148 ) 11.78 KB ( 135 )
POP3 6 20.46 KB ( 87 ) 5.62 KB ( 75 )


Dostępne są kolumny: family, proto, port, mac, ip/host, conns/conn, rx/rx_bytes/rx_pkts, tx/tx_bytes/tx_pkts. Podane znaku "-" przed nazwą kolumny powoduje posortowanie danych w odwrotnej kolejności:


    # nlbw -c show -g layer7 -o tx
Layer7 Conn. Downld. ( Pkts. ) < Upload ( Pkts. )
POP3 6 20.46 KB ( 87 ) 5.62 KB ( 75 )
POP3S 9 47.54 KB ( 148 ) 11.78 KB ( 135 )
other 182 41.17 KB ( 236 ) 34.31 KB ( 242 )
HTTP 25 99.18 KB ( 272 ) 150.08 KB ( 320 )
HTTPS 171 7.64 MB ( 13.59 K) 978.09 KB ( 12.42 K)

    # nlbw -c show -g layer7 -o -tx
Layer7 Conn. Downld. ( Pkts. ) > Upload ( Pkts. )
HTTPS 171 7.64 MB ( 13.59 K) 978.09 KB ( 12.42 K)
HTTP 25 99.18 KB ( 272 ) 150.08 KB ( 320 )
ther 182 41.17 KB ( 236 ) 34.31 KB ( 242 )
POP3S 9 47.54 KB ( 148 ) 11.78 KB ( 135 )
POP3 6 20.46 KB ( 87 ) 5.62 KB ( 75 )


Grafika

Wraz z program nlbwmon dostarczana jest odpowiednia aplikacja dla LuCI. Instalacja:


    # opkg install luci-app-nlbwmon

W menu głównym powinna pojawić się pozycja "Bandwidth Monitor" posiadająca trzy opcje:
- Display

Umożliwia wyświetlenie podziału transferu w podziale na hosty (mac adresy), podział na protokoły, rodzinę połączeń oraz eksport pogrupowanych danych. Prezentacja danych odbywa się w postaci tabelarycznej oraz interaktywnych wykresów kołowych - kliknięcie danego obszaru powoduje zaznaczenie odpowiedniego wiersza w tabeli.

image

image

image

- Configuration

Ustawienia demona nlbwmon.

image

image

- Backup

Backup i przywrócenie bazy danych.

Problemy

W momencie pisania tego opisu (sierpień 2017r) projekt liczy sobie zaledwie kilka tygodni i nękają go jeszcze różne dolegliwości wieku młodzieńczego. Dotychczasowe zauważone przeze mnie:
- zdarza się problem ze zbieraniem danych i dostępem do zebranych danych. Zwykle pomaga restart samego demona.
- problem ze zbieraniem danych dla IPv6