Router WiFi GSM utilizând Raspberry PI Zero W
Plăcile de dezvoltare Raspberry PI sunt cunoscute pentru ușurința cu care se poate implementa un router / gateway TCP/IP grație sistemului de operare Linux ce rulează pe aceste plăci. Placa Raspberry PI 3 ce integrează o interfață de rețea WiFi (pe lângă interfața ethernet clasică) poate sta la baza unui AP WiFi printr-o configurare foarte simplă (a se vedea „Cum putem utiliza placa Raspberry Pi ca Access Point WiFi?”). Chiar dacă implementarea unor astfel de dispozitive (router, gateway sau AP) poate părea la prima vedere doar un exercițiu educațional având în vedere multitudinea de dispozitive comerciale cu aceste funcționalități, realizarea unui sistem de control al comunicațiilor personalizat poate permite implementarea unor funcționalități proprii inedite și de multe ori un cost mai mic decât al dispozitivelor comerciale.
Placa de dezvoltare Raspberry PI Zero W este un membru mai nou al familiei de plăci Raspberry introducând un format mai mic al plăcii și un cost mult mai mic dar fiind limitată din punct de vedere al puterii de calcul și al memorie și neavând interfață de rețea ethernet (doar WiFi). La prima vedere această placă nu am putea să o utilizăm la implementarea unui sistem de tip router având o singură interfață de rețea. Având în vedere dimensiunea, costul și consumul mult mai mici decât al unei plăci Raspberry PI 3 este totuși o alegere foarte bună pentru implementarea unui router WiFi GSM. Pentru aceste lucru avem nevoie de un modem USB GSM (în cadrul testelor s-a utilizat un modem Huawei E3131 dar se poate utiliza orice modem USB GSM, de exemplu). Conectarea modemului la placa de dezvoltare necesită un adaptor microUSB – USB. Bineînțeles, pentru funcționarea sistemului sunt necesare un card microSD pentru sistemul de operare și un alimentator de 5V, 1A.
Punerea în funcțiune a unei plăci Raspberry PI Zero este o provocare din cauza numărului mic de porturi USB. Recomandăm utilizarea unui cablu serial de debug pentru a interacționa mai ușor cu placa de dezvoltare (a se vedea și materialul „Raspberry Pi Zero Headless Quick Start”). Ca sistem de operare vom utiliza Raspbian Lite pentru a nu încărca procesorul plăcii de dezvoltare cu servicii și pachete software inutile (testele au fost realizate utilizând versiunea 2018-03-13-raspbian-stretch-lite).
Chiar dacă în final conexiunea la Internet a sistemului se va face prin intermediul conexiunii modemului USB GSM, pentru a instala pachetele necesare este nevoie să activăm temporar conexiunea WiFi a plăcii de dezvoltare pentru acces la Internet. Astfel în fișierul /etc/wpa_supplicant/wpa_supplicant.conf vom adăuga liniile cu datele de acces la rețeaua WiFi locală (aceste linii vor fi șterse după realizarea configurării de AP):
network={
ssid=”…”
psk=”…”
}
Configurarea WiFi se poate face și la nivel card de memorie înainte de prima pornire a sistemului – a se vedea materialul: „Manually setting up Pi WiFi using wpa_supplicant.conf”.
După repornirea sistemului vom instala update-urile sistemului de operare:
# sudo apt-get update
# sudo apt-get upgrade
și pachetele necesare necesare comunicației cu modemul GSM:
# sudo apt-get install ppp usb-modeswitch usb-modeswitch-data
După conectarea fizică a modemului și o nouă repornire a sistemului putem configura legătura de date GSM. În fișierul /etc/network/interfaces se vor adăuga următoarele linii:
auto gprs
iface gprs inet ppp
provider gprs
Ulterior vom crea fișierul gprs în directorul /etc/ppp/peers cu următorul conținut (cartela SIM utilizată nu avea activat codul PIN):
connect „/usr/sbin/chat -v -f /etc/chatscripts/gprs -T em”
/dev/ttyUSB0
noipdefault
defaultroute
replacedefaultroute
hide-password
noauth
persist
usepeerdns
După o nouă restartare conexiunea de date GSM va deveni funcțională și putem șterge configurația din fișierul /etc/wpa_supplicant/wpa_supplicant.conf și putem trece la configurația AP. Vom instala pachetele software necesare managementului clienților WiFi:
# sudo apt-get update
# sudo apt-get install dnsmasq hostapd
și vom opri pentru moment serviciile până după configurarea corectă a acestora:
# sudo systemctl stop dnsmasq
# sudo systemctl stop hostapd
Interfața de rețea WiFi va avea în configurația de AP adresă IP statică deci vom configura acest lucru în serviciul DHCP (fișierul /etc/dhcpcd.conf):
interface wlan0
static ip_address=192.168.66.1/24
și vom reporni serviciul:
# sudo service dhcpcd restart
Având în vedere că funcționalitatea de AP necesită oferirea clienților WiFi de configurații dinamice de rețea este necesară configurarea serverului DHCP (dnsmasq). Vom crea un nou fișier de configurare:
# sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# sudo nano /etc/dnsmasq.conf
în care vom indica plaja de adrese IP oferite clienților WiFi:
interface=wlan0
dhcp-range=192.168.66.2,192.168.66.20,255.255.255.0,24h
În fișierul serviciului de management AP (/etc/hostapd/hostapd.conf) vom introduce următoarea configurație (personalizând, bineînțeles, datele de conectare la AP):
interface=wlan0
driver=nl80211
ssid=…
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=…
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
și vom referi fișierul în fișierul de configurare principal al serviciului hostapd (/etc/default/hostapd):
DAEMON_CONF=”/etc/hostapd/hostapd.conf”
După aceste configurări putem porni cele două servicii:
# sudo systemctl start hostapd
# sudo systemctl start dnsmasq
Pentru ca sistemul să retransmită pachetele din rețeaua WiFi în rețeua Internet este necesar să achivăm rutarea pachetelor TCP/IP – în fișierul /etc/sysctl.conf vom decomenta următoarea linie:
net.ipv4.ip_forward=1
Ultimul pas este configurarea serviciului de filtrare a pachetelor (iptables). Vom adăuga și salva o regulă de MASQUERADE:
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo sh -c „iptables-save > /etc/iptables.ipv4.nat”
și o vom executa la fiecare repornire a sistemului prin adăugarea următoarei linii în fișierul /etc/rc.local înainte de linia exit 0:
iptables-restore < /etc/iptables.ipv4.nat
După o ultimă repornire routerul WiFi GSM este funcțional.