━━━ Impostazione di un punto di accesso ━━━
Stiamo parlando di un punto di accesso insieme a una porta ethernet eth0 .
Se si desidera un punto di accesso insieme a una connessione client wlan0 a un'altra rete wifi (ripetitore wlan), guardare Access point come router / ripetitore WiFi, opzionale con bridge .
È possibile configurare Raspbian Stretch come punto di accesso wifi senza installare software aggiuntivo. Sono disponibili tutti i componenti necessari: rete, server DHCP e bridge sono forniti con systemd-networkd e il wifi può essere configurato con wpa_supplicant . Il collegamento di due interfacce eth0 e wlan0 può essere eseguito tramite routing o bridge. Di seguito prima l'installazione per una rapida installazione e poi i dettagli. Per prima cosa dobbiamo passare a systemd-networkd .
Testato con
Raspbian Buster Lite 2019-09-26 su un Raspberry Pi 4B aggiornato al 2020-01-18.
Aggiornamenti effettuati con sudo apt update && sudo apt full-upgrade && sudo reboot.
Qui puoi trovare l' ultima revisione testata per le versioni precedenti di Raspbian .
♦ Setup generale
Passa a systemd-networkd
Per informazioni dettagliate, consultare (1) e Come configurare la risoluzione dei nomi con systemd-networkd . Qui solo in breve. Esegui questi comandi:
# deinstall classic networking
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service
# setup systemd-resolved
rpi ~# systemctl enable systemd-resolved.service
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Configurare wpa_supplicant come punto di accesso
Per configurare wpa_supplicant come punto di accesso creare il file con le impostazioni per country=, ssid=, psk=e forse frequency=. Puoi semplicemente copiarlo e incollarlo in un blocco nella riga di comando a partire da cate includendo entrambi EOF (il delimitatore EOF non otterrà parte del file):
rpi ~# cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="RPiNet"
mode=2
frequency=2437
#key_mgmt=NONE # uncomment this for an open hotspot
# delete next 3 lines if key_mgmt=NONE
key_mgmt=WPA-PSK
proto=RSN WPA
psk="password"
}
EOF
rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
Installazione generale terminata. Torna indietro.
♦ Impostazione di un punto di accesso autonomo
Esempio per questa configurazione:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Esegui "Installazione generale", quindi crea il seguente file per configurare wlan0 . Abbiamo solo il punto di accesso. Non è stato configurato alcun dispositivo Ethernet.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
EOF
Se lo desideri, riavvia.
Questo è tutto.
Altrimenti, non è necessario riavviare in questo momento.
♦ Impostazione di un punto di accesso e con eth0, senza routing
Esempio per questa configurazione:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Impostare
Fare "Impostazione di un punto di accesso autonomo", quindi creare il seguente file per configurare eth0 .
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Reboot.
Questo è tutto.
Dettagli
L'interfaccia eth0 è collegata con un cavo Ethernet al router Internet e ottiene la configurazione tramite DHCP dal router Internet. Non è un problema dargli un indirizzo IP statico con es. Address=192.168.50.2Anziché DHCP=yes.
Senza routing non è possibile accedere a Internet con il telefono cellulare. Puoi accedervi dall'RP stesso per ottenere aggiornamenti o qualcosa del genere.
♦ Impostazione di un punto di accesso e con eth0, con NAT (consigliato)
Esempio per questa configurazione:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Impostare
Esegui "Installazione generale", quindi crea i seguenti file per configurare wlan0 ed eth0 . Se hai provato una delle configurazioni precedenti, puoi semplicemente sovrascrivere i due file. Assicurarsi di utilizzare una subnet diversa per il punto di accesso rispetto a quella dal router. Il router in questo esempio non utilizza la sottorete 192.168.4.0/24. Se hai bisogno di un'altra sottorete, modifica semplicemente la riga dell'indirizzo, ad es Address=192.168.5.1/24.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
# IPMasquerade is doing NAT
IPMasquerade=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
IPForward=yes
EOF
Reboot.
Questo è tutto.
Dettagli
Se non si ha accesso al router Internet, è possibile simularlo con NAT (traduzione dell'indirizzo di rete) per dire che tutti i pacchetti provengono dal proprio AP RasPi. Ma questo non è un routing pulito e presenta dei limiti. I client sulla sottorete del router non possono connettersi ai client sul wifi. Ma nella maggior parte dei casi questo non è necessario, quindi questa installazione è consigliata perché semplifica l'installazione. Se è necessario connettersi ai client Wi-Fi dalla rete del router, è necessario utilizzare il routing completo come descritto nella sezione successiva.
♦ Impostazione di un punto di accesso e con eth0, con routing
Esempio per questa configurazione:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Impostare
Esegui "Installazione generale", quindi crea i seguenti file per configurare wlan0 ed eth0 . Se hai provato una delle configurazioni precedenti, puoi semplicemente sovrascrivere i due file. Assicurarsi di utilizzare sottoreti diverse per il punto di accesso e la rete del router. Dobbiamo usare indirizzi IP statici perché dobbiamo usarli come gateway.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.50.2/24
Gateway=192.168.50.1
DNS=84.200.69.80 1.1.1.1
IPForward=yes
EOF
Reboot.
Per far funzionare il routing completo devi impostare una route statica nel tuo router Internet in modo che possa trovare la route per i pacchetti in arrivo sul RasPi ai client connessi tramite wifi al punto di accesso. Sulla maggior parte dei router Internet è possibile impostare un percorso statico, ma il modo in cui varia da modello a modello. Sta a te scoprirlo. Ad esempio, l' interfaccia RasPi eth0 ha l'indirizzo IP statico 192.168.50.2. Quindi sul router il gateway (hop successivo) è 192.168.50.2, la rete di destinazione è 192.168.4.0/24 (o 192.168.4.0 netmask 255.255.255.0).
Ciò significa per il router Internet: "invia tutti i pacchetti appartenenti alla sottorete 192.168.4.0/24(rete di destinazione dall'AP) al router successivo sulla mia sottorete, l'AP RasPi 192.168.50.2(gateway). Sa dove andare."
Questo è tutto.
♦ Impostazione di un punto di accesso con un ponte
Esempio per questa configurazione:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Se disponi già di una rete Ethernet con server DHCP e router Internet e desideri espanderla con un punto di accesso wifi ma con gli stessi indirizzi IP, allora usi un bridge. Questo è spesso usato come uplink a un router.
Impostare
Esegui "Installazione generale", quindi crea i tre file seguenti per configurare le interfacce di rete. Se hai provato una delle configurazioni precedenti, puoi semplicemente eliminare tutti i file /etc/systemd/network/tranne 99-default.linkse presenti. Gli indirizzi IP sono esempi. Devi usare il tuo.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF
rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
MulticastDNS=yes
DHCP=yes
# to use static IP uncomment these and comment DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
Ora dobbiamo dire a wpa_supplicant di usare un bridge. Lo facciamo modificando il suo servizio con:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
Nell'editor vuoto inserire queste istruzioni, salvarle ed uscire dall'editor:
[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0
ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed
Reboot.
Questo è tutto.
Dettagli
Dobbiamo dire a wpa_supplicant che la sua interfaccia wlan0 è schiava di un bridge. Altrimenti rifiuterà il client si connette con "password errata" significa che la negoziazione chiave non funziona. Quando diciamo a / sbin / wpa_supplicant con l'opzione -dbr0di usare un bridge per wlan0, allora l'interfaccia deve essere già un membro del bridge. Questo è ciò che facciamo con il drop in file (overlay) per il servizio wpa_supplicant . L'istruzione vuota ExecStart=elimina la voce precedente. Altrimenti hai due righe ExecStart=e wpa_supplicant inizierà due volte. L'originale con cui ExecStart=è possibile visualizzare systemctl cat wpa_supplicant@wlan0.service.
Normalmente il router a cui si è collegati con il cavo Ethernet ha un server DHCP abilitato. Il bridge è anche trasparente per le richieste DHCP dalle stazioni (dispositivi collegati al punto di accesso), quindi non devi preoccuparti della configurazione delle sue interfacce con indirizzi IP e opzioni. Il router lo servirà.
excursus:
Ma se il router non ha un server DHCP, è possibile installarne uno su RasPi. systemd-networkd ha opzioni per configurare il suo server DHCP incorporato ma il problema è che systemd-networkd presume che sia in esecuzione sul router stesso e non è vero in questo caso. Servirà opzioni errate per le stazioni, in particolare l' opzione router . Non è possibile configurarlo. Quindi dobbiamo installarednsmasqin questo caso che può essere configurato secondo necessità. Installalo e configuralo con (esempio, usa i tuoi indirizzi IP):
rpi ~$ sudo -Es
rpi ~# apt install dnsmasq
rpi ~# systemctl stop dnsmasq
rpi ~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
rpi ~# cat > /etc/dnsmasq.conf <<EOF
interface=br0
dhcp-range=192.168.50.128,192.168.50.164,255.255.255.0,24h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
EOF
rpi ~# systemctl start dnsmasq
rpi ~# exit
rpi ~$
In questo esempio sono riservati gli indirizzi IP da 192.168.50.128 a 192.168.50.164 da assegnare alle stazioni. Per altri indirizzi IP statici utilizzane uno esterno a questo pool, anche l'indirizzo IP per il bridge stesso.
♦ Ottimizzazione
Quando avvii wpa_supplicant , ricevi principalmente questi messaggi nel journal:
wpa_supplicant[427]: random: Cannot read from /dev/random: Resource temporarily unavailable
wpa_supplicant[427]: random: Only 12/20 bytes of strong random data available from /dev/random
wpa_supplicant[427]: random: Not enough entropy pool available for secure operations
wpa_supplicant[427]: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
Non è un grosso problema. wpa_supplicant ha bisogno di numeri casuali per generare chiavi crittografate. Questo è fatto un po 'lento, quindi deve aspettare. Fortunatamente il RasPi ha una costruzione in T rue R andom N umber G enerator (TRNG). Possiamo usarlo e velocizzare la ricezione di numeri casuali installando un software (3) con:
rpi ~$ sudo apt install rng-tools
Aggiornamento:
da Raspbian Stretch 2019-04-08 non è necessario installarlo rng-tools. Sono installati per impostazione predefinita.
♦ Risoluzione dei problemi
systemd-networkd
Guarda lo stato di un servizio:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
O anche un po 'di più:
rpi ~$ journalctl --boot --pager-end
Ho trovato utile seguire la registrazione in corso:
rpi ~$ journalctl --boot --follow
Se hai effettuato un calo del file, puoi guardare il risultato:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Per verificare l'ambiente di runtime di un'unità è possibile mostrarlo e, ad esempio, verificare se ci sono due ExecStart=linee:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
E se niente altro ti aiuta, puoi abilitare l'opzione di debug /sbin/wpa_supplicantcon -din un drop nel file:
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0 -d
L'output è nel diario. In questo modo ho riscontrato il problema con la negoziazione chiave errata.
Wi-Fi
Se hai impostato il punto di accesso, dovresti trovarlo con un telefono cellulare. Mostrando le reti disponibili, viene presentato con il nome RPiNet e puoi collegarti ad esso. Sul RasPi puoi anche usare il comando:
rpi ~$ sudo iw dev wlan0 info
phy#0
Interface wlan0
ifindex 3
wdev 0x2
addr b8:27:eb:06:e8:8b
ssid RPiNet
type AP
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
Come puoi vedere è di tipo AP (punto di accesso) e ti mostrerà anche quale canale sta usando. Un problema potrebbe essere quello di tradurre un canale in frequenza. La frequenza deve corrispondere a un canale. Puoi guardare (2) per un elenco di canali WLAN. Ad esempio, per il canale utilizzo 36 sulla banda 5.1 GHz è necessario impostare frequency=5180in /etc/wpa_supplicant\wpa_supplicant.conf. Ma devi essere sicuro che il tuo wifi supporti la banda 5.1 GHz. Puoi verificare con sudo iw phy. Questo ti darà un sacco di informazioni. Deve inoltre contenere frequenze supportate superiori a 5000 MHz. Se vedi solo frequenze di 24xx MHz, ovviamente puoi solo usarlo.
Un altro punto potrebbe essere numeri casuali. Per crittografare le chiavi per connessioni protette, wpa_supplicant necessita di numeri casuali. Generare questo è molto lento su un Raspberry Pi. Se non ha abbastanza entropia per generare chiavi di crittografia, wpa_supplicant rifiuterà l'autenticazione. Puoi vedere cat /proc/sys/kernel/random/entropy_availquante entropie sono disponibili. Dovrebbe essere> 1000 per funzionare abbastanza velocemente. Per accelerare ciò, rng-toolssono installati per impostazione predefinita. Guarda la sezione Ottimizzazione per ulteriori informazioni.
riferimenti:
[1] Howto migrare dalla rete a systemd-networkd con failover dinamico
[2] Elenco dei canali WLAN
[3] Rng-tools