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ě.

Nic?
Žádný nápad?
I tak děkuju za předchozí, aspoň chvíli to fungovalo dobře.

Josef: Aktuálně jsem nemocný, takže nemám čas a ani náladu cokoliv řešit.
Zkuste kouknout na originální článek přímo na raspberrypi.org (https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md). Ale myslím, že tam nic jiného, než to co mám tady, není. :-(

Zkusím kouknout, díky za tip!

Tak jsem na to koukal a jediné rozdíly, které jsem tam našel jsou v tom, že jejich AP je nastaveno aby nevidělo do LAN. Jinak je to asi stejné... Tak nevím co se aktualizací rozbilo... :(

Hmmm... tak to neporadím :-(

Tak nic. Každopádně díky.

Zdravím,
pokouším se realizovat Váš návod,ale zkončil jsem u "odkomentování" řádku DAEMON_CONF ... hodnotu se mi podařilo nakopírovat,ale # se nemohu zbavit, "d"zmizí vše F7 nereaguje dík za radu

ještě dodám,že vytvořený soubor má koncovku *.conf.swp

Václav: Zkuste jiný editor než vim. Swp je tuším pomocný soubor vimu.
Ve vimu otevře se soubor, stisknete klávesu INSERT a můžete psát. Pro ukončení stisknete Esc (tím ukončíte editaci) a napíšete :wq (tím uložíte vše a ukončíte vim)

VIM byl zřejmě poškozen nakonec jsem musel přeintalovat systém (ne poprvé né naposled),ale proč to všechno? řeším problém:
1) RPI je připojeno k internetu mobilem (z důvodu automatického přepínání pripojení WIFI/SIM data)
2) připojení je funkční (prověřeno prohlížečem a VNC serverem) usb0 adresa IP 192.168.42.xxx

potřebuji připojit k RPI zařízení,tak aby mělo přístup k internetu,
které diponuje
1) LAN jehož statickou IP adresu jsem schopen změnit (nikoliv na dynamickou)
2) wifi klientem tzn. připojit se k nějaké wifi síti (v dosahu)

nabízí se
1) nakonfigurovat RPI jako AD HOC(AP) a k němu se zařízením připojit
(doufám,že AD-HOC by sdílel internetové připojení) -NEDAŘÍ SE

2) použít WI-FI router (mám tp-link WR 802N) propojen ethernetovým kabelem s RPI
otázka jak nakonfigurovat eth0 v RPI a v WA802 ,aby poskytlo internet?
při počátečním nakonfigurování eth0 v RPI na 192.168.42.xxx
se funkční připojení k internetu "zhroutí" ,na jiných adresách krom 192.168.42.xxx
nesdílí internet

3)propojit RPI a zařízení kabelem LAN ,ten samý problém -usb0 nesdílí internet na eth0

JAK Z TOHO VEN existuje řešení?

Dobrý den, perfektní návod. Je možné do RPI ladovat internet z 4g USB modemu třeba od o2 a pak si daný internet posilat přes Wi-Fi?

Valentino: Proč by ne? Když se ten USB modem podaří rozběhat na RPI ;-)

Opět po letech jsem použil,protože předchozí řešení před 2 lety nefungovalo,akorát se musí pro připojení zařízení dát do rc.local příkaz "sudo systemctl restart systemd-networkdL" aby se zařízení připojilo k rpi.Pozor: nefunguje připojení k internetu z chrome na rpi!Mě to nevadí,protože nepotřebuji.

Nevím proč ale když zadám příkaz sudo vim /etc/hostapd/hostapd.conf tak mi to napíše příkaz nenalezen! poradte mi prosím. díky

Kemal: sudo apt-get install vim
;-)

Zdravím Karle,

díky za návod. Chtěl jsem se zeptat, jestli nemáte tip, kde hledat problém. Návod funguje, používám distro OSMC kvůli multimédiím - Rpi používám na multimédia a dělám z něho i AP.

Po rebootu jsem dal timemout 10 sec a pak se spustí sekvence příkazů, aby se vytvořil bridge.

Nechal jsem statickou IP adresu (statické DNS a Gateway). Samozřejmě podle mojí sítě. Po rebootu všechno funguje. Ale po nějaké době - nemám vysledované, ale odhadem 12-24h se stane to, že samotné RPi ztratí přístup k DNS a patrně i ke gateway.

Když dám na samotném Rpi něco přehrávat, tak nemá přístup k síti. Jako bych vůbec neměl nastavené DNS, případně Gateway.

Pomůže restart sítě: systemctl restart systemd-networkd

a doplnění nameserveru do /etc/resolv.conf. Soubor /etc/resolv.conf obsahuje na začátku nameserver, ale když se objeví problém se sítí, tak je prázdný.

Je možné, že jste se s problémem nesetkal, protože pokud používáte RPi jenom jako prostředníka a na RPi nechodíte, tak to ani nemusí trápit (pokud teda nechcete nainstalovat aktualizace na RPi).

Nicméně pokud budete tušit, ocením tip, kde hledat. Zatím odhaduji, že to bude nějak souviset s DHCP - čemuž by odpovídal i interval cca 12, kdy je IP adresa přidělena.

Podle konfiguráku v systemd (dle článku) nastavuji statickou adresu a DNS. Když RPi bootuje, tak si nejdříve vezme data z DHCP serveru pro eth0. Pak se dle návodu udělá bridge, eth0 se vloží do bridge a bridge by měl dostat statickou IP adresu - dle návodu.

Statickou adresu si převezme, ovšem co se týče DNS a potažmo Gatewaye, tak mi přijde, jako by to z konfiguráku nebralo. Po rebootu to žije jenom díky tomu, že si eth0 na začátku bral DNS a to by měl mít podle DHCP serveru cca na 12h. Jakmile skončí lease time, tak se snaží obnovit, ale už se mu to nepodaří a tak to vypadá, že internet na samotném zařízení nefunguje.

Jakoby se ještě nějaký daemon snažil obsluhovat eth0, ale nevěděl, že je eth0 v bridge a nemá se snažit získat IP adresu přes DHCP.

Možná z toho důvodu máte v návodu část:
vim /etc/dhcpcd.conf

denyinterfaces eth0
denyinterfaces wlan0

Soubor dhcpcd.conf v mém systému neexistoval, tak jsem ho vytvořil. Nicméně je tedy pravděpodobné, že v mém distru něco nepočítá s existencí souboru a tak se míjí danyinterfaces účinkem.

Tak jsem chtěl požádat o tip, případně info, k jaká služba má chtít pracovat se souborem dhcpcd.conf.


Petr

tak jsem asi našel řešení a odpověď. Problém je v tom, že používám distribuci OSMC a ta má určité odlišnosti. Sepisuji to pro případ, že se někdo setká s podobným problémem - může mu to pomoci.

OSMC je odlišná v tom, že o síť se stará connman. Více diskuse tady: https://discourse.osmc.tv/t/fixing-default-routes-after-disabling-conman-and-using-networkmanager/7219/6


Musel jsem editovat soubor /etc/connman.conf a tam na blacklist dát právě eth0 a wlan0.

NetworkInterfaceBlacklist=eth0,wlan0

A zdá se, že problém je odstraněn.

Jinak jsem našel i dobrou inspiraci k nastavení zde: https://github.com/morrownr/USB-WiFi/blob/main/home/AP_Mode/Bridged_Wireless_Access_Point.md

tak jsem asi našel řešení a odpověď. Problém je v tom, že používám distribuci OSMC a ta má určité odlišnosti. Sepisuji to pro případ, že se někdo setká s podobným problémem - může mu to pomoci.

OSMC je odlišná v tom, že o síť se stará connman.

Musel jsem editovat soubor /etc/connman.conf a tam na blacklist dát právě eth0 a wlan0.

NetworkInterfaceBlacklist=eth0,wlan0

A zdá se, že problém je odstraněn.

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