Jak usprawnić sieć w domu? cz. 1

Wstęp

Wpis jest wstępem do serii mini testów, które przeprowadziłem lub przeprowadzę w najbliższym czasie. Chodzi o rozwiązanie kwestii sieci w domu, czyli dostępu urządzeń w domu do internetu i zapewnienia ich łączności pomiędzy sobą. Powodem było moje WiFi. Choć doprowadzone aktualnie do zadowalającej używalności, niekoniecznie było optymalne. I to zarówno jeśli chodzi o stabilność połączenia, jak i oferowane przepływności czy opóźnienia. Na rynku istnieje kilka rozwiązań, które mają za zadanie pomóc w dostarczeniu sieci w domu. Niedawny wpis o PLC przypomniał mi, że kiedyś interesowałem się bardziej tematem, a technika poszła naprzód.

Szybkie pytanie na wewnętrznym forum firmowym czy komuś nie zalega parka PLC spotkała się z pozytywnym odzewem (uroki pracy w większej firmie, z otwartymi geekami – ciekaw jestem czego nie dałoby się znaleźć… ;-)) i okazało się, że nie tylko zalega chwilowo, ale są różnego typu, stąd pomysł na porównanie i podzielenie się wnioskami.

Nie ma to być test uniwersalny ani profesjonalny – robię go przede wszystkim dla siebie i w dostępnym mi środowisku. Trzeba pamiętać, że na przykład typ ścian czy otoczenie może mieć kolosalne znaczenie dla WiFi. Podobnie wygląda kwestia sieci elektrycznej dla PLC., więc każda sieć w domu jest nieco inna. Mam jednak nadzieję, że uda się wyciągnąć jakieś wnioski ogólne i może komuś pomoże w wyborze rozwiązania.

O ile nie napisano inaczej, wykorzystywany jest firmware dostarczony z urządzeniami. Systemy nie są specjalnie tuningowane – ot, linuksowy default. Z oczywistych względów trudno mi wypowiadać się na temat stabilności poszczególnych rozwiązań w dłuższym okresie czasu.

Topologia sieci

Topologia sieci jest następująca: modem ISP (kablówka) w przedpokoju, podłączony ethernetem do routera. Router (obecnie TL-841) z wgranym OpenWRT/LEDE dostarcza internet reszcie urządzeń po WiFi. Przedpokój to w miarę centralny punkt w mieszkaniu, odległość od urządzeń końcowych (laptopy, smartfony) ok. 7 metrów, część urządzeń pracuje w 802.11n, część w 802.11g i tak zostanie – modernizacja czy wymiana końcówek są nieopłacalne.

Dla jasności: to działa od lat i w zasadzie wystarcza, jeśli chodzi o przepływność. Wystarczało i na 802.11g, gdy transfery (do mojego laptopa) wynosiły 15-18 Mbps (wg speedtest.net). Po zmianie routera na nowszy jest lepiej – 30 Mbps. Nadal jest to gorzej niż to, co oferuje operator (60 Mbps), ale w zupełności wystarcza do transferów „z zewnątrz”. Zobaczymy jednak, czy są jakieś alternatywy i czego się spodziewać.

Ani mieszkanie w kamienicy, ani dość zaszumiony eter na 2,4 GHz, nie pomagają w dobrym działaniu WiFi. Możliwe więc, że dlatego nieco gorzej wygląda sytuacja, jeśli chodzi o stabilność. Rzadko, bo rzadko, ale zdarzały się problemy (straty do routera, wzrost czasów odpowiedzi). Zwykle, w czasach gdy korzystałem z oryginalnego firmware producenta, wystarczał restart routera lub sprawdzenie jak wygląda sytuacja w eterze przy pomocy WiFi Analyzera i zmiana kanału na wskazany jako najlepszy (czyli najmniej używany).

Swoją drogą zmiana kanału na nieużywany jest najprostszym sposobem na poprawę zasięgu czy jakości WiFi, więc jeśli ktoś szuka odpowiedzi na pytanie jak poprawić sygnał WiFi, to zdecydowanie polecam zacząć od tego.

Pomiary

Wykonywane są cztery testy wewnętrzne, oraz ogólny test przy pomocy speedtest.net (beta, czyli bez Flash). Testy wewnętrzne wykonywane były w dwóch wariantach: krótkim (w założeniu ok. 60s) i długim (ok. 3600s).

  1. iperf3 -u -b 0 -t 60 -c 192.168.10.126
  2. iperf3 -t 60 -c 192.168.10.126
  3. ping -i 0.1 -c 600 192.168.10.126
  4. ping -s 1500 -i 0.1 -c 600 192.168.10.126
  5. iperf3 -u -b 0 -t 3600 -c 192.168.10.126
  6. iperf3 -t 3600 -c 192.168.10.126
  7. ping -i 0.1 -c 36000 192.168.10.126
  8. ping -s 1500 -i 0.1 -c 36000 192.168.10.126
  9. speedtest.net[1]

Jak widać jest to pomiar przepływności przy użyciu pakietów UDP, TCP oraz pomiar opóźnień przy pomocy ping ze standardową oraz maksymalną (MTU 1500) wielkością pakietu. Ostatni test to „realne” połączenie z internetem. Wykorzystywane serwery mojego ISP oraz Orange, który często był wskazywany jako najlepszy.

Za klienta służy mój laptop z Debianem, za sondę posłużyło Banana Pi (jedyny SoC z gigabitowym portem, który miałem pod ręką). W obu systemach wykorzystany iperf3. Pomiar nie był jedyną czynnością wykonywaną przez laptopa, ale – poza testami WiFi – był wykorzystany osobny interfejs, a obciążenie było typowe.

Dodatkowo mogą pojawić się uwagi, jeśli coś nieplanowanego podczas testów rzuci mi się w oczy.

Wyniki bazowe

Na wstępie spiąłem oba urządzenie kablem „na krótko” i uruchomiłem testy. Synchronizacja oczywiście 1 Gbps.

1.
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-60.00  sec  6.07 GBytes   869 Mbits/sec  0.136 ms  592341/795464 (74%)
2.
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-60.00  sec  5.47 GBytes   784 Mbits/sec  138             sender
[  4]   0.00-60.00  sec  5.47 GBytes   783 Mbits/sec                  receiver
3.
--- 192.168.10.126 ping statistics ---
600 packets transmitted, 600 received, 0% packet loss, time 62319ms
rtt min/avg/max/mdev = 0.291/0.372/0.549/0.031 ms
4.
--- 192.168.10.126 ping statistics ---
600 packets transmitted, 600 received, 0% packet loss, time 62290ms
rtt min/avg/max/mdev = 0.427/0.549/24.612/0.996 ms

5.
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-3600.00 sec   374 GBytes   893 Mbits/sec  0.220 ms  36944269/49033499 (75%)
6.
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-3600.00 sec   349 GBytes   833 Mbits/sec  8735             sender
[  4]   0.00-3600.00 sec   349 GBytes   833 Mbits/sec                  receiver
7.
--- 192.168.10.126 ping statistics ---
36000 packets transmitted, 36000 received, 0% packet loss, time 3745436ms
rtt min/avg/max/mdev = 0.278/0.369/40.914/0.398 ms

8.
--- 192.168.10.126 ping statistics ---
36000 packets transmitted, 36000 received, 0% packet loss, time 3745111ms
rtt min/avg/max/mdev = 0.260/0.500/2.861/0.046 ms

9.
Inea Orange [2]

Jak widać bez większych niespodzianek – osiągnięte wyniki wynikają raczej z ograniczenia samego Banana Pi. Mimo to widać, że jest szybko, czasy odpowiedzi niskie i jest stabilnie.

[1] Nie znałem wtedy znacznie lepszego serwisu do sprawdzania szybkości internetu.

[2] W przypadku pomiaru łącz topologia była nieco inna – laptop wpięty po kablu do portu routera (port 100 Mbps). W zasadzie dokładniej byloby wpiąć go bezpośrednio w modem kablowy, ale router jest stałym elementem zestawu w pozostałych topologiach… Dostawca internetu (Inea) deklaruje 60/10 Mbps.

Debian over Tor – HOWTO

Jakiś czas temu dowiedziałem się, że Debian oficjalnie zapewnia dostęp do wielu swoich zasobów poprzez sieć Tor. Jako zasoby wewnętrzne tejże sieci, czyli w domenie onion. Tutaj dostępna jest lista usług Debiana dostępna poprzez Tor wraz z adresami. Poniżej przykład zastosowania, czyli zmiana konfiguracji apt tak, aby pobierał pakiety za pośrednictwem Tora.

Po pierwsze, należy zainstalować pakiet umożliwiający aptowi korzystanie z Tora:

apt-get install apt-transport-tor

Po drugie, należy usunąć istniejące wpisy dotyczące repozytoriów i zastąpić je wersją dla sieci Tor:

deb  tor+http://vwakviie2ienjx6t.onion/debian          stretch            maindeb  tor+http://vwakviie2ienjx6t.onion/debian          stretch-updates    maindeb  tor+http://sgvtcaew4bxjd7ln.onion/debian-security stretch/updates    main

Jak widać zmiana dotyczy zarówno adresu, jak i dodania przed adresem prefiksu tor+.

Nie jest to jedyny sposób, można także ustawić proxy HTTP przekierowujace ruch na Tor i zostawić wpisy bez prefiksu tor+, ale z wpisami .onion. Można też przekierować cały ruch HTTP przez sieć Tor, jednak rozwiązanie z instalacją transportu jest najprostsze.

Tutoriale (patrz źródła) zalecają dodanie mirrora lub fallbacka dla repozytoriów security, ale IMO zależy do czego jest używana maszyna i jak wykonywane są update’y. Jeśli robisz je ręcznie i sprawdzasz powodzenie, można sobie odpuścić.

Pozostaje pytanie, po co komu coś takiego. Nie ukrywam, że trudno mi sobie wyobrazić wiarygodny scenariusz, kiedy takie rozwiązanie mogłoby być przydatne w naszych realiach. Być może w innych krajach wygląda to trochę inaczej i są np. obostrzenia w zakresie systemów, których wolno używać. Niemniej rozwiązanie działa i możliwość pobierania pakietów Debiana przez Tor istnieje.

Źródła:

Entropia w Linuksie – HOWTO

Dawno temu pojawił się mit, że źródłem prawdziwej entropii w Linuksie jest /dev/random jest, /dev/urandom jest gorszy. Pokutuje on do dziś i część softu za źródło danych przyjmuje właśnie /dev/random, niezależnie od realnych potrzeb. Ilość losowych danych w systemie nie jest nieskończona i zależy od dostępnych źródeł i zdarzeń zewnętrznych. Dopóki komputery były głównie fizyczne, często obsługiwane przez ludzi, problem był nieco mniejszy. W epoce wirtualek systemy i ruch są coraz bardziej powtarzalne, więc z „prawdziwą” entropią są problemy. A entropia w systemie Linux nadal jest w systemach aplikacjom potrzebna – słusznie lub nie, chyba nawet bardziej niż kiedyś, bo szyfrowanie wszystkiego jest coraz bardziej popularne i wykorzystywane są coraz silniejsze algorytmy.

Od pewnego czasu (okolice wersji 3.7) kernel Linuksa potrafi co prawda korzystać ze sprzętowych modułów (TPM) zapewniających źródła losowych danych, o ile takie są obecne. Nie każdy sprzęt jest jednak w to wyposażony, nie każda wirtualka posiada dostęp do danych z hypervisora i obecność modułu nie oznacza jeszcze, że dane będą dostępne dla programów, więc problem nadal pozostaje.

Entropia w systemie Linux – sprawdzenie dostępności

Jeśli nie wiemy, czy faktycznie system ma problem z dostępną entropią, możemy to w prosty sposób sprawdzić. Aktualną ilość można odczytać przez wydanie polecenia:

cat /proc/sys/kernel/random/entropy_avail

Oczywiście jest to wartość chwilowa, zmieniająca się w czasie, żeby z całą pewnością stwierdzić, jak system stoi z entropią, trzeba by poobserwować w dłuższym czasie, a najlepiej monitorować ją, np. przy pomocy Zabbiksa. Wartość powyżej 1000 oznacza, że na pewno problemu nie ma, wartości poniżej 300 oznaczają, że prawie na pewno są niedobory, mogące wpływać na pracę usług.

rngd

Istnieją dwa rozwiązania, które pomogą zwiększyć ilość dostępnych danych losowych w systemie. Pierwsze z nich, to rngd z pakietu rng-tools. Jego zadanie jest proste – dostarczać dane do napełniania /dev/random korzystając ze wskazanego źródła.

Jeśli platforma posiada sprzętowy moduł dostarczający dane losowe, rngd warto skonfigurować, by z niego korzystał. W tym celu w pliku

/etc/default/rng-tools

należy umieścić linię

HRNGDEVICE=/dev/hwrng

Natomiast w przypadku braku takiego modułu, sugerowane jest dodanie linii

HRNGDEVICE=/dev/urandom

Kontrowersje korzystania z /dev/urandom

Korzystanie z /dev/urandom jako źródła danych dla /dev/random powoduje kontrowersje. Główne zarzuty to niegwarantowana losowość danych w /dev/urandom (ale patrz mit), oraz powstawanie sprzężenia zwrotnego, co łącznie może powodować okresowość, a zatem teoretyczną możliwość przewidzenia stanu generatora liczb pseudolosowych. Podkreślam, że jest to możliwość czysto teoretyczna, nie wykazana w praktyce.

Alternatywa dla rngd

Istnieje drugie popularne rozwiązanie programowe, które pozwala na zwiększenie dostępnej w systemie entropii w systemie Linux. Jest to demon haveged z pakietu o tej samej nazwie. Korzysta on z faktu, że czas wykonania kodu przez procesor jest mało powtarzalny i zależy od wielu czynników. Jest to rozwiązanie obecne w dystrybucjach od wielu lat, proste w użyciu.

Wybór rozwiązania

Jeśli system posiada moduł sprzętowy, to bym z niego korzysał, za pośrednictwem rngd. Czy haveged jest lepszy od rngd zasilanego z /dev/urandom? Nie podejmuję się odpowiedzi na to pytanie. Oba zapewniają najważniejszą sprawę, czyli dostępność danych losowych. Oba rozwiązania spełniają proste testy badające losowość danych. Osobiście uważam, że w większości przypadków rozwiązanie korzystające z rngd jest wystarczające. Tam gdzie do losowości danych przykładamy dużą wagę, nie powinno być problemu z dostępem do sprzętowych generatorów, a niedobory entropii zawsze są bardziej szkodliwe, niż jej teoretycznie niższa jakość.

Linki

Na koniec zbiór linków dotyczących zagadnienia jakim jest entropia w systemie Linux; zarówno źródła jak i dalsza lektura, czyli ciekawe linki (kolejność losowa):