Objavljeno:

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.

Kategorije: Informacijska tehnologija, Odprta koda, Odprta strojna oprema, Splošno
Ključne besede: BlueSensor, omrežja, Raspberry Pi