Rzecz o potrzebie nieustannego samodoskonalenia

Nie kupuj nowego routera Wi-Fi. Możesz mieć Raspberry Pi!

Potrzeba matką wynalazku. Taki mógłby być (pod)tytuł tego wpisu. Byłoby to jednak małe przekłamanie. Niestety niczego wynaleźć mi się nie udało. Skorzystałem z pewnego opisanego już tu i ówdzie rozwiązania.

Niestandardowego jednak. Takie lubię najbardziej. Otóż: nie zamieniłem starego routera bezprzewodowego na nowszy model, gdy ten odmówił posłuszeństwa. Kupiłem zamiast tego Rasperry Pi. Taki mały komputer. Mały, ale jary... czy jak tam to leciało...

To nie do końca tak

By nie narażać cierpliwości czytelnika na szwank, od razu powiem: router jest pod wieloma względami lepszym wyborem, a pod zdecydowaną ich większością wyborem niegorszym.

Jedynym niemalże zagadnieniem, które może nadać sens skonfigurowaniu własnego routera Wi-Fi (na w zasadzie dowolnym komputerze) jest możliwość nauczenia się czegoś przy okazji. I ten cel sam w sobie uznaję za niesamowicie istotny.

Mieć czy umieć?

Sprawa niezmiernie ważna szczególnie dla ludzi związanych z technologiami informatycznymi. Niestety nie możemy tak jak np. mistrzowie sushi doskonalić się w jednej wąskiej dziedzinie aż do osiągnięcia perfekcji.

To znaczy oczywiście nikt nam tego nie zabrania, ale nie ma to większego sensu. A przynajmniej nie w szerszym ujęciu naszej kariery.

Przyjdzie bowiem prędziej czy później taki moment, w którym zorientujemy się, że oferty pracy w naszym ulubionym języku czy technologii mają coraz więcej wspólnego z utrzymaniem bieżącego systemu niż z rozwojem nowych funkcjonalności. To samo dotyczy nowych paradygmatów czy metodologii.

Każdy się już pewnie w tym momencie ze mną zgodzi, że będziemy się musieli uczyć przez większość naszego zawodowego życia. Być może z małymi przerwami na chwile odpoczynku.

Byle nie wypadać z obiegu na zbyt długi okres czasu. Najlepszym wydaje się podejście, które pozwoli nam ubić dwa ptaszyska, przy użyciu tylko jednego kamienia:

Umieszczaj korzyści edukacyjne na wysokim miejscu hierarchii wartości swojej.

Co przez to rozumiem? Otóż nie myśl tylko o tym, co materialnego możesz zyskać dokonując danego wyboru. Bądź ponad to. Rozpartuj jakie mogą być korzyści długoterminowe. Jakie mogą być nieoczywiste korzyści wybrania tego drugiego, pozornie bardziej żmudnego i mało opłacalnego wyjścia.

Czasem to czego się nauczysz przy okazji będzie o wiele bardziej cenne i zmieni wyniki ogólnego rozrachunku. To o czym mówię to tytułowy, często opisywany w literaturze dylemat mieć czy umieć1.

Lista zakupów

Oto lista składników, które potrzebujemy żeby odpalić co trzeba na naszym Raspberry:

Raspberry Pi 3

Karta sieciowa Edimax EW-7811Un

Karta pamieci (8+)

Może jakaś obudowa by się też przydała

Instrukcja

Teraz praktyka. Niestety nie nastąpi tutaj teraz arcykompletny opis tego jak odpalić punkt dostępu Wi-Fi na naszym Raspberry Pi. Będzie to jedynie najwierniejszy jak to tylko możliwe zarys. Myślę że potrzebne szczegóły bez problemu znajdziecie w sieci.

Gorzej jest natomiast ze znalezienien informacji o tym jak dobrze to działa. Tak aby móc ocenić czy to ma w ogóle sens. Ja zaryzykowałem i z chęcią dzielę się wynikami w końcowej części artykułu.

1. Rasbian

Zaczniemy od instalacji systemu opercyjnego. Raspery nie posiada dysku. Jego funkcje pelni karta SD. W tym kroku pobieramy obraz ze strony Raspbiana i nagrywamy go na naszej karcie. Polecam wersje lite. Opis instalacji znajdziemy nieopodal.

2. Dostęp zdalny

Punkt istotny jeżeli nie mamy osobnej klawiatury i monitora, co miało zastosowanie w moim przypadku. Nie usuwaj zatem od razu karty ze swojego komputera. Otwórz następujący plik:

sudo vim etc/wpa_supplicant/wpa_supplicant.conf

Dopisz na koniec treść następującą:

network={
    ssid="network_ssid"
    psk="network_password"
}

Krok ten może być kłopotliwy dla użytkowników Mac OS (w tym mnie), z powodu problemów z obsługą systemu plików ext4. Nie zastanawiając się zbyt długo użyłem do niego mojego laptopa z Ubuntu.

3. Uruchomienie Raspberry

Logujemy się do naszej maszyny za pomocą ssh. Domyślny użytkownik to pi, a hasło dla niego to raspberry. Warto od razu zmienić. Następnie uruchamiamy komendy następujące:

sudo raspi-config
sudo apt-get update
sudo apt-get install hostapd isc-dhcp-server

Pierwsza to zmiana ustawień Raspberry — strefa czasowa, język, etc. Druga pozwoli nam na poszerzenie rozmiaru dysku tak aby została wykorzystana pełna przestrzeń karty pamięci. Obraz oferowany do pobrania najwyraźniej zoptymalizowany jest pod kątem objętości. Ostatnia linijka zainstaluje niezbędne pakiety.

4. Konfigurujemy serwer DHCP

Następny plik wymagajnący edycji to /etc/dhcp/dhcpd.conf. Będziemy potrzebowali zakomentować linijki poniżej:

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

na korzyść następujących:

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

Dopisując następnie na końcu poniższy fragment:

subnet 192.168.42.0 netmask 255.255.255.0 {
        range 192.168.42.10 192.168.42.50;
        option broadcast-address 192.168.42.255;
        option routers 192.168.42.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name "local";
        option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Kolej na uzupełnienie INTERFACES="wlan0" w /etc/default/isc-dhcp-server.

Interpretację czynności opisanych w tym paragrafie pozostawiam czytelnikowi do samodzielnego obczajenia.

5. Ustawiamy stałe IP

Na wszelki wypadek interfejs wlan0:

sudo ifdown wlan0

Edytujemy plik sudo vim /etc/network/interfaces. Usuwamy wszystkie wpisy dotyczące wlan0. Dodajemy na koniec poniższy:

allow-hotplug wlan0

iface wlan0 inet static
  address 192.168.42.1
  netmask 255.255.255.0

Uruchamiamy interfejs ponownie:

sudo ifconfig wlan0 192.168.42.1

6. Konfigurujemy hostapd

Teraz pora na hostapd, czyli Host access point daemon. Nazwa mówi sama za siebie. Edytujemy plik /etc/hostapd/hostapd.conf. W swoim eksperymencie użyłem następującej konfiguracji:

interface=wlan0
driver=rtl871xdrv
hw_mode=g
ssid=SSID
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=PASSPHRASE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Ponadto dodajemy wpis DAEMON_CONF="/etc/hostapd/hostapd.conf" do pliku /etc/default/hostapd

7. NAT, czyli translacja pomiędzy wlan0 i eth0

Dopisujemy net.ipv4.ip_forward=1 do pliku /etc/sysctl.conf.

Poniższe komendy pozwolą nam na stworzenie minimalnej konfiguracji iptables potrzebnej do działania routera:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state –state \ RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

W razie potrzeby używania Raspberry połączonego bezpośrednio z Internetem polecam zaopatrzyć się w łańuch reguł akceptujący tylko to, co niezbędne. Można użyć np. takiego skryptu.

8. Uruchomienie

Startujemy hostapd i serwer dhcp:

sudo service hostapd start
sudo service isc-dhcp-server start

Sprawdzamy stan serwisów, powinny być active (running):

sudo service hostapd status
sudo service isc-dhcp-server status

Jeżeli wszystko się powiodło aktywujemy automatyczne uruchamianie przy starcie systemu:

sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable

Wszystko powinno bardzo ładnie wyglądać i np. tak kolorowo świecić2:

9. Dodatki

Polecam wypróbowanie następujących narzędzi:

  • watchdog – proces pozwalający na automatyczny restart naszego Raspberry w przypadku np. zawieszenia
  • fail2ban – pozwoli na blokowanie adresów IP po kilku nieudanych próbach zalogowania
  • wondershaper – umożliwia podanie limitów transferu dla poszczególnych interfejsów sieciowych

Podsumowanie

Zdaje się, że dość już technicznego mięsa poleciało. Pora teraz na konkluzję. Otóż nareszcie autor niniejszego bloga dowiedział się ze szczegółami jak działa linuksowe iptables.

Było to konieczne, ponieważ Raspberry było połączone se światem beż żadnych pośredników. Ponadto przybyło +1 do ogólnego obycia w konsoli i konfiguracji systemu.


Jak działa sam router możemy zobaczyć na obrazku powyżej. Czy to dobrze, oceńcie sami. Dodam tylko, że po kablu osiągam około 100 Mb pobierania. Jeżeli posiadasz średnioszybkie łącze, to prawdopodobnie prawie nie odczułbyś różnicy pomiędzy rozwiązaniem out of the box.

Prawie, ponieważ nie tylko prędkość okazała się tutaj istotna, ale także stabilność połączenia. No i z tym niestety bywało gorzej. Przy trochę większym obciążeniu, jak np. podczas oglądaniu filmów w HD z youtube czy netfliksa przydarzały się permanentne zwiechy, na które lekarstwem było jedynie zrestartowanie Raspberry.

Problem okazał się tkwić w zarządzaniu zasilaniem. Zabiegiem znakomicie redukującym tego typu problemy była edycja pliku /etc/modprobe.d/8192cu.conf poprzez dodanie następującej treści:

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Mission Accomplished

Eksperyment się powiódł, a już niedługo pojawi się w mieszkaniu router z prawdziwego zdarzenia. Będzie można wtedy przetestować kolejny z niezliczonej ilości pomysłów na wykorzystanie Raspberry. No i oczywiście mnóstwo nowych rzeczy przy okazji ogarnąć!

  1. Na marne będzie szukać na ten temat wiecej informacji w sieci, zdaje się że najlepsze na co można trafić to: “KAFETERIA - PISZE SIĘ MIEĆ CZY MNIEĆ???” - to chyba jednak nie to… 

  2. Obudowa posiada także pokrywę, która dla lepszego efektu została zdjęta 

Komentarze