Wi-Fi access point z Raspberry Pi

Jedno z oblíbených využití minipočítače Raspberry Pi je vyrobit z něho Wi-Fi access point. Navíc, když je Raspberry od verze 3 vybaveno integrovaným wi-fi modulem, tak si o toto využití přímo říká. Jak tedy na to?

Obrázky se nestihly načíst.
Prosím opakujte akci zachvilku.
Wi-Fi access point z Raspberry Pi

Instalace potřebných balíčků

Nejprve si jako vždy zaktualizujeme všechny balíčky na našem Raspberry Pi.

sudo apt-get update
sudo apt-get upgrade


Následně nainstalujeme potřebné balíčky hostapd, dnsmasq a bridge-utils.

sudo apt-get install hostapd dnsmasq bridge-utils


Jakmile máme balíčky nainstalovány, vypneme jejich služby, abychom je mohli nakonfigurovat.

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq



Konfigurace hostapd

Nejprve musíme správně nastavit balíček hostapd. Jeho konfigurační soubor je /etc/hostapd/hostapd.conf. Pomocí vim ho tedy začneme upravovat.

sudo vim /etc/hostapd/hostapd.conf


Vložíme do něho následující konfiguraci.

interface=wlan0
bridge=br0
#driver=nl80211
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ssid=JmenoSite
wpa_passphrase=HesloSite


Důležité jsou především poslední dvě řádky. V nich se definuje název (SSID) a heslo pro wi-fi. Obojí se zadává bez uvozovek a v plaintextu (bez jakéhokoliv šifrování).

Pokud máme konfigurační soubor připravený doplníme ho do /etc/default/hostapd. V tomto souboru odkomentujeme řádku DAEMON_CONF a jako její hodnotu zadáme "/etc/hostapd/hostapd.conf" (tentokráte v uvozovkách).

sudo vim /etc/default/hostapd


Výsledná řádka bude tedy vypadat takto:

DAEMON_CONF="/etc/hostapd/hostapd.conf"


Konfigurace dhcpcd

Dalším krokem je editace souboru /etc/dphcpd.conf.

sudo vim /etc/dhcpcd.conf


Do tohoto souboru doplníme dvě řádky. Musí být umístěny v závěru (na konci souboru), ale nad všemi řádky obsahujícími interface!

denyinterfaces eth0
denyinterfaces wlan0


Přesměrování požadavků z wlan0

Úprava bude v souboru /etc/sysctl.conf.

sudo vim /etc/sysctl.conf


Jediné co v něm musíme udělat, je odkomentovat řádku #net.ipv4.ip_forward=1. Odkomentování provedeme smazáním # na začátku řádku. Výsledný řádek tedy bude vypadat

net.ipv4.ip_forward=1


Nové pravidlo do iptables

Nyní provedeme dvojici příkazů

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo sh -c "iptables-save" > /etc/iptables.ipv4.nat


Tím jsme vytvořili, soubor /etc/iptables.ipv4.nat. Tímto souborem potřebujeme inicializovat iptables po každém startu Raspberry Pi. Upravíme tedy soubor /etc/rc.local. Na konec doplníme volání

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


Vytvoření bridge

Nyní vytvoříme bridge, který se bude jmenovat br0. Ten zajistí aby připojená zařízení měla dostupný internet :-).

Bridge vytvoříme sérií příkazů

sudo brctl addbr br0
sudo brctl addif br0 eth0


Nyní potřebujeme upravit soubor /etc/network/interfaces a doplnit do něho informace o mostu.

sudo vim /etc/network/interfaces


Doplníme

# Bridge setup
auto br0
iface br0 inet manual
bridge_ports eth0 wlan0


Restart :-)

Nyní je potřeba restartovat Raspberry. Jakmile znovu nabootuje, měla by být dostupná síť s názvem JmenoSite (nebo nějakým vaším, které jste si nastavili v bodu Konfigurace hostapd).

Zápory tohoto řešení

V driveru nl80211, který používá integrovaná Wi-Fi maliny, není povoleno ACS survey. Není tedy možné používat channel=0 nebo channel=acs_survey pro automatickou detekci vhodného kanálu. Kanál je nutné nastavit napevno.

Závěr

Potřebujete si zlepšit wi-fi signál v nějakém koutě vašeho bytu/domu a máte dostupné Raspberry Pi? Tak je to jasná volba. Proč kupovat další wi-fi router, když s Malinou dosáhnete toho samého ;-).

Je možné využít buď integrovaný wi-fi adaptér nebo si dokoupit jiný. Pokud použijete jiný adaptér, je potřeba aby byl Raspberry Pi kompatibilní.

Zdroje:
https://www.raspberrypi.org
https://thepi.io

Raspberry Pi, Wi-Fi, Access Point

- (16. 3. 2019)

Líbil se vám článek?

Nasdílejte ho svým přátelům na sociálních sítích.

Názory, připomínky a jiné komentáře

Zdravim, nemel by jste v rukavu neco, cim bych vyresil:

Potrebuji se pripojit na existujici WiFi (mam to domluvene, heslo mam), kterou budu vyuzivat, pouze jako pristup do internetu, ale jinak budu mit vlastni sit.

Mam k dispozici:
- RPi I s wifi adapterem
- Starsi Adsl wifi router

Idealne bych asi chtel, aby mi RPi chytala WiFi s internetem. Internet bych svedl do kabelu, kde by mi RPi zaroven routovala moji vlastni sit, kterou bych pres adsl router poslal znovu do vzduchu.

Je mi jasne, ze se jedna o stupidni reseni, ale jedna se o docasnou zalezitost, do ktere nechci vrazet penize, pokud to nebude nutne... Kdyztak diky za jakykoliv napad nebo odkaz.

Dobrý večer Vojto,
zkuste googlit "raspberry pi share internet connection from wifi"
Třeba tady www.youtube.com/watch?v=IAa4tI4JrgI je video na youtube. :-)
Hezký večer

Funguje! Akorát se musí napsat správně tyto dva příkazy;sudo brctl addbr br0
sudo brctl addif br0 eth0.

Díky za prověření Matěji. :-)

Dobrý den,tak to prosím ten řádek opravte abych mohl ty příkazy kopírovat tak jak jsou a nemusel je potom ještě upravit do funkční podoby.

Dobrý večer Matěji,
nevidím rozdíl mezi tím co jste psal a tím co je uvedeno v článku. Maximálně, že pokud zkopírujete rovnou oba tak může být problém. Ale to je to u všech ostatních také.

Dobrý den,používal jsem Raspberry Pi3 a wi-fi mi fungovala normálně. Nyní mám Raspberry Pi3 B+ a po instalaci není wi-fi vidět. Může být chyba v novém modelu ?
Předem děkuji za odpověď.
s pozdravem - Václav

Pane Karle, Matěj má pravdu u brctl, máte přesmyčku písmen :)

Děkuji... opraveno... njn sem tam sem slepej :-)

Zdravím, funguje to perfektně s čistým image raspbina Raspbian Stretch Lite
Minimal image based on Debian Stretch
Version:November 2018
Release date:2018-11-13
Kernel version:4.14

wlan0 IEEE 802.11 Mode:Master Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on

Po sudo apt-get update a sudo apt-get upgrade to funguje do prvního reboot, potom:

wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on

Nemáte prosím někdo nějakou radu?

A upravil jste soubor /etc/rc.local?
Respektive zkusil jste nejdříve udělat apt-get update a apt-get upgrade a až pak nastavit wifi?
Mířím k tomu, jestli to rozbíjí restart nebo upgrade.

Zdravim, vzhledem k tomu, ze eth0(lan) a wlan0(wifi) davate do bridge (br0). Pak je radek o iptables NAT zbytecny. Te byvse pouzival pouze v pripade, ze by se Rpi melo chovat jako router a ne jako AP bridge.

Zaroven debian (tedy i rapsbian) maji balicek 'netfilter-persistent' (nebo podobne), kterym se da nahradit manualni nacitani a ukladani iptables - coz v pripade AP bridge neni potreva, spis to zminuju pro jine pripady.

Vložit nový komentář

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.

Powered by CharlieBlog Engine v2.1