━━━ Einrichten eines Zugangspunkts ━━━
Es handelt sich um einen Zugangspunkt zusammen mit einem Ethernet-Port eth0 .
Wenn Sie einen Access Point zusammen mit einer WLAN0- Client-Verbindung zu einem anderen WLAN-Netzwerk (WLAN-Repeater) wünschen, sehen Sie sich Access Point als WLAN-Router / -Repeater an, optional mit Bridge .
Es ist möglich, Raspbian Stretch als WLAN-Zugangspunkt zu konfigurieren, ohne zusätzliche Software zu installieren. Alle benötigten Komponenten sind verfügbar: Netzwerk, DHCP-Server und Bridging werden mit systemd- networkd geliefert und WLAN kann mit wpa_supplicant eingerichtet werden . Das Verbinden von zwei Schnittstellen eth0 und wlan0 kann durch Routing oder durch Bridging erfolgen. Unten zuerst das Setup für die schnelle Installation und dann die Details. Zuerst müssen wir auf systemd-networkd umsteigen .
Getestet mit
Raspbian Stretch Lite 2019-04-08 auf einem Raspberry Pi 3B +, aktualisiert am 2019-04-14.
Raspbian Buster Lite 2019-07-10 auf einem Raspberry Pi 4B, aktualisiert am 2019-07-20.
Updates gemacht mit sudo apt update && sudo apt full-upgrade && sudo reboot
.
♦ Allgemeine Einrichtung
Wechseln Sie zu systemd-networkd
Detaillierte Informationen finden Sie unter (1) . Hier nur kurz. Führen Sie diese Befehle aus:
# disable classic networking
rpi ~$ sudo -Es
rpi ~# systemctl mask networking.service dhcpcd.service
rpi ~# mv /etc/network/interfaces /etc/network/interfaces~
rpi ~# sed -i '1i resolvconf=NO' /etc/resolvconf.conf
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service systemd-resolved.service
rpi ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Konfigurieren Sie wpa_supplicant als Zugangspunkt
So konfigurieren Sie wpa_supplicant als Access Point erstellen Sie diese Datei mit den Einstellungen für country=
, ssid=
, psk=
und vielleicht frequency=
. Sie können dies einfach kopieren und in einem Block in Ihre Befehlszeile einfügen, beginnend mit cat
und einschließlich beider EOF (Trennzeichen EOF wird nicht Teil der Datei sein):
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
Abschluss der allgemeinen Einrichtung. Geh zurück.
♦ Einrichten eines eigenständigen Zugriffspunkts
Beispiel für diesen Aufbau:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Führen Sie "General setup" aus und erstellen Sie dann die folgende Datei, um wlan0 zu konfigurieren . Wir haben nur den Zugangspunkt. Es ist kein Ethernet-Gerät konfiguriert.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
EOF
Wenn Sie dies möchten, starten Sie neu.
Das ist es.
Andernfalls müssen Sie zu diesem Zeitpunkt nicht neu starten.
♦ Einrichten eines Access Points und mit eth0 ohne Routing
Beispiel für diesen Aufbau:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Installieren
Führen Sie "Einrichten eines eigenständigen Zugriffspunkts" aus, und erstellen Sie dann die folgende Datei, um eth0 zu konfigurieren .
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Starten Sie neu.
Das ist es.
Einzelheiten
Die Schnittstelle eth0 ist mit einem Ethernet-Kabel mit dem Internet-Router verbunden und wird vom Internet-Router per DHCP konfiguriert. Es ist kein Problem, eine statische IP-Adresse mit zB Address=192.168.50.2
anstelle von zu vergeben DHCP=yes
.
Ohne Routing kommt man mit dem Handy nicht ins Internet. Sie können nur vom RPi selbst darauf zugreifen, um Updates oder ähnliches zu erhalten.
♦ Einrichten eines Access Points und mit eth0 mit NAT (empfohlen)
Beispiel für diesen Aufbau:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Installieren
Führen Sie "General setup" aus, und erstellen Sie dann die folgenden Dateien, um wlan0 und eth0 zu konfigurieren . Stellen Sie sicher, dass Sie für den Zugangspunkt ein anderes Subnetz als das des Routers verwenden. Der Router in diesem Beispiel verwendet nicht das Subnetz 192.168.4.0/24. Wenn Sie ein anderes Subnetz benötigen, ändern Sie einfach die Adresszeile, z Address=192.168.5.1/24
.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
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
Um NAT zu konfigurieren, müssen Sie den Dienst wpa_supplicant folgendermaßen erweitern :
rpi ~# systemctl edit wpa_supplicant@wlan0.service
Fügen Sie im leeren Editor diese Anweisungen ein, speichern Sie sie und beenden Sie den Editor:
[Service]
ExecStartPre=/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ExecStopPost=-/sbin/iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Starten Sie neu.
Das ist es.
Einzelheiten
Wenn Sie keinen Zugriff auf den Internet-Router haben, können Sie ihn mit NAT (Network Address Translation) vortäuschen, um zu erkennen, dass alle Pakete von Ihrem RasPi-AP stammen. Dies ist jedoch kein sauberes Routing und weist Einschränkungen auf. Clients im Subnetz des Routers können keine Verbindung zu Clients im WLAN herstellen. In den meisten Fällen wird dies jedoch nicht benötigt, weshalb dieses Setup empfohlen wird, da es das Setup vereinfacht. Wenn Sie vom Routernetzwerk aus eine Verbindung zu den WLAN-Clients herstellen müssen, müssen Sie das im nächsten Abschnitt beschriebene vollständige Routing verwenden.
♦ Einrichten eines Access Points und mit eth0, mit Routing
Beispiel für diesen Aufbau:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Installieren
Führen Sie "General setup" aus, und erstellen Sie dann die folgenden Dateien, um wlan0 und eth0 zu konfigurieren . Stellen Sie sicher, dass Sie für den Zugriffspunkt und das Routernetzwerk unterschiedliche Subnetze verwenden. Wir müssen statische IP-Adressen verwenden, weil wir sie als Gateways verwenden müssen.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
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
Starten Sie neu.
Um das Routing zum Laufen zu bringen, müssen Sie eine statische Route in Ihrem Internet-Router festlegen, damit dieser die Route für zurückkommende Pakete über das RasPi zu den Clients ermitteln kann, die per WLAN mit dem Zugangspunkt verbunden sind. Auf den meisten Internet-Routern können Sie eine statische Route festlegen. Die Vorgehensweise ist jedoch von Modell zu Modell unterschiedlich. Es liegt an Ihnen, es herauszufinden. Zum Beispiel hat Ihre RasPi eth0- Schnittstelle die statische IP-Adresse 192.168.50.2. Dann ist auf Ihrem Router das Gateway (nächster Hop) 192.168.50.2, das Zielnetz ist 192.168.4.0/24 (oder 192.168.4.0, Netzmaske 255.255.255.0).
Das bedeutet für den Internet-Router: "Senden Sie alle Pakete, die zum Subnetz gehören 192.168.4.0/24
(Zielnetzwerk vom AP), an den nächsten Router in meinem Subnetz, den RasPi-AP 192.168.50.2
(Gateway). Er weiß, wohin er gehen soll."
Das ist es.
♦ Einrichten eines Zugangspunkts mit einer Brücke
Beispiel für diesen Aufbau:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Wenn Sie bereits ein Ethernet-Netzwerk mit DHCP-Server und Internet-Router haben und dieses um einen WLAN-Zugangspunkt mit denselben IP-Adressen erweitern möchten, verwenden Sie eine Bridge. Dies wird häufig als Uplink zu einem Router verwendet.
Installieren
Führen Sie "General setup" aus, und bereinigen Sie dann das Verzeichnis / etc / systemd / network. Berühren Sie jedoch nicht, 99-default.link
falls vorhanden. Erstellen Sie die folgenden drei Dateien, um eth0 und br0 zu konfigurieren . Die IP-Adressen sind Beispiele. Sie müssen Ihre eigenen einstellen.
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]
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
Jetzt müssen wir wpa_supplicant anweisen , eine Bridge zu verwenden. Wir tun es, indem wir seinen Service ändern mit:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
Fügen Sie im leeren Editor diese Anweisungen ein, speichern Sie sie und beenden Sie den 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
Starten Sie neu.
Das ist es.
Einzelheiten
Wir müssen wpa_supplicant mitteilen, dass sein Interface wlan0 Slave einer Bridge ist. Andernfalls werden Client-Verbindungen mit "falschem Passwort" abgelehnt. Dies bedeutet, dass die Schlüsselaushandlung nicht funktioniert. Wenn wir sagen , / sbin / wpa_supplicant mit der Option , -dbr0
eine Brücke verwenden wlan0 dann muss die Schnittstelle bereits ein Mitglied der Brücke sein. Das machen wir mit dem Drop-In-File (Overlay) für den Dienst wpa_supplicant . Die leere Anweisung ExecStart=
löscht den alten Eintrag. Andernfalls haben Sie zwei Zeilen ExecStart=
und wpa_supplicant wird zweimal gestartet. Das Original, mit dem ExecStart=
Sie anzeigen können systemctl cat wpa_supplicant@wlan0.service
.
Normalerweise ist auf dem Router, mit dem Sie über das Ethernet-Kabel verbunden sind, ein DHCP-Server aktiviert. Die Bridge ist auch transparent für DHCP-Anforderungen von den Stationen (an den Access Point angeschlossenen Geräten), sodass Sie sich nicht um die Konfiguration der Schnittstellen mit IP-Adressen und -Optionen kümmern müssen. Der Router wird es bedienen.
exkurs:
Aber wenn der Router keinen DHCP-Server hat, können Sie einen auf dem RasPi einrichten. systemd-networkd verfügt über Optionen zum Konfigurieren des integrierten DHCP-Servers. Das Problem besteht jedoch darin, dass systemd-networkd davon ausgeht, dass es auf dem Router selbst ausgeführt wird. Dies ist in diesem Fall nicht der Fall. Es werden den Stationen falsche Optionen bereitgestellt, insbesondere die Router- Option. Es gibt keine Möglichkeit, es zu konfigurieren. Also müssen wir installierendnsmasq
In diesem Fall kann dies nach Bedarf konfiguriert werden. Installieren und konfigurieren Sie es mit (verwenden Sie zum Beispiel Ihre eigenen IP-Adressen):
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 diesem Beispiel sind die IP-Adressen 192.168.50.128 bis 192.168.50.164 für die Weitergabe an Stationen reserviert. Für andere statische IP-Adressen verwenden Sie eine außerhalb dieses Pools, auch die IP-Adresse für die Bridge selbst.
♦ Optimieren
Beim Start von wpa_supplicant erhalten Sie meistens folgende Meldungen im 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
Es ist kein großes Problem. wpa_supplicant benötigt Zufallszahlen, um Verschlüsselungsschlüssel zu generieren. Dies geschieht etwas langsam, so dass es warten muss. Glücklicherweise hat die Raspi einen eingebauten T rue R Andom N umber G enerator (TRNG). Wir können es verwenden und das Abrufen von Zufallszahlen beschleunigen, indem wir eine Software installieren (3) mit:
rpi ~$ sudo apt install rng-tools
Update:
Seit dem Raspbian Stretch 2019-04-08 ist keine Installation mehr erforderlich rng-tools
. Sie werden standardmäßig installiert.
♦ Fehlerbehebung
systemd-networkd
Schauen Sie sich den Status eines Dienstes an:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
Oder noch ein bisschen mehr:
rpi ~$ journalctl --boot --pager-end
Ich fand es hilfreich, die laufende Protokollierung zu verfolgen:
rpi ~$ journalctl --boot --follow
Wenn Sie eine Datei abgelegt haben, können Sie sich das Ergebnis ansehen:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Um die Laufzeitumgebung einer Unit zu überprüfen, können Sie diese anzeigen und beispielsweise prüfen, ob zwei ExecStart=
Zeilen vorhanden sind :
rpi ~$ systemctl show wpa_supplicant@wlan0.service
Und wenn nichts anderes hilft, können Sie die Debug-Option von /sbin/wpa_supplicant
mit -d
in einem Drop-In-File aktivieren :
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
Die Ausgabe erfolgt im Journal. Auf diese Weise habe ich das Problem mit der falschen Schlüsselverhandlung gefunden.
W-lan
Wenn Sie den Zugangspunkt eingerichtet haben, sollten Sie ihn mit einem Mobiltelefon finden. Die verfügbaren Netzwerke werden mit dem Namen RPiNet angezeigt und Sie können eine Verbindung herstellen. Auf dem RasPi können Sie auch den Befehl verwenden:
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
Wie Sie sehen, handelt es sich um einen AP (Access Point) und zeigt Ihnen auch, welchen Kanal er verwendet. Ein Problem kann darin bestehen, einen Kanal in eine Frequenz umzuwandeln. Die Frequenz muss mit einem Kanal übereinstimmen. Unter (2) finden Sie eine Liste der WLAN-Kanäle. Zum Beispiel zur Verwendung Kanal 36 auf der 5,1 - GHz - Band müssen Sie setzen frequency=5180
in /etc/wpa_supplicant\wpa_supplicant.conf
. Sie müssen jedoch sicher sein, dass Ihr WLAN das 5,1-GHz-Band unterstützt. Sie können mit überprüfen sudo iw phy
. Dadurch erhalten Sie eine Reihe von Informationen. Es muss auch unterstützte Frequenzen über 5000 MHz enthalten. Wenn Sie nur Frequenzen von 24xx MHz sehen, können Sie natürlich nur diese verwenden.
Ein weiterer Punkt könnten Zufallszahlen sein. Für die Verschlüsselung von Schlüsseln für gesicherte Verbindungen benötigt wpa_supplicant Zufallszahlen. Das Erzeugen ist auf einem Raspberry Pi sehr langsam. Wenn die Entropie nicht ausreicht, um Verschlüsselungsschlüssel zu generieren, lehnt wpa_supplicant die Authentifizierung ab. Sie können sehen, mit cat /proc/sys/kernel/random/entropy_avail
wie viel Entropie verfügbar ist. Es sollte> 1000 sein, um schnell genug zu arbeiten. Um dies zu beschleunigen, rng-tools
werden die standardmäßig installiert. Weitere Informationen finden Sie im Abschnitt Optimieren .
Referenzen:
[1] Migrieren von Netzwerk zu Systemd-Networkd mit dynamischem Failover
[2] Liste der WLAN-Kanäle
[3] Rng-Tools