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 bridge-utils


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

sudo systemctl stop hostapd



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
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
hw_mode=g
channel=7
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í).

Další věcí, kterou je možné v tomto souboru nastavit je mód (hw_mode) a kanál (channel) WI-FI.
Módy jsou:

  • a = IEEE 802.11a (5 GHz)
  • b = IEEE 802.11b (2.4 GHz)
  • g = IEEE 802.11g (2.4 GHz)


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


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í musíme vytvořit několik souborů, které popíší a nastaví nově vytvořený bridge.

sudo vim /etc/systemd/network/bridge-br0.netdev


Do souboru /etc/systemd/network/bridge-br0.netdev zapíšeme
[NetDev]
Name=br0
Kind=bridge

A ještě další dva soubory

sudo vim /etc/systemd/network/bridge-br0-slave.network


Obsahem souboru /etc/systemd/network/bridge-br0-slave.network bude [Match]
Name=eth0

[Network]
Bridge=br0

a druhý soubor

sudo vim /etc/systemd/network/bridge-br0.network


s obsahem
[Match]
Name=br0

[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8

Nyní potřebujeme restartovat systemd-networkd

sudo systemctl restart systemd-networkd


Restart 🙂

Nyní je potřeba restartovat Raspberry.

sudo /sbin/reboot


Jakmile znovu nabootuje spustíme všechny potřebné služby

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo systemctl restart systemd-networkd


Nyní by měla 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

- (11. 11. 2019)

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

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

Pinterest

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.

Chyba v návodu??
Nějak se mi nedaří provést příkaz
sudo sh -c "iptables-save" > /etc/iptables.ipv4.nat
v sekci ip tables.
Skončím s hláškou
-bash: /etc/iptables.ipv4.nat: Operace zamítnuta
Co dělám špatně?
Díky.

Zkuste:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Zkusím, Děkuji.

Tak nevím.
Opravený příkaz funguje - díky.
Nicméně po provedení celého postupu se síť nespustí a iwconfig vypíše:
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

eth0 no wireless extensions.

br0 no wireless extensions.

lo no wireless extensions.

wlan1 IEEE 802.11 ESSID:"Home_C-guest"
Mode:Managed Frequency:2.447 GHz Access Point: 02:0C:42:F0:86:3D
Bit Rate=40.5 Mb/s Tx-Power=20 dBm
Retry short long limit:2 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=70/70 Signal level=-17 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1 Invalid misc:11 Missed beacon:0

Podotýkám, že jsem zkoušel nastavovat wlan1 i wlan0 (mám připojenou USB WiFi)

Celý postup jsem po sobě kontroloval. Bezvýsledně.
Může být chyba, že to celé dělám na RPi 4B?¨
Asi by neměla?

Tak stejný výsledek i na RPi 3B... :(

Jakmile se dostanu k Raspberry tak vyzkouším. Aktuálně doma žádné volné nemám :-(

Josef: Tak jsem to předělal celé a už to zase funguje ;-)

Tak to velice děkuji.
Teď mám zase problém s přístupem k RPI já.
Jakmile se k němu dostanu, hned to udělám znovu.
DÍKY!

Tak jsem to zkusil na nasazeném RPI4 a
FUNGUJE!
Díky moc ještě jednou.

Josef: Není zač :-)

Tak zase nic. Ale tentokrát se podělalo připojení na eth0.
wlan0 je připojená k internetu dál,
na wlan1 je v provozu AP a funguje.
Nicméně gigový ethernet se odpojil a ani router nevidí jeho mac.
Kontrolky rx/tx ale blikají.
Pravděpodobně k tomu došlo po nějaké aktualizaci.
Zkoušel jsem celý postup znovu opakovat na čerstvé instalaci dnes staženého raspbianu a poruše došlo při provádění "sudo systemctl restart systemd-networkd" RPi zatuhlo, musel jsem ho odpojit. Po nabootování už nefungoval eth0. Wlan0, kterou jsem předtím připojil k wifi routeru funguje. Po spuštění služeb "sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo systemctl restart systemd-networkd"
naskočí korektně AP, nicméně eth0 je stále mimo provoz.
posílám výpisy:
pi@raspberrypi:~ $ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20d:b0ff:fe04:6073 prefixlen 64 scopeid 0x20<link>
ether 00:0d:b0:04:60:73 txqueuelen 1000 (Ethernet)
RX packets 512 bytes 46973 (45.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39 bytes 7430 (7.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::dea6:32ff:fe17:1109 prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:17:11:09 txqueuelen 1000 (Ethernet)
RX packets 516 bytes 54779 (53.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25 bytes 4707 (4.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 240 (240.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.8 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::b75e:9cb5:f6b:a9ee prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:17:11:0a txqueuelen 1000 (Ethernet)
RX packets 2552 bytes 265682 (259.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 317 bytes 48622 (47.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20d:b0ff:fe04:6073 prefixlen 64 scopeid 0x20<link>
ether 00:0d:b0:04:60:73 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 565 bytes 74970 (73.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

pi@raspberrypi:~ $ iwconfig
wlan0 IEEE 802.11 ESSID:"Home_C"
Mode:Managed Frequency:2.462 GHz Access Point: 00:0C:42:F0:86:3D
Bit Rate=54 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=70/70 Signal level=-36 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

eth0 no wireless extensions.

br0 no wireless extensions.

lo no wireless extensions.

wlan1 IEEE 802.11 Mode:Master Tx-Power=20 dBm
Retry short long limit:2 RTS thr:off Fragment thr:off
Power Management:off

Máte ponětí, co se mohlo stát?
Díky.

Zatím zkusím všechno odebrat, a eth0 tím zprovoznit. Snad to půjde.

Tak eth0 jsem zprovoznil odebráním nainstalovaných programů a zakomentováním úprav v konfigurácích. Nicméně nefunkčnost AP docela mrzí. Fungovalo to parádně.

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 - Login