Zugangspunkt als WLAN-Router / Repeater, optional mit Bridge


14

Ich benötige einen drahtlosen Zugangspunkt, der mit dem kabelgebundenen Ethernet-Port verbunden ist und mit einem anderen WLAN-Internet-Router mit einer Client-Verbindung als Uplink verbunden ist. Alle Geräte, die entweder über WLAN oder über ein kabelgebundenes Ethernet mit dem RasPi verbunden sind, sollten Zugang zum Internet haben und miteinander verbunden werden können.

Wie kann ich das mit einem Raspberry Pi erreichen?

Antworten:


25

Es handelt sich um einen Zugangspunkt zusammen mit einer WLAN- Client-Verbindung zu einem anderen WLAN-Netzwerk (WLAN-Repeater) oder einem Internet-Router.

Wenn Sie einen Zugangspunkt zusammen mit einem Ethernet-Port eth0 als Uplink zu einem Switch oder einem Internet-Router wünschen, lesen Sie den einfachen Weg, um einen Raspberry Pi als Zugangspunkt einzurichten .

Getestet auf einem Raspberry Pi 4B mit
Raspbian Buster Lite 2020-02-13 aktualisiert am 2020-03-03.
Updates durchgeführt mit sudo apt update && sudo apt full-upgrade && sudo reboot.

Hier finden Sie die letzte getestete Revision für Raspbian Stretch Lite .


Der Raspberry Pi kann als drahtloser Hotspot fungieren und gleichzeitig eine Verbindung zu einem anderen Hotspot als Client herstellen. Das WLAN-Gerät auf dem RasPi hat jedoch eine allgemeine Einschränkung. Die Clientverbindung kann nicht überbrückt werden, da kein WDS (Wireless Distribution System) vorhanden ist, das für die Überbrückung der drahtlosen Verbindung erforderlich ist. Weitere Informationen finden Sie unter Raspberry Pi WiFi to Ethernet Bridge für einen Server? . Daher können wir das Routing nur für die WLAN-Client-Verbindung zum Internet-Router verwenden. Der WLAN-Hotspot und der kabelgebundene Ethernet-Port können jedoch überbrückt werden, sodass alle Geräte im WLAN und der kabelgebundene Port dieselbe Broadcast-Domäne in ihrem gemeinsamen Subnetz haben können.

Ich gehe davon aus, dass Sie bereits eine Verbindung zum Internet haben. Alle Befehle können einfach kopiert und in die Befehlszeile des RasPi eingefügt werden. Die Blöcke mit EOF können Sie aus catinkl. das letzte EOFund fügen Sie es in die RasPis-Befehlszeile ein. Mit Enter wird es in eine Datei ohne das Trennzeichen EOF kopiert.

Wir werden zuerst einen WLAN-Repeater einrichten, damit jeder, der dies nur benötigt, die Einrichtung an dieser Stelle beenden und verwenden kann. Für diejenigen, die einen überbrückten Ethernet-Port mit dem WLAN-Zugangspunkt benötigen, kann die Einrichtung fortgesetzt werden.

Ich benutze systemd-networkd aus Gründen. Für den Ungeduldigen zuerst nur das Setup.


♦ WLAN-Repeater einrichten

Beispiel für dieses Setup:

                 wifi                        wifi            wan
mobile-phone <~.~.~.~.~> (ap0)RPi(wlan0) <.~.~.~.~.> router <───> INTERNET
            ╲             ╱          ╲
           (dhcp    192.168.4.1     (dhcp
         from RPi)               from router)


Schritt 1: Richten Sie systemd-networkd ein

Folgen Sie einfach Systemd-networkd für allgemeine Netzwerke verwenden . Sie können den Abschnitt "♦ Quick Step" verwenden . Dann komm zurück.

Schritt 2: Installieren Sie hostapd für den Access Point

rpi ~$ sudo -Es   # if not already done
rpi ~# apt install hostapd
rpi ~# systemctl unmask hostapd.service
rpi ~# systemctl enable hostapd.service

Erstellen Sie diese Datei mit Ihren Einstellungen für ssid=, country_code=und wpa_passphrase=. Wenn channel=Sie denselben Kanal auswählen, stellt wpa_supplicant mit wlan0 eine Verbindung zu Ihrem Internet-Router her.
BEACHTUNG! Dies ist eine Einschränkung der Hardware. hostapdsetzt den Kanal immer auf den gleichen Wert wie über die Clientverbindung, unabhängig davon, was Sie hier einstellen. Wenn Sie andere Kanäle benötigen, müssen Sie einen zusätzlichen USB / WiFi-Dongle verwenden.

rpi ~# cat > /etc/hostapd/hostapd.conf <<EOF
interface=ap0
driver=nl80211
ssid=RPiNet
country_code=DE
hw_mode=g
channel=1
auth_algs=1
wpa=2
wpa_passphrase=verySecretPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF

rpi ~# chmod 600 /etc/hostapd/hostapd.conf

Bearbeiten Sie den hostapd.service :

rpi ~# systemctl --full edit hostapd.service

und kommentiere die Zeile After=network.targetmit, #damit es so aussieht:

#After=network.target

Speichern Sie es und beenden Sie den Editor. Fügen Sie als nächstes die Schnittstelle ap0 zum hostapd.service hinzu mit:

rpi ~# systemctl edit hostapd.service

Fügen Sie im leeren Editor diese Anweisungen ein. Achten Sie =-bei einigen Aussagen auf das Minuszeichen nach gleich . Speichern Sie es und beenden Sie den Editor:

[Unit]
Wants=wpa_supplicant@wlan0.service

[Service]
Restart=
Restart=no
ExecStartPre=/sbin/iw dev wlan0 interface add ap0 type __ap
ExecStopPost=-/sbin/iw dev ap0 del


Schritt 3: Richten Sie wpa_supplicant für die Clientverbindung ein

Erstellen Sie diese Datei mit den Einstellungen für country=, ssid=und psk=und ermöglicht es:

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="TestNet"
    psk="realyNotMyPassword"
    key_mgmt=WPA-PSK   # see ref (4)
}
EOF

rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
rpi ~# rfkill unblock 0

Erweitern Sie wpa_supplicant mit:

rpi ~# systemctl edit wpa_supplicant@wlan0.service

Fügen Sie im leeren Editor diese Anweisungen ein. Speichern Sie es und beenden Sie den Editor:

[Unit]
BindsTo=hostapd.service
After=hostapd.service


Schritt 4: Richten Sie statische Schnittstellen ein

Erstellen Sie diese Dateien:

rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
DNSSEC=no
# If you need a static ip address, then toggle commenting next four lines (example)
DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF

Für diejenigen, die eine Bridge möchten, benötigen Sie nicht die nächste Datei und müssen mit Setup Bridge fortfahren .

rpi ~# cat > /etc/systemd/network/12-ap0.network <<EOF
[Match]
Name=ap0
[Network]
DNSSEC=no
IPMasquerade=yes
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF

Die Einrichtung eines WLAN-Repeaters ohne Brücke ist abgeschlossen. Sie müssen neu
starten.


♦ Bridge einrichten

Richten Sie den WLAN-Repeater wie oben beschrieben ein.

Beispiel für dieses Setup:

          (dhcp
        from RPi)        bridge
           ╱    wifi    ┌──────┐
mobile-phone <~.~.~.~.> │(ap0) │              wifi            wan
                        │   br0│RPi(wlan0) <.~.~.~.~> router <───> INTERNET
      laptop <────────> |(eth0)│╲       ╲
           ╲    wired   └──────┘╱      (dhcp
         (dhcp           192.168.4.1   from router)
       from RPi)

Schritt 5: Konfigurieren Sie hostapd für eine Bridge

Fügen Sie eine Zeile bridge=br0zu /etc/hostapd/hostapd.conf mit:

rpi ~# echo 'bridge=br0' >> /etc/hostapd/hostapd.conf

Schritt 6: Richten Sie wpa_supplicant für eine Brücke ein

Erweitern Sie wpa_supplicant mit:

rpi ~# systemctl edit wpa_supplicant@wlan0.service

Fügen Sie im Editor Zeilen hinzu, damit es wie folgt aussieht. Achten Sie =-bei einigen Aussagen auf das Minuszeichen nach gleich . Speichern Sie es und beenden Sie den Editor:

[Unit]
BindsTo=hostapd.service
After=hostapd.service
Wants=ap-bring-up.service
Before=ap-bring-up.service

[Service]
ExecStopPost=-/bin/ip link set ap0 up

Bitte beachten Sie, dass dies ExecStopPost=-/bin/ip link set ap0 upkein Tippfehler ist. Beim Stoppen von wpa_supplicant muss die Schnittstelle ap erneut eingerichtet werden , wie im Abschnitt Details - wpa_supplicant für Bridge (Schritt 6) beschrieben .

Schritt 7: Rufen Sie den Access Point mit der virtuellen WLAN-Schnittstelle auf

Erstellen Sie eine Einheit mit:

rpi ~# systemctl --force --full edit ap-bring-up.service

Fügen Sie im leeren Editor diese Anweisungen ein, speichern Sie sie und beenden Sie den Editor:

[Unit]
Description=Bring up wifi interface ap0
Requisite=hostapd.service

[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=60 --quiet
ExecStartPost=/bin/ip link set ap0 up
ExecStartPost=/usr/bin/resolvectl dnssec ap0 no

Schritt 8: Richten Sie statische Schnittstellen ein

Für eine Brücke wird ap0 dynamisch erstellt. Erstellen Sie also diese Dateien:

rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF

rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DNSSEC=no
Bridge=br0
EOF

rpi ~# cat > /etc/systemd/network/16-br0_up.network <<EOF
[Match]
Name=br0
[Network]
DNSSEC=no
IPMasquerade=yes
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF

Starten Sie neu.
Das ist es.


♦ Details

Allgemeines

Ein Problem ist, dass wir dasselbe Gerät für einen WLAN-Client und einen Zugangspunkt verwenden möchten. Dies muss von der WLAN-Hardware unterstützt werden. Wir können dies überprüfen mit

rpi ~$ sudo iw list | grep -A4 "valid interface combinations:"
        valid interface combinations:
             * #{ managed } <= 1, #{ P2P-device } <= 1, #{ P2P-client, P2P-GO } <= 1,
               total <= 3, #channels <= 2
             * #{ managed } <= 1, #{ AP } <= 1, #{ P2P-client } <= 1, #{ P2P-device } <= 1,
               total <= 4, #channels <= 1

Der wichtige Teil ist, #{ managed } <= 1, #{ AP } <= 1,aber Sie können auch sehen, dass dies nur auf einem Kanal möglich ist .

Ich habe festgestellt, dass wir dies nacheinander einrichten müssen, sonst funktioniert es nicht. Wenn andere Anwendungen an den WLAN-Port gebunden sind, kann dieser nicht festgelegt werden.

  1. Erstellen Sie eine virtuelle Schnittstelle ap0für den Access Point
  2. Starten Sie den Access Point Daemon hostapdüber die Schnittstelleap0
  3. Starten Sie wpa_supplicantfür den WLAN-Client über die Schnittstellewlan0

Diese Reihenfolge schränkt das gesamte Setup ein. Es ist nicht möglich, hostapd zu starten, wenn wpa_supplicant ausgeführt wird. Sie müssen zuerst wpa_supplicant stoppen und dann hostapd und wpa_supplicant in dieser Reihenfolge starten . Dies liegt am WiFi-Treiber brcmfmac.

Eine weitere Besonderheit ist, dass wpa_supplicant die Schnittstelle ap0 deaktiviert, wenn sie verwaltet wird, unabhängig davon, ob sie gestartet oder gestoppt wird. Selbst nach einem Start von wpa_supplicant müssen wir ap0 wieder aktivieren .

Hierbei handelt es sich hauptsächlich um fünf Komponenten: virtuelle Schnittstelle ap0 , hostapd , wpa_supplicant , Setup Bridge und Aufrufen des Zugriffspunkts.

hostapd (Schritt 2)

Dies ist das normale Setup, das Sie im gesamten Web finden. Bitte stellen Sie den Kanal auf den gleichen Wert ein, dann wird wlan0 von Ihrem Router aus mit dem WLAN verbunden. Dies ist die Einschränkung der Hardware und kann Verwechslungen mit den Kanaleinstellungen vermeiden. hostapd setzt den Kanal immer auf den gleichen Wert wie über die Clientverbindung, unabhängig davon, was Sie hier einstellen.

Bitte verwenden Sie eine Passphrase, die lang genug ist, ich würde sagen, mindestens mit 8 Zeichen. Es wurde gesagt, dass 4 Zeichen zu klein sind und hostapd sich weigert, Verbindungen zu akzeptieren. Sie finden den Access Point RPiNet nicht auf Ihrem Mobiltelefon (dank @Leo ).

Für Abhängigkeiten erweitern wir die Einheit von hostapd um eine Drop-In-Datei (Overlay) (2) . Es startet immer wpa_supplicant (will es). In der Hauptgerätedatei befindet sich ein Restart=alwaysSatz. Dies ist dramatisch, wenn das Erstellen der Schnittstelle ap0 aus irgendeinem Grund fehlschlägt. Beim Booten versucht das RasPi immer, hostapd in einer Endlosschleife zu starten, und beendet das Booten nie. Sie müssen die Stromversorgung unterbrechen und die SD-Karte in einem anderen Computer reparieren. Das ist eine sehr schlechte Konfiguration. Sie sollten Restart wirklich deaktivieren. Dann wird die Schnittstelle ap0 erstellt, bevor hostapd gestartet wird . Dies wird in der Startreihenfolge eingehalten. Weil ap0 an wlan0 gebunden istEs erhält die gleiche Mac-Adresse. Sie können eine eindeutige Mac-Adresse angeben, aber das ist keine gute Idee. Im Netzwerk wird nur die Mac-Adresse von wlan0 angezeigt . Wenn Sie ap0 eine eigene Mac-Adresse geben, wird diese im Netzwerk nicht für Arp-Anfragen angezeigt und die IP-Adresse für Verbindungen zu ap0 wird nicht gefunden und bleibt hängen . Sie müssen ap0 auf den Promiscuous-Modus setzen, damit es dann funktioniert.

Nach dem Einrichten der Abhängigkeiten wird standardmäßig der hostapd.service gestartet After=network.target. Der wpa_supplicant@wlan0.service muss After=hostapd.servicestandardmäßig gestartet werden Before=network.target. Sehen Sie den Konflikt mit network.target? Systemd beschwert sich mit der Fehlermeldung " Bestellzyklus auf wpa_supplicant@wlan0.service/start gefunden " und verhindert, dass hostapd.service gestartet wird. Das ist der Grund, warum wir einen Kommentar After=network.targetin der Unit-Datei des hostapd.service machen müssen.

Nach gestoppt hostapd dann AP0 wird auch so sie gelöscht wieder auf dem nächsten Start erstellt werden kann hostapd .

wpa_supplicant (Schritt 3)

Das Einrichten von wpa_supplicant für wlan0 erfolgt wie gewohnt. Die erweiterte Einheit besteht darin, wpa_supplicant strikt an hostapd zu binden, damit es in der richtigen Reihenfolge damit gestartet und gestoppt wird. Wir tun dies, weil das Ausführen von wpa_supplicant ohne hostapd sehr kompliziert ist und zu einem Totalabsturz des brcmfmac- WLAN-Treibers führen kann. Das habe ich bei meinen Tests gesehen.

Richten Sie statische Schnittstellen ein (Schritt 4)

Hier definieren wir die Schnittstelle wlan0 und die virtuelle Schnittstelle ap0, die wir für einen WLAN-Repeater benötigen. Für wlan0 erhalten wir eine IP-Adresse per DHCP vom Internet-Router. Optional können Sie eine statische IP-Adresse festlegen, müssen dann aber auch alle anderen Einstellungen wie Gateway und DNS-Server definieren, da Sie diese nicht mehr vom DHCP-Server erhalten.

Die Schnittstelle ap0 benötigt eine statische IP-Adresse, da sie der Zugangspunkt und die Quelle des DHCP-Servers für das WLAN-Netzwerk ist. Es ist nicht erforderlich, dass Clients, die mit dem Internet-Router verbunden sind, auch eine Verbindung zu Clients auf dem Zugriffspunkt herstellen müssen. Wir können also NAT (IPMasquerade = yes) verwenden, was die Einrichtung erheblich vereinfacht. Dann müssen wir keine statischen Routen konfigurieren und es ist nicht erforderlich, wlan0 mit statischen Werten (IP-Adresse, Gateway, DNS-Server usw.) zu konfigurieren .

Hostapd für Brücke (Schritt 5)

Wir haben hostapd in Schritt 2 eingerichtet. Jetzt müssen wir nur noch an bridge=br0seine Konfiguration anhängen , damit es dynamisch gelingt, ap0 zur Bridge hinzuzufügen .

wpa_supplicant für Brücke (Schritt 6)

Wenn wpa_supplicant gestartet wird, wird auch die Schnittstelle wlan0 aufgerufen . Jedes Mal, wenn es verwaltet wird, egal ob es gestartet oder gestoppt wurde, stoppt es ap0, da es keine echte Schnittstelle ist und direkt von wlan0 abhängt . Dies ist auch der Grund, warum es nur aufgerufen werden kann, wenn wlan0 Träger erhalten hat. Wir können aber nicht einfach einige Sekunden warten und dann ap0 aufrufen . wpa_supplicant.service muss vollständig gestartet sein, daher können wir hierfür nur einen zusätzlichen Dienst ap-bring-up.service verwenden . Die Abhängigkeiten stellen dies sicher.

Nach dem Stoppen von wpa_supplicant (bring wlan0 down) muss ap0 erneut hochgefahren werden, damit es für den Access Point weiter ausgeführt werden kann.

Rufen Sie den Zugangspunkt auf (Schritt 7).

Es ist nicht möglich, ap0 bei Bedarf einzurichten . Es kann nur gestartet werden, wenn wlan0 "Gained Carrier" ist und die Verbindung bereit ist (3) . Dies geschieht einige oder mehr Sekunden nach dem Start von wpa_supplicant . Wir brauchen also einen ap-bring-up.service , den wpa_supplicant will und der prüft, ob wlan0 "Gained Carrier" hat und online ist. Es gibt ein Hilfsprogramm systemd-networkd-wait-online , das dies synchron ausführen kann. Wir verwenden es mit einer Zeitüberschreitung von 60 Sekunden. Wenn das Aufstehen Ihrer Netzwerkverbindung länger als 60 Sekunden dauert, sollten Sie das Zeitlimit entsprechend erhöhen. Mit können journalctl -b -eSie überprüfen, ob Starting Bring up wifi interface ap0...undStarted Bring up wifi interface ap0.Abdeckungen wlan0: Gained carrier. Dies ist sehr wichtig, da sonst die Bridge bei undefiniertem Verhalten nicht richtig funktioniert. Und natürlich sollte dieses Gerät nur starten, wenn hostapd ausgeführt wird (Voraussetzung).

Definieren Sie statische Schnittstellen für die Brücke (Schritt 8).

Diese Dateien definieren die Brücke. ap0 wird dynamisch von hostapd hinzugefügt . eth0 und ap0 sind Slaves der Bridge und benötigen keine IP-Adresse. Die Bridge br0 selbst benötigt ebenfalls keine IP-Adresse, hat hier jedoch eine statische IP-Adresse, da diese für den an br0 gebundenen DHCP-Server benötigt wird, damit der DHCP-Server im Subnetz der Bridge verfügbar ist (Schnittstellen eth0, ap0).

Da bei der Aktivierung von DNSSEC Probleme mit der Namensauflösung aufgetreten sind, ist diese überall deaktiviert. Wenn es verwendet wird, können wir es nach Bedarf aktivieren.

Fazit

Sie können jetzt hostapd und wpa_supplicant starten, stoppen und neu starten .

Sie sollten den Zugangspunkt, hier RPiNet , in Ihrem Mobiltelefon sehen und eine IP-Adresse erhalten, um eine Verbindung zum Zugangspunkt herzustellen . Sie sollten auch eine IP-Adresse aus demselben Subnetz erhalten, wenn Sie einen Laptop mit einem Kabel an den Ethernet-Anschluss anschließen und das Mobiltelefon anpingen können.

Mit diesem Setup haben Sie die folgenden Abhängigkeiten beim Starten und Stoppen:

 hostapd   │ wpa_supplicant      wpa_supplicant │  hostapd
───────────┼────────────────────────────────────┼──────────
 starting  │    starts              starting    │  starts
 stopping  │    stops               stopping    │   ----
restarting │   restarts            restarting   │  starts

Dies liegt an der strengen Startreihenfolge (siehe Abschnitt Allgemein ). Sie können wpa_supplicant nicht ohne hostapd ausführen, aber Sie können hostapd ohne wpa_supplicant ausführen, indem Sie hostapd starten und dann wpa_supplicant stoppen .

Wenn die Kommunikation aus irgendeinem Grund (zB Verzögerung zu klein oder etwas anderes) hält ist es meist genug Kick AP0 mit /bin/ip link set ap0 up.


Referenzen:
[1] Migration vom Netzwerk zu systemd-networkd mit dynamischem Failover
[2] man systemd.unit
[3] systemd-networkd drahtlose Überbrückung - muss auf den Netzbetreiber warten
[4] WLAN auf Pi 3 B + einrichten


1
Dies sieht nach einem guten Tutorial aus (ich habe es nicht ausprobiert, da ich keine Lust auf die Funktionalität habe). Ich habe ein paar Bedenken - Sie scheinen als root angemeldet zu sein; Der Raspbian hat keine Root-Klimaanlage und es gibt keine Erklärung. Warum "# cat> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf << EOF", wenn Sie nur die Dateien auflisten konnten (und mit sudo kopieren konnten)?
Milliways

1
@ Milliways Es gibt einige Befehle, denen alle vorangestellt werden müssen sudo. Um es zu vereinfachen, arbeite ich gerne in einer Shell mit Benutzerumgebung, aber mit Root-Rechten. Sie können dies einfach mit aufrufen sudo -Es. Sie finden es in den Schritten und Sie finden auch eine exit(wenn nicht neu gestartet).
Ingo

2
Ich habe es versucht und arbeitet wie ein Traum (No Bridge). Ich habe es auf einer Rasp Zero W gemacht. Danke!
Grillp

1
@thewebjackal Um wpa_suppliant als Dienst zu verwalten, z. B. starten, stoppen, neu starten, aktivieren, deaktivieren usw., würde ich systemd verwenden. Auf diese Weise zeigt systemd immer den Status des Dienstes an. Um Details von wpa_supplicant zu verwalten, z. B. dynamisch ein Netzwerk hinzuzufügen, eine Verbindung zu einem bestimmten Hotspot zu erzwingen usw., würde ich wpa_cli verwenden. Im Allgemeinen: Verwenden Sie nach Möglichkeit systemctl.
Ingo

1
@Chiwda Vor kurzem habe ich das Setup mit Systemd Name Resolution aktualisiert. Vielleicht gibt es ein Problem? Ich werde es überprüfen, bitte einen Moment ...
Ingo

4

Diese Antwort ist nicht für die Einrichtung gedacht. Informationen zum Setup finden Sie in der anderen Antwort auf diese Frage, beginnend mit dem Setup-WLAN-Repeater . Dies dient hauptsächlich zur Fehlerbehebung und um zu zeigen, wie es mit detaillierten Befehlen Schritt für Schritt und Prüfpunkten funktioniert, jedoch ohne Hintergrundinformationen. Ich nehme an, Sie haben einen Monitor, eine Tastatur und eine Maus an Ihren Raspberry Pi angeschlossen und einen DHCP-Server in Ihrem lokalen drahtlosen Netzwerk. IP-Adressen und andere Einstellungen in dieser Überprüfung sind Beispiele. Du musst deine benutzen. Sie können immer nach journalctl -b -eprotokollierten Informationen suchen .

Download ZIPBild Raspbian Stretch Lite 2018-11-13 auf Ihren Linux-PC.

Prüfpunkt 1: Vergleichen Sie die Prüfsumme mit der auf der Download-Site.

pc ~$ sha256sum 2018-11-13-raspbian-stretch-lite.zip

47ef1b2501d0e5002675a50b6868074e693f78829822eef64f3878487953234d 2018-11-13-raspbian-stretch-lite.zip

Nächster Schritt: Brennen Sie das Image auf eine angeschlossene SD-Karte. Ich nehme an, es hängt daran /dev/sdb. Überprüfen Sie, lsblkan welche Gerätedatei Ihre SD-Karte angehängt ist.

pc ~$ unzip -p 2018-11-13-raspbian-stretch-lite.zip | sudo dd of=/dev/sdb bs=4M conv=fsync

Prüfpunkt 2: Überprüfen Sie die Partitionen auf der SD-Karte:

pc ~$ sudo parted /dev/sdb print
sudo parted /dev/sdb print
Model: Mass Storage Device (scsi)
Disk /dev/sdb: 3965MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  50,2MB  46,0MB  primary  fat32        lba
 2      50,3MB  1866MB  1816MB  primary  ext4

Nächster Schritt: Mounten Sie die Boot-Partition und erstellen Sie eine wpa_supplicant.confDatei:

pc ~$ mkdir boot/
pc ~$ sudo mount /dev/sdb1 boot/
pc ~$ sudo editor boot/wpa_supplicant.conf

Legen Sie diese in den leeren Editor mit Ihren Einstellungen für country=, ssid=und psk=, speichern und beenden Sie den Editor:

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="your wifi network"
    psk="YourSecretPassword"
}

pc ~$ sudo umount boot/

Legen Sie die SD-Karte in Ihr RasPi ein und starten Sie.

Checkpoint 3: Überprüfen Sie nach dem Login die WLAN-Verbindung und den Internetzugang. Die wlan0- Schnittstelle muss eine IP-Adresse haben:

rpi ~$ ip -4 addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever

rpi ~$ ping -I wlan0 -c3 google.com
PING google.com (216.58.210.14) from 192.168.10.112 wlan0: 56(84) bytes of data.
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=1 ttl=57 time=213 ms
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=2 ttl=57 time=14.2 ms
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=3 ttl=57 time=12.2 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 12.215/79.965/213.461/94.399 ms

Bisher haben wir nur die Standardeinstellungen vorgenommen. Wenn Sie Probleme haben, liegt ein allgemeines Problem mit Ihrem Netzwerk vor. Überprüfen Sie, wie ich die Netzwerk- / WLAN- / statische IP-Adresse einrichte. und reparieren Sie es.

Nächster Schritt: Vollständiges Upgrade und Neustart:

rpi ~$ sudo apt update
rpi ~$ sudo apt full-upgrade
rpi ~$ sudo systemctl reboot

Wechseln Sie nach dem Neustart und der Anmeldung zu systemd-networkd :

rpi ~$ sudo -Es
rpi ~# systemctl mask networking.service
rpi ~# systemctl mask dhcpcd.service
rpi ~# sudo mv /etc/network/interfaces /etc/network/interfaces~
rpi ~# sed -i '1i resolvconf=NO' /etc/resolvconf.conf

rpi ~# systemctl enable systemd-networkd.service
rpi ~# systemctl enable systemd-resolved.service
rpi ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Erstellen Sie diese Dateien für die Schnittstellen wlan0 und ap0 mit Ihren Einstellungen:

rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
IPForward=yes
DHCP=yes
EOF

rpi ~# cat > /etc/systemd/network/12-ap0.network <<EOF
[Match]
Name=ap0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 84.200.70.40
EOF

Benennen Sie /etc/wpa_supplicant/wpa_supplicant.conf so dass es die Einstellung der Schnittstelle und Neustart übereinstimmt:

rpi ~# mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant@wlan0.service
rpi ~# systemctl reboot

Checkpoint 4: Überprüfen Sie nach dem Neustart und der Anmeldung die WLAN-Verbindung mit systemd-networkd :

rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
● wpa_supplicant@wlan0.service - WPA supplicant daemon (interface-specific version)
   Loaded: loaded (/lib/systemd/system/wpa_supplicant@.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-01-29 11:07:53 GMT; 24s ago
 Main PID: 415 (wpa_supplicant)
   CGroup: /system.slice/system-wpa_supplicant.slice/wpa_supplicant@wlan0.service
           └─415 /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -Dnl80211,wext -iwlan0

Jan 29 11:07:53 raspberrypi systemd[1]: Started WPA supplicant daemon (interface-specific version).
Jan 29 11:07:53 raspberrypi wpa_supplicant[415]: Successfully initialized wpa_supplicant
Jan 29 11:07:53 raspberrypi wpa_supplicant[415]: p2p-dev-wlan0: CTRL-EVENT-REGDOM-CHANGE init=USER type=COUNTRY alpha2=DE
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: Trying to associate with 34:31:c4:c7:f2:74 (SSID='wlan@hoeft-online.de' freq
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: Associated with 34:31:c4:c7:f2:74
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: WPA: Key negotiation completed with 34:31:c4:c7:f2:74 [PTK=CCMP GTK=CCMP]
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: CTRL-EVENT-CONNECTED - Connection to 34:31:c4:c7:f2:74 completed [id=0 id_st
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: p2p-dev-wlan0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=DE

rpi ~$ ip -4 addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever

rpi ~$ ping -I wlan0 -c3 google.com
PING google.com (172.217.21.238) from 192.168.10.112 wlan0: 56(84) bytes of data.
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=1 ttl=56 time=14.1 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=2 ttl=56 time=13.4 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=3 ttl=56 time=13.2 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 13.203/13.602/14.142/0.418 ms

Checkpoint 5: WICHTIG! Zu diesem Zeitpunkt muss es möglich sein, die virtuelle Schnittstelle ap0 ohne Fehlermeldungen festzulegen und zu löschen :

rpi ~$ sudo iw dev wlan0 interface add ap0 type __ap
rpi ~$ sudo iw dev ap0 info
Interface ap0
        ifindex 5
        wdev 0x5
        addr b8:27:eb:06:e8:8b
        type AP
        wiphy 0
        channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
        txpower 31.00 dBm

rpi ~$ sudo iw dev ap0 del
rpi ~$

Nächster Schritt: Installieren Sie Hostapd und Helper

rpi ~$ sudo -Es
rpi ~# apt install hostapd rng-tools
rpi ~# systemctl stop hostapd.service
rpi ~# systemctl disable hostapd.service

Erstellen Sie diese Datei mit Ihren Einstellungen für ssid=und wpa_passphrase=:

rpi ~# cat > /etc/hostapd/hostapd.conf <<EOF
interface=ap0
driver=nl80211
ssid=RPiNet
hw_mode=g
channel=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=verySecretPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF

rpi ~# chmod 600 /etc/hostapd/hostapd.conf

Setzen Sie DAEMON_CONF = "/ etc / hostapd / hostapd.conf" in / etc / default / hostapd mit:

rpi ~# sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd

In /etc/init.d/hostapd im Abschnitt INIT INFO müssen Sie die Zeile kommentieren # Should-Start: $networkzu ## Should-Start: $network:

rpi ~# sed -i 's/^\(# Should-Start:\s*$network\)$/#\1/' /etc/init.d/hostapd

Bearbeiten Sie hostapd.service mit systemctl edit hostapd.serviceund fügen Sie dies in den leeren Editor ein, speichern und beenden Sie:

[Service]
ExecStartPre=/sbin/iw dev wlan0 interface add ap0 type __ap
ExecStopPost=-/sbin/iw dev ap0 del

Starten Sie neu.

Überprüfen Sie nach dem Neustart und der Anmeldung die Clientverbindung zusammen mit dem Zugriffspunkt. Es ist sehr wichtig , dass /sbin/wpa_supplicantbeginnt nach /sbin/hostapd . Andernfalls stürzt der WLAN-Treiber ab und Sie müssen neu starten.

Checkpoint 6: Schnittstelle wlan0 muss haben state DOWNund ap0 hat state UP.

rpi ~$ ip link show dev wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:06:e8:8b brd ff:ff:ff:ff:ff:ff

rpi ~$ sudo systemctl start hostapd.service
rpi ~$ ip -4 addr show dev ap0
4: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.4.1/24 brd 192.168.4.255 scope global ap0
       valid_lft forever preferred_lft forever

Checkpoint 7: Überprüfen Sie das WLAN auf Ihrem Mobiltelefon. Sie sollten finden RPiNetund Sie können sich damit verbinden. Ihr Mobiltelefon kann nicht ins Internet gelangen, da das Routing noch nicht konfiguriert ist.

Nächster Schritt: Beginnen Sie wpa_supplicantnach hostapd:

rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service

Checkpoint 8: Die Schnittstellen wlan0 und ap0 müssen vorhanden sein, state UPund Sie können google.com über das RasPi anpingen:

rpi ~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global dynamic wlan0
       valid_lft 25393sec preferred_lft 25393sec
4: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.4.1/24 brd 192.168.4.255 scope global ap0
       valid_lft forever preferred_lft forever

rpi ~$ ping -c3 google.com
PING google.com (172.217.21.238) 56(84) bytes of data.
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=1 ttl=56 time=13.7 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=2 ttl=56 time=14.1 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=3 ttl=56 time=15.9 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 13.775/14.608/15.908/0.936 ms

Nächster Schritt: Aktivieren Sie NAT (Network Address Translation), damit geroutete Pakete an Geräte auf dem Zugriffspunkt zurückkehren können. Erweitern Sie wpa_supplicant mit:

rpi ~$ sudo systemctl stop wpa_supplicant@wlan0.service
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service

Fügen Sie im leeren Editor diese Anweisungen ein. Achten Sie =-bei einigen Aussagen auf das Minuszeichen nach gleich . Speichern Sie es und beenden Sie den Editor:

[Service]
ExecStartPost=/sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
ExecStopPost=-/sbin/iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE

Starten Sie wpa_supplicant erneut:

rpi ~$ sudo systemctl daemon-reload
rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service

Checkpoint 9: Jetzt sollten Sie mit dem Handy ins Internet gehen können.

Das ist es.

Wenn Sie auf Probleme stoßen, können Sie einen neuen Versuch versuchen mit:

rpi ~$ sudo systemctl disable wpa_supplicant@wlan0.service
rpi ~$ sudo systemctl disable hostapd.service
rpi ~$ sudo systemctl reboot

Dies ist keine funktionierende Installation. Sie müssen bearbeiten hostapd.serviceund wpa_supplicant@wlan0.servicewie in meiner anderen Antwort gezeigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.