RaspberryPi kot Wi-Fi dostopna točka
RaspberryPi 3, ki ima vgrajen Wi-Fi in ethernet omrežno kartico je mogoče z nekaj prilagoditvami spremeniti v Wi-Fi dostopno točko. Pravzaprav lahko to storimo s katerimkoli mini računalnikom, pogoj je le da ima brezžični omrežni vmesnik ki podpira tim. AP način (angl. AP mode).
To preverimo z ukazom:
iw list
Ukaz izpiše podprte načine:
... Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point ...
Sistem bo tekel na operacijskem sistemu Raspbian, ki ga je seveda predhodno potrebno naložiti.
Nastavitev brezžičnega omrežnega vmesnika
V novejših različicah operacijskega sistema Raspian, omrežne vmesnike upravlja aplikacija dhcpcd. Ker tega upravljanja za brežični omrežni vmesnik ne želimo, spremenimo konfiguracijo. Najprej odpremo nastavitveno datoteko:
sudo nano /etc/dhcpcd.conf
…in na začetek dodamo:
denyinterfaces wlan0
Sedaj odpremo datoteko z nastavitvami omrežnih vmesnikov:
sudo nano /etc/network/interfaces
V njen spremenimo nastavitve brezžičnega omrežnega vmesnika wlan0. Najprej odstranimo ali zakomentiramo obstoječe nastavitve:
# iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Namesto njih dodamo:
allow-hotplug wlan0 iface wlan0 inet static address 172.16.0.1 netmask 255.255.255.0 network 172.16.1.0 broadcast 172.16.1.255
S tem smo brezžičnemu omrežnemu vmesniku nastavili statičen IP naslov in sicer 172.16.0.1.
Sedaj ponovno zaženemo dhcpcd in ugasnemo ter ponovno prižgemo brezžični omrežni vmesnik:
sudo service dhcpcd restart sudo ifdown wlan0 sudo ifup wlan0
Zdaj lahko preverimo ali ima wlan0 pravilno nastavljen IP naslov:
sudo ifconfig wlan0
Izpiše se:
... inet addr:172.16.0.1 ...
Nastavimo še, da wlan0 ne “zaspi” oz. računalnik zanj ne izključi napajanja. Odpremo datoteko:
sudo nano /etc/rc.local
…ter na konec, pred “exit 0” dodamo:
sudo iw dev wlan0 set power_save off
Kasneje, po ponovnem zagonu računalnika, lahko nastavitev preverimo z ukazom:
iw dev wlan0 get power_save
Izpiše se:
Power save: off
Brezžični omrežni vmesnik je sedaj pripravljen.
Namestitev aplikacije za Wi-Fi dostopno točko
Sledi namestitev aplikacije hostapd (host access point daemon), ki dejansko vzpostavi brezžično dostopno točko:
sudo apt-get install hostapd
Ko je aplikacija nameščena, uredimo nastavitveno datoteko, ki vsebuje vse podatke o Wi-Fi povezavi – ime povezave, geslo, šifriranje, itd… Nastavitve se nahajajo v datoteki:
sudo nano /etc/hostapd/hostapd.conf
Vsebina datoteke:
# Wifi vmesnik interface=wlan0 # Gonilnik za Wi-Fi napravo: # - ce uporabimo v RaspberryPi 3 vgrajeno Wi-Fi napravo, gonilnika ne navedemo, # sicer navedemo vrsto gonilnika, npr.: driver=nl80211 ali driver=rtl871xdrv # Ime Wi-Fi omrezja ssid=BlueSensor # Nastavitev drzave country_code=SI # Uporabimo 2.4GHz frekvencni pas hw_mode=g # Uporabimo kanal 8 channel=8 # Sprejmemo vse MAC naslove naprav macaddr_acl=0 # Uporabimo WPA avtentikacijo auth_algs=1 # Zahtevamo, da odjemalci poznajo ime omrezja ignore_broadcast_ssid=0 # Vrsta WPA avtentikacije # wpa=2 - samo WPA2, wpa=3 - WPA+WPA2 wpa=3 # Geslo za Wi-Fi omrezje wpa_passphrase=mojegeslo # Uporabimo WPA "pre-shared kljuc" wpa_key_mgmt=WPA-PSK # Katera vrsta šifriranja se uporablja z WPA: AES in TKIP (TKIP je sicer varnostno pomanjkljiv) wpa_pairwise=CCMP TKIP # Katera vrsta šifriranja se uporablja z WPA2 rsn_pairwise=CCMP # Casovni interval (v sekundah) za sprmembo kljucev (rekeying GTK - broadcast/multicast encryption keys) wpa_group_rekey=86400 # Omogocimo 802.11n ieee80211n=1 # Omogocimo WMM wme_enabled=1 # Omogocimo 40MHz kanale z 20ns intervalom (tim. guard interval) ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
Načeloma v zgornji konfiguraciji spremenimo zgolj SSID (ime omrežja) in geslo, ostalo lahko ostane kot je. Po potrebi lahko uporabimo kakšen drug Wi-Fi kanal (odvisno od ostalih Wi-Fi dostopnih točk v bližini), morda omogočimo samo uporabo WPA2 in samo AES šifriranja (odvisno od tega kakšne Wi-Fi odjemalce pričakujemo na omrežju).
Sedaj poskusimo zagnati aplikacijo hostapd:
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
Če se aplikacija pravilno zažene, se bo izpisalo naslednje:
Configuration file: /etc/hostapd/hostapd.conf Failed to create interface mon.wlan0: -95 (Operation not supported) wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE wlan0: Could not connect to kernel driver Using interface wlan0 with hwaddr b8:27:eb:cc:f0:87 and ssid "BlueSensor" wlan0: interface state COUNTRY_UPDATE->ENABLED wlan0: AP-ENABLED
Spodnja vrstica z informacijo AP-ENABLED pomeni, da Wi-Fi dostopna točka deluje. Na okoliških Wi-Fi napravah pa bi se moralo pojaviti omrežje BlueSensor. Nanj se lahko tudi povežemo, vendar internetna povezava še ne bo delovala.
Če vse pravilno deluje, hostapd zaustavimo s pritiskom na Ctrl-C.
Nastavitev IP posredovanja in povezave Wi-Fi AP v internet
Najprej namestimo aplikacijo za shranjevanje nastavitev požarnega zidu:
sudo apt-get install iptables-persistent
Nato nastavimo IP posredovanje. Odpremo datoteko:
sudo nano /etc/sysctl.conf
…in vanjo vpišemo:
net.ipv4.ip_forward=1
Nastavitev bo postala aktivna šele ob ponovnem zagonu računalnika, zato IP posredovanje še takoj aktiviramo z ukazom:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
Sedaj nastavimo požarni zid, da bo omogočal posredovanje Wi-Fi povezav v internet (torej iz wlan0 na eth0 omrežni vmesnik):
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
Če želimo, preverimo pravila požarnega zidu:
sudo iptables -t nat -S sudo iptables -S
Na koncu pa nastavitve požarnega zidu še shranimo, da bo pravilno deloval tudi po ponovnem zagonu sistema:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
Zagon Wi-Fi dostopne točke
Sedaj je potrebno nastaviti še samodejen zagon Wi-Fi dostopne točke. Najprej aplikaciji hostapd povemo kje se nahaja nastavitvena datoteka:
sudo nano /etc/default/hostapd
Vanjo vpišemo:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Preverimo še, da je enaka nastavitev tudi v datoteki /etc/init.d/hostapd:
sudo nano /etc/init.d/hostapd
Nastavitev:
DAEMON_CONF=/etc/hostapd/hostapd.conf
Sedaj poženemo:
sudo systemctl daemon-reload
Nato zaženemo aplikacijo hostapd kot sistemsko storitev:
sudo service hostapd start
Ter jo omogočimo ob zagonu:
sudo update-rc.d hostapd enable
Zdaj lahko preverimo ali dostopna točka deluje:
sudo iw dev wlan0 info
Dobimo naslednji izpis:
Interface wlan0 ifindex 3 wdev 0x1 addr b8:27:eb:cc:f0:87 ssid BlueSensor type AP wiphy 0 channel 8 (2447 MHz), width: 20 MHz, center1: 2447 MHz
Na tej točki se sicer že lahko z odjemalcem povežemo na Wi-Fi dostopno točko, vendar odjemalci še ne bodo dobili lokalnega IP naslova. Zato je potrebno postaviti še DHCP strežnik.
Postavitev lokalnega DHCP in DNS strežnika
Na koncu postavimo še lokalni DHCP in DNS strežnik, ki Wi-Fi odjemalcem dodeljuje IP naslove in skrbi za pretvorbo domen v IP naslove. Namestimo dnsmasq:
sudo apt-get install dnsmasq
Nato odpremo nastavitveno datoteko:
sudo nano /etc/dnsmasq.conf
Vanjo na ustrezna mesta vpišemo oz. zakomentiramo (onemogočimo) naslednje parametre:
resolv-file=/etc/dnsmasq/resolv.conf ... #no-resolv ... #no-poll ... interface=wlan0 ... listen-address=172.16.0.1 ... bind-interfaces ... addn-hosts=/etc/dnsmasq/hosts.conf ... dhcp-range=172.16.0.50,172.16.0.150,12h ... dhcp-leasefile=/var/lib/misc/dnsmasq.leases
S tem smo določili, da bodo odjemalci dobivali IP naslove v območju med 172.16.0.50 in 172.16.0.150. Strežnik, oz. dostopna točka pa ima IP naslov 172.16.0.1.
Nato odpremo datoteko, kjer nastavimo “zaledne” DNS strežnike:
sudo nano /etc/dnsmasq/resolv.conf
…ter jih vnesemo (uporabimo Googlove DNS strežnike):
nameserver 127.0.0.1 nameserver 8.8.8.8 nameserver 8.8.4.4
Na koncu vpišemo še lastne (lokalne) DNS naslove:
sudo nano /etc/dnsmasq/hosts.conf
Nastavimo, da se bo Wi-Fi dostopna točka oglašala na domensko ime (v našem primeru bluesensor.ijs ter www.bluesensor.ijs):
172.16.0.1 bluesensor.ijs 172.16.0.1 www.bluesensor.ijs
Ustvarimo še datoteko, kjer se bodo zapisovale dodeljene DHCP povezave (tim. DHCP lease) in ji nastavimo pravice dostopa:
sudo touch /var/lib/misc/dnsmasq.leases sudo chown -R root:root /var/lib/misc/
Sedaj ponovno začenemo dnsmasq strežnik:
sudo service dnsmasq restart
Na koncu namestimo še upravitelja informacij o domenskih strežnikih (če že ni nameščen):
sudo apt-get install resolvconf
In ga zaženemo:
sudo service resolvconf start
S tem je sistem postavljen.
Delovanje sistema
Če smo vse pravilno nastavili, se sedaj z odjemalcem lahko povežemo na Wi-Fi in odjemalec bo imel dostop do interneta. Če iz odjemalca skušamo dostopati do bluesensor.ijs, se bo odzvala WiFi dostopna točka z IP naslovom 172.16.0.1.
To pomeni, da lahko sedaj na RaspberryPi postavimo spletni strežnik in odjemalci, ki bodo v brskalnik vpisali bluesensor.ijs ali www.bluesensor.ijs, bodo lahko videli spletno stran postavljeno na Wi-Fi dostopni točki.
Vse podeljene DHCP povezave lahko pogledamo z ukazom:
cat /var/lib/misc/dnsmasq.leases
Struktura izpisa (po stolpcih) je naslednja:
- čas preteka DHCP povzave (v sekundah po 1970 – tim. epoch time).
- MAC naslov odjemalca
- IP naslov odjemalca
- ime odjemalca (če je znano)
- ID odjemalca
Ali je posamezna povezava trenutno aktivna preverimo z ukazom ping.
S pomočjo tcpdump lahko spremljamo promet, ki poteka preko brezžičnega omrežnega vmesnika wlan0:
sudo tcpdump -i wlan0
Spremljanje lahko omejimo tudi za samo konkretnega odjemalca. Če poznamo njegov IP naslov, to storimo takole:
sudo tcpdump -i wlan0 host 172.16.0.140
Če pa poznamo MAC naslov njenega omrežnega vmesnika, pa to storimo takole:
sudo tcpdump -i wlan0 ether host aa:bb:cc:dd:11:22
MAC ali IP naslov za povezane naprave dobimo iz datoteke dnsmasq.leases.
Na sami RaspberryPi napravi lahko še pogledamo status oz. delovanje obeh ključnih aplikacij:
sudo service hostapd status sudo service dnsmasq status
Wi-Fi dostopna točka sedaj deluje. Če je preko žičnega omrežnega vmesnika povezana na internet, bodo Wi-Fi odjemalci preko nje imeli dostop do interneta, sicer pa bodo lahko vzpostavili lokalno omrežje. Če na dostopni točki teče spletni strežnik, lahko odjemalci na ta način preprosto dostopajo do lokalne spletne strani – neodvisno od interneta.
Na RaspberryPi napravo smo preko USB vrat povezali BlueSensor senzorske sisteme, in odjemalci lahko do senzorskih podatkov dostopajo kar preko spleta – preko povezave http://bluesensor.ijs ali http://www.bluesensor.ijs. Nekoliko težav je le pri dostopanju z Androidnimi mobilnimi telefoni, saj je na teh telefonih potrebno omogočiti uporabo slabe omrežne povezave (izključimo “Avoid poor internet connection“). V nasprotnem primeru mobilni telefon povezav v lokalno omrežje ne dovoli in vse povezave preko podatkovnega prenosa preusmeri v internet.
Ključne besede: BlueSensor, omrežja, Raspberry Pi