Access point készítése Raspberry Pi segítségével

A Raspberry Pi egy rendkívül sokoldalúan felhasználható mini számítógép, lényegében csak a képzeletünk és egyéni képességünk szabja meg a határokat. Mérete akkora, mint egy kisebb pénztárca, mégis rengeteg egyedi építésű hardver lelke, például régi játékokat futtató retro-konzol, multimédia központ, vagy éppen wifi hotspot. Mi most az utóbbira szeretnénk egy egyszerű, bárki által kivitelezhető leírást bemutatni, az Adafruit jóvoltából.

Lássuk első lépésként a szükséges hozzávalókat. Ezek nélkül kár is nekiállni, így akinek valami nincs a listán, az szerezze be, és utána kapcsolódjon be ismét a leírásba.

  • Raspberry Pi B modell (az ethernet port miatt fontos a B modell)
  • UTP, azaz ethernet kábel
  • WiFi adapter
  • SD kártya (minimum 4GB)
  • táp kábel
  • USB konzol kábel (opcionális)

Ez a leírás már nem feltétlen a kezdőknek szól, úgyhogy feltelezzük, hogy már túl vagytok az első telepítésen, és az ethernet, illetve wifi kapcsolatot is létrehoztátok már a Pi-n. Akinek ez még nem lenne meg, annak itt van két leírás:

Tehát ott tartunk, hogy a Pi be van kapcsolva, és az internetre is felmászott az ethernet port-on keresztül. Biztos, ami biztos, teszteljük le.

Ellenőrizzük a kapcsolatot és a felhúzott hálózati interfészeket a következő paranccsal:

ifconfig -a

Ezek után nézzük meg, hogy elérjük-e az internetet:

ping 8.8.8.8

A 8.8.8.8 a Google DNS szervere, helyette természetesen más host-ot vagy ip-t is megpingelhetünk.

Ha ez rendben, akkor állítsuk le a Pi-t és csatlakoztassuk az USB-s wifi adaptert:

sudo shutdown -h now

Ha újra elindítottuk a Pi-t, ismét adjuk az infconig -a parancsot. Ekkor meg kell, hogy jelenjen egy új elem a listában, méghozzá a wlan0. Ez azonosítja wifi modult. Ha nem jelent meg, akkor próbálkozzunk másik adapterrel, vagy ellenőrizzük a kapcsolatot, nézzük meg a log file-okat.

Most, hogy a hardver és a hálózat rendben van, nekiállhatunk a szoftverek telepítésének. Mindezek előtt adjuk ki a következő parancsot, hogy frissítsük a repokat:

sudo apt-get update

Jöjjön a szoftver beszerzése, ami jelen esetben a hostap amely képes hálózati pontot varázsolni a Pi-ből:

sudo apt-get install hostapd isc-dhcp-server

A telepítés után álljunk neki a finomhangolásnak. Elsőnek a  /etc/dhcp/dhcpd.conf fájlt kell megnyitni, amely az imént telepített DHCP szerver konfigurációs állománya. Ez fogja nekünk engedélyezni, hogy a wifi kapcsolatok  automatikusan ip címhez és DNS-hez jussanak.

Nyissuk meg a fájlt:

sudo nano /etc/dhcp/dhcpd.conf

Keressük meg ezt a sort:

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

És tegyünk mindkét sor elejére egy #-et, ami jelen esetben a kommentet jelöli, azaz a sor nem lesz aktív része a beállításnak. Valahogy így kell festenie:

#option domain-name “example.org”;
#option domain-name-servers ns1.example.org, ns2.example.org;

Keressük meg a következő sort:

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

És az utolsó sor elől vegyük ki a kommentet. Ezzel az ellenkezőjét csináljuk az előbbi mozdulatnak, engedélyezzük a beállítás ezen részét. Így kell kinéznie:

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

Menjünk lejjebb pár sorral, és adjuk hozzá a következő beállítási szekciót:

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;
}

Mi is történik ezzel? Beállítjuk a megfelelő hálózati adatokat a klienseknek, többek között a DNS szerverek címét is, amik jelen esetben a Google szervereire mutatnak. Ezek ingyenesen használhatóak bárki számára, és általában jó választások. Ezek a szerverek mondják meg, hogy melyik weboldal címhez mely ip cím tartozik.

Lépjünk ki, és mentsük el a fájlt. Ctrl + X, majd Y, majd Enter.

Most egy másik fájlt kell megnyitni és szerkeszteni.  Adjuk hát ki a következő parancsot:

sudo nano /etc/default/isc-dhcp-serverand

Keressük meg az INTERFACES=”” részt, és bővítsük ki erre:

INTERFACES=”wlan0″

Ezzel megadjuk neki, hogy az imént csatlakoztatott wifi adapteren keresztül várja a klienseket. A következő lépésben a wlan0 interfésszel foglalkozunk. Első lépésként statikusra állítjuk, azaz kiválasztunk egy dedikált belső IP címet neki.

Nyissuk meg szerkesztésre a hálózati interfészek beállításait tartalmazó fájlt:

sudo nano /etc/network/interfaces

Keressük meg azt a részt, ahol valami ilyesmit látunk: auto wlan0. Tegyünk elé egy  #-et, ahogy korábban. Ezzel kommentként jelöltük meg ezt a sort, így nem fog lefutni a következő alkalommal. Viszont így nem is fog életre kelni az interfész, így illesszük be a következő sorokat, közvetlenül az  allow hotplug wlan0 rész után. Minden ez után lévő sort, ami még a fájlban esetleg van, kikommentezhetünk.

iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0

Lépjünk ki, és mentsük el a fájlt a korábban már említett módon. (Ctrl-X, majd Y, majd Enter).

Állítsuk be kézzel most az interfésznek az előbb megadott adatokat a következő paranccsal:

sudo ifconfig wlan0 192.168.42.1

Készen is vagyunk arra, hogy a végső simítások elvégezzük a kis hálózatunkon.

Access point beállítása

A következő pár paranccsal beállítjuk a vezeték nélküli hotspot fontosabb adatait. Kezdjük mindjárt azzal, hogy létrehozunk egy új fájlt:

sudo nano /etc/hostapd/hostapd.conf

A tartalma pedig a következő legyen:

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

Két részt kell / érdemes módosítani. Az ssid rész szabja meg, hogy milyen néven fog életre kelni az access-point, azaz mi lesz a wifi hálózat neve. Itt lehetünk kreatívak. A másik átírandó rész a wpa_passpharase, ahol beállíthatjuk, hogy mi legyen a jelszó a wifi hálózathoz. Ha kész, lépjünk ki, és mentsük el az állományt.

Most már csak azt kell beállítani, hogy ez a konfigurációs fájl le is fusson:

sudo nano /etc/default/hostapd

Majd itt a #DAEMON_CONF=”” sort szerkesszük a következőre:

DAEMON_CONF=”/etc/hostapd/hostapd.conf”

Mentsük el őt is. Ezzel beállítottuk, hogy a hostapd szoftver az imént létrehozott, majd személyre szabott konfigurációs fájl alapján dolgozzon.

NAT beállítása

A NAT beállításával több kliens is csatlakozhat az AP-hez úgy, hogy az internetet továbbra is egyetlen ethernet port felé továbbítjuk. Ezt a műveletet akkor is végig kell csinálni, ha csak egyedül használjuk az AP-t.

Adjuk ki a következő parancsot:

sudo nano /etc/sysctl.conf

Adjuk hozzá a következő sort a fájl végére, mentsük el.

 net.ipv4.ip_forward=1

Ezzel beállítjuk, hogy minden indításkor legyen aktív az ipv4 alapú forward. Azonnali aktiváláshoz adjuk ki ezt a parancsot:

sudo sh -c “echo 1 > /proc/sys/net/ipv4/ip_forward”

Most be kell állítanunk azt a szabályt, ami alapján az ethernet (eth0) és a vezeték nélküli (wlan0) port között a kommunikáció zajlik. Ehhez az iptables nevű programot fogjuk használni:

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

Ellenőrizzük, az adatokat:

sudo iptables -t nat -S
sudo iptables -S

Ez most pillanatnyilag megfelelő, ám ha ennyiben hagynánk ezt a részt, akkor következő újraindításnál ismét hozzá kellene adni a szabályokat. De persze mindenre van megoldás. Mentsük ki az iptables beállításait egy külön fájlba a következő paranccsal:

sudo sh -c “iptables-save > /etc/iptables.ipv4.nat

Majd nyissuk meg a már jól ismert hálózat interfészek beállításait tartalmazó fájlt:

sudo nano /etc/network/interfaces

És a végére írjuk oda, hogy indítás után töltse be a rendszer az iptables beállításokat az előbb kimentett fájlból. Fontos, hogy ezt a fájlt később ne töröljük!

up iptables-restore < /etc/iptables.ipv4.nat

Hostapd frissítése

Sajnos out-of-box nem fog menni még a wifi hálózat, ehhez frissíteni kell a hostapd állományt. Az Adafruit ezt is előkészítette nekünk, így csak le kell töltenünk, és használni. Aki nem szeretné, az a leírás végén találja azt a blokkot, ahol megmutatjuk, hogyan készíthetünk saját hostapd állományt.

Töltsük le az előre összeállított fájlt:

wget http://www.adafruit.com/downloads/adafruit_hostapd.zip

Csomagoljuk ki:

unzip adafruit_hostapd.zip

Mentsük le a jelenlegi hostapd -t más néven:

sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG

Helyezzük át a frissen letöltött fájlt az eredeti helyére, majd adjuk meg a megfelelő jogokat neki:

sudo mv hostapd /usr/sbin
sudo chmod 755 /usr/sbin/hostapd

Ezek után már tényleg nincs sok hátra, csak indítsuk el a hostapd-t, majd egy másik wifi képes eszközzel, legyen az laptop vagy mobiltelefon, ellenőrizzük, hogy felbukkant-e az új AP a listában:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Egy CTRL+C lenyomásával megszakíthatjuk a futtatást. Ha a teszt jó volt, és tudtunk kapcsolódni a hálózatra már csak annyi kell, hogy a Pi újraindítás után automatikusan elindítsa a szolgáltatásokat:

Indítsuk el az AP és a DHCP szerver szolgáltatásokat:

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

Ha később ellenőrizni akarjuk az állapotot, csak adjuk ki a következő parancsokat:

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

Állítsuk be, hogy reboot esetén automatikusan elinduljanak:

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

Monitorozás és teszt

Nézzük meg, mi is történik a háttérben. Kapcsolódjunk bármilyen számítógéppel vagy telefonnal a hálózatra, de előtte a Pi-n adjuk ki a következő parancsot:

tail -f /var/log/syslog

Ezzel a syslog állományba bekerülő új sorokat tudjuk figyelni. Amikor valaki csatlakozik a Pi-hez, ide kerül naplózásra az esemény.

Utolsó ellenőrzésképpen megnézhetjük, hogy milyen IP-t osztott ki nekünk a Pi. Ehhez adjuk ki a ifconfig (mac/linux) vagy ipconfig (windows) parancsot. Ha követted a leírást, akkor az IP címnek valahol a 192.168.42.10-50-es részben kell lennie. Ha nem, valami gond van. Még további pingelésekkel ellenőrizheted, hogy jó-e a kapcsolat, de a legegyszerűbb, ha nyitsz egy böngészőt, és beütsz egy weboldalt. Ha betöltődött, akkor összecsaphatod a tenyeredet, ugyanis a Pi-n keresztül érted el, gratulálunk!

Saját hostapd

Ahogy az előbb írtuk amikor a hostapd-t frissítettük, az Adafriuit által előkészített verziót használtuk. Ha valaki esetleg nem bízik benne, akkor gyárthat magának sajátot.

  1. Nyissuk meg a következő weboldalt: http://152.104.125.41/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&ProdID=27…
  2. Töltsük le a  linux 3.4.4_4749 állományt.
  3. Másoljuk az SD kártyára a zip fájlt.
  4. Indítsuk el a Pi-t az SD kártyáról.
  5. sudo mv /boot/RTL819xSU_usb_linux_v2.6.6.0.20120405.zip .
  6. unzip RTL819xSU_usb_linux_v2.6.6.0.20120405.zip
  7. mv rtl8712_8188_8191_8192SU_usb_linux_v2.6.6.0.20120405/ rtl
  8. cd rtl
  9. cd wpa_supplicant_hostapd
  10. unzip wpa_supplicant_hostapd-0.8_rtw_20120803.zip
  11. cd wpa_supplicant_hostapd-0.8/
  12. cd hostapd
  13. make
  14. *dobjunk be egy szendvicset, lehet egy kávé is belefér*
  15. ha lefutott, máris ott van a hostapd bináris formában

Készült az Adafruit leírása nyomán.