━━━ 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 cat
e 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.2
Anziché 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.link
se 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 -dbr0
di 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 installarednsmasq
in 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_supplicant
con -d
in 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=5180
in /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_avail
quante entropie sono disponibili. Dovrebbe essere> 1000 per funzionare abbastanza velocemente. Per accelerare ciò, rng-tools
sono 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