Raspberry Pi + CentOS = WLAN-Hotspot (oder Himbeer-Router in einem roten Hut)

Im Internet gibt es eine Fülle von Informationen zum Erstellen von Wi-Fi-Zugangspunkten auf der Basis eines Single-Board-Raspberry-PCs. In der Regel bedeutet dies die Verwendung des nativen Betriebssystems für Raspberry - Raspbian.

Als Anhänger von RPM-basierten Systemen konnte ich dieses kleine Wunder nicht überwinden und mein Lieblings-CentOS nicht ausprobieren.

Der Artikel enthält Anweisungen zum Herstellen eines 5-GHz / AC-WLAN-Routers aus dem Raspberry Pi 3 Model B + basierend auf dem CentOS-Betriebssystem. Es wird mehrere Standardtricks geben, die jedoch wenig bekannt sind, und als Bonus eine Zeichnung für die Verbindung mit der zusätzlichen Wi-Fi-Ausrüstung "Himbeere", die es ermöglicht, gleichzeitig in mehreren Modi (2,4 + 5 GHz) zu arbeiten.

Bild
(Mischung von Bildern aus freiem Zugang)

Wir stellen sofort fest, dass einige kosmische Geschwindigkeiten nicht funktionieren. Ich drücke maximal 100 Mbit aus meiner „Himbeere“ über Funk, und dies deckt die Geschwindigkeit meines Internetproviders ab. Warum brauchen wir eine so träge Klimaanlage, wenn Sie theoretisch sogar auf N ein halbes Gigabyte bekommen können? Wenn Sie diese Frage gestellt haben, suchen Sie im Geschäft nach einem echten Router mit acht externen Antennen.

0. Was wird benötigt


  • Eigentlich das "Himbeerprodukt" des Kalibers selbst: Pi 3 Modell B + (um die begehrten 5GHz Geschwindigkeiten und Kanäle zu erreichen);
  • Feste microSD> = 4 GB;
  • Linux-Workstation mit microSD-Reader / Writer;
  • Das Vorhandensein ausreichender Kenntnisse in Linux, der Artikel ist für den vorbereiteten Geek;
  • Ethed-Konnektivität (Wired Network) zwischen Raspberry und Linux, einem funktionierenden DHCP-Server im lokalen Netzwerk, und Internetzugang von beiden Geräten.

Ein kurzer Kommentar zum letzten Punkt. "Was war zuerst da, ein Ei oder ..." Wie kann man einen WLAN-Router ohne Internet-Zugangsausrüstung herstellen? Lassen wir diese unterhaltsame Übung außerhalb des Geltungsbereichs des Artikels und nehmen einfach an, dass Raspberry per Kabel mit dem lokalen Netzwerk verbunden ist und über einen Internetzugang verfügt. In diesem Fall benötigen wir keinen zusätzlichen Fernseher und keinen Manipulator zum Einrichten der Himbeere.

1. Installieren Sie CentOS


Projekthomepage

Zum Zeitpunkt dieses Schreibens ist die Arbeitsversion von CentOS auf dem Gerät 32-Bit. Irgendwo in der Weite des World Wide Web stieß ich auf Meinungen über die Leistungsverschlechterung solcher Betriebssysteme in der 64-Bit-ARM-Architektur von bis zu 20%. Ich werde diesen Punkt kommentarlos belassen.

Laden Sie unter Linux das Minimal-Image mit dem Kernel " -RaspberryPI- " herunter und schreiben Sie es in microSD:

# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz | \ dd of=/dev/mmcblk0 bs=4M # sync 

Bevor Sie das Image verwenden, löschen Sie den SWAP-Abschnitt daraus, erweitern Sie den Stamm auf das gesamte verfügbare Volume und entfernen Sie SELinux. Der Algorithmus ist einfach: Wir erstellen unter Linux eine Kopie des Stammverzeichnisses, löschen alle Partitionen von der microSD mit Ausnahme der ersten (/ boot), erstellen ein neues Stammverzeichnis und geben dessen Inhalt von der Kopie zurück.

Beispiel für notwendige Aktionen (harte Konsolenausgabe)
 # mount /dev/mmcblk0p3 /mnt # cd /mnt # tar cfz ~/pi.tgz . --no-selinux # cd # umount /mnt 

 # parted /dev/mmcblk0 (parted) unit s (parted) print free Model: SD SC16G (sd/mmc) Disk /dev/mmcblk0: 31116288s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 63s 2047s 1985s Free Space 1 2048s 1370111s 1368064s primary fat32 boot, lba 2 1370112s 2369535s 999424s primary linux-swap(v1) 3 2369536s 5298175s 2928640s primary ext4 5298176s 31116287s 25818112s Free Space (parted) rm 3 (parted) rm 2 (parted) print free Model: SD SC16G (sd/mmc) Disk /dev/mmcblk0: 31116288s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 63s 2047s 1985s Free Space 1 2048s 1370111s 1368064s primary fat32 boot, lba 1370112s 31116287s 29746176s Free Space (parted) mkpart Partition type? primary/extended? primary File system type? [ext2]? ext4 Start? 1370112s End? 31116287s (parted) set Partition number? 2 Flag to Invert? lba New state? on/[off]? off (parted) print free Model: SD SC16G (sd/mmc) Disk /dev/mmcblk0: 31116288s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 63s 2047s 1985s Free Space 1 2048s 1370111s 1368064s primary fat32 boot, lba 2 1370112s 31116287s 29746176s primary ext4 (parted) quit 

 # mkfs.ext4 /dev/mmcblk0p2 mke2fs 1.44.6 (5-Mar-2019) /dev/mmcblk0p2 contains a swap file system labelled '_swap' Proceed anyway? (y,N) y Discarding device blocks: done Creating filesystem with 3718272 4k blocks and 930240 inodes Filesystem UUID: 6a1a0694-8196-4724-a58d-edde1f189b31 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done # mount /dev/mmcblk0p2 /mnt # tar xfz ~/pi.tgz -C /mnt --no-selinux 

Nachdem Sie den Inhalt der Root-Partition entpackt haben, müssen Sie einige Änderungen daran vornehmen.

Deaktivieren Sie SELinux in / mnt / etc / selinux / config :

 SELINUX=disabled 

Wir bearbeiten / mnt / etc / fstab und lassen nur zwei Partitionseinträge darin: boot (/ boot, unverändert) und root (ändern Sie den UUID-Wert, der durch Untersuchen der Ausgabe des Befehls blkid unter Linux ermittelt werden kann):

 UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0 UUID=6938-F4F2 /boot vfat defaults,noatime 0 0 

Schließlich ändern wir die Kernel-Boot-Parameter: Geben Sie den neuen Speicherort der Root-Partition an, deaktivieren Sie die Ausgabe von Debugging-Informationen und verhindern Sie (optional), dass der Kernel IPv6-Adressen auf Netzwerkschnittstellen zuweist:

 # cd # umount /mnt # mount /dev/mmcblk0p1 /mnt 

Wir bringen den Inhalt von /mnt/cmdline.txt in das folgende Formular (eine Zeile ohne Silbentrennung):

 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1 

Fertig:

 # cd # umount /mnt # sync 


Wir ordnen die microSD in der "Malinka" neu an, führen sie aus und erhalten über ssh (root / centos) Netzwerkzugriff darauf.

2. CentOS konfigurieren


Die ersten drei unerschütterlichen Bewegungen: passwd , yum -y update , neustart .

Wir geben networkd Netzwerkmanagement:

 # yum install systemd-networkd # systemctl enable systemd-networkd # systemctl disable NetworkManager # chkconfig network off 

Erstellen Sie die Datei (zusammen mit den Verzeichnissen) /etc/systemd/network/eth0.network :

 [Match] Name=eth0 [Network] DHCP=ipv4 

Wir starten die "Himbeere" neu und erhalten erneut Netzwerkzugriff über ssh (die IP-Adresse kann sich ändern). Beachten Sie, dass /etc/resolv.conf , das zuvor von Network Manager erstellt wurde, verwendet wird. Bearbeiten Sie daher bei Problemen mit der Lösung den Inhalt. Wir werden nicht systemd-Resolution verwenden .

Wir entfernen das "Überflüssige", reparieren und beschleunigen das Laden des Betriebssystems:

 # systemctl set-default multi-user.target # yum remove GeoIP Network* aic* alsa* cloud-utils-growpart \ cronie* dhc* firewal* initscripts iwl* kexec* logrotate \ postfix rsyslog selinux-pol* teamd wpa_supplicant 

Wer cron braucht und wer die eingebauten systemd-Timer nicht verdaut , kann die fehlenden installieren. / var / log - und durch journalctl schauen. Wenn Sie einen Protokollverlauf benötigen (standardmäßig werden Informationen erst ab dem Start des Systems gespeichert):

 # mkdir /var/log/journal # systemd-tmpfiles --create --prefix /var/log/journal # systemctl restart systemd-journald # vi /etc/systemd/journald.conf 

Deaktivieren Sie die IPv6-Nutzung durch Kerndienste (falls erforderlich).
/ etc / ssh / sshd_config :

 AddressFamily inet 

/ etc / sysconfig / chronyd :
 OPTIONS="-4" 


Die Relevanz der Zeit für die "Himbeere" ist eine wichtige Sache. Da "out of the box" nicht in der Lage ist, den aktuellen Status der Uhr beim Neustart zu speichern, müssen Sie synchronisieren. Ein sehr guter und schneller Daemon dafür - chrony - ist bereits installiert und startet automatisch. Sie können die NTP-Server auf die nächsten ändern.

/etc/chrony.conf :

 server 0.ru.pool.ntp.org iburst server 1.ru.pool.ntp.org iburst server 2.ru.pool.ntp.org iburst server 3.ru.pool.ntp.org iburst 

Wir werden den Trick verwenden , um die Zeitzone einzustellen. Da unser Ziel darin besteht, einen WLAN-Router mit 5-GHz-Frequenzen zu entwickeln, werden wir uns im Voraus auf die Überraschungen des Regulators vorbereiten:
# yum info crda
Zusammenfassung: Daemon zur Einhaltung gesetzlicher Bestimmungen für drahtlose 802.11-Netzwerke

Dieses boshafte Design, das sich unter anderem auf die Zeitzone konzentriert, „verbietet“ die Verwendung (in Russland) von 5-GHz-Frequenzen und -Kanälen mit „großen“ Zahlen. Der Trick besteht darin, die Zeitzone festzulegen, ohne die Namen des Festlandes / der Stadt zu verwenden, dh anstelle von:

 # timedatectl set-timezone Europe/Moscow 

Drücken Sie:

 # timedatectl set-timezone Etc/GMT-3 

Und der letzte Schliff in der Frisur des Systems:

 # hostnamectl set-hostname router 

/root/.bash_profile :

 . . . # User specific environment and startup programs export PROMPT_COMMAND="echo -n $(($(</sys/class/thermal/thermal_zone0/temp) / 1000))\'C\ " export LANG=en_US.UTF-8 export PATH=$PATH:$HOME/bin 

3. CentOS-Add-Ons


Alles, was oben gesagt wurde, kann als vollständige Anleitung zur Installation des "Vanilla" CentOS auf dem Raspberry Pi angesehen werden. Sie sollten einen PC haben, der in weniger als 10 Sekunden (neu) startet, weniger als 15 Megabyte RAM und 1,5 Gigabyte microSD verwendet (tatsächlich weniger als 1 Gigabyte aufgrund von Unvollständigkeit / Booten, aber wir werden bis zum Ende ehrlich sein):






Um die Wi-Fi Access Point-Software auf diesem System zu installieren, müssen Sie die Funktionen der Standard-CentOS-Distribution geringfügig erweitern. Pumpen Sie zunächst den Treiber (Firmware) des eingebauten Wi-Fi-Adapters. Die Projekthomepage sagt:
Wifi auf der Himbeere 3B und 3B +

Die Raspberry PI 3B / 3B + -Firmware-Dateien dürfen vom CentOS-Projekt nicht verteilt werden. Sie können die folgenden Artikel verwenden, um das Problem zu verstehen, die Firmware abzurufen und das WLAN einzurichten.

Was das CentOS-Projekt nicht kann, ist uns für den persönlichen Gebrauch nicht verboten. Wir ersetzen die Distributions-Wi-Fi-Firmware in CentOS durch die entsprechende von den Broadcom-Entwicklern (dieselben verhassten binären Blobs ...). Dies ermöglicht insbesondere die Verwendung von Wechselstrom im Zugangspunktmodus.

WLAN-Firmware-Upgrade
Wir finden das Modell des Geräts und die aktuelle Firmware-Version heraus:

 # journalctl | grep $(basename $(readlink /sys/class/net/wlan0/device/driver)) Jan 01 04:00:03 router kernel: brcmfmac: F1 signature read @0x18000000=0x15264345 Jan 01 04:00:03 router kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006 Jan 01 04:00:03 router kernel: usbcore: registered new interface driver brcmfmac Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Mar 1 2015 07:29:38 version 7.45.18 (r538002) FWID 01-6a2c8ad4 Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 7.14.8 Compiler: 1.24.9 ClmImport: 1.24.9 Creation: 2014-09-02 03:05:33 Inc Data: 7.17.1 Inc Compiler: 1.26.11 Inc ClmImport: 1.26.11 Creation: 2015-03-01 07:22:34 

Wir sehen, dass die Firmware-Version 7.45.18 vom 01.03.2015 ist, und wir erinnern uns an die folgenden Zahlen: 43455 (brcmfmac43455-sdio.bin).

Laden Sie das aktuelle Bild von Raspbian herunter . Faule Leute können das Bild auf microSD schreiben und von dort die Dateien mit der Firmware abholen. Und Sie können die Root-Partition des Images unter Linux mounten und die benötigte von dort kopieren:

 # wget https://downloads.raspberrypi.org/raspbian_lite_latest # unzip -p raspbian_lite_latest > raspbian.img # fdisk -l raspbian.img Disk raspbian.img: 2 GiB, 2197815296 bytes, 4292608 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x17869b7d Device Boot Start End Sectors Size Id Type raspbian.img1 8192 532480 524289 256M c W95 FAT32 (LBA) raspbian.img2 540672 4292607 3751936 1.8G 83 Linux # mount -t ext4 -o loop,offset=$((540672 * 512)) raspbian.img /mnt # cp -fv /mnt/lib/firmware/brcm/*43455* ... '/mnt/lib/firmware/brcm/brcmfmac43455-sdio.bin' -> ... '/mnt/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob' -> ... '/mnt/lib/firmware/brcm/brcmfmac43455-sdio.txt' -> ... # umount /mnt 

Die resultierenden Firmware-Dateien für den Wi-Fi-Adapter müssen mit dem Ersatz der "Himbeere" im Verzeichnis / usr / lib / firmware / brcm / kopiert werden.

Wir starten den zukünftigen Router neu und lächeln eher:

 # journalctl | grep $(basename $(readlink /sys/class/net/wlan0/device/driver)) Jan 01 04:00:03 router kernel: brcmfmac: F1 signature read @0x18000000=0x15264345 Jan 01 04:00:03 router kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006 Jan 01 04:00:03 router kernel: usbcore: registered new interface driver brcmfmac Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Feb 27 2018 03:15:32 version 7.45.154 (r684107 CY) FWID 01-4fbe0b04 Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 9.10.105 Compiler: 1.29.4 ClmImport: 1.36.3 Creation: 2018-03-09 18:56:28 

Version: 7.45.154 vom 27.02.2018.

Und natürlich EPEL:

 # cat > /etc/yum.repos.d/epel.repo << EOF [epel] name=Epel rebuild for armhfp baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/ enabled=1 gpgcheck=0 EOF # yum clean all # rm -rfv /var/cache/yum # yum update 

4. Netzwerkkonfiguration und bevorstehende Herausforderungen


Wie oben vereinbart, ist die "Malinka" über eine "Leitung" mit dem lokalen Netzwerk verbunden. Angenommen, ein Anbieter bietet den Internetzugang genauso an: Eine Adresse in einem öffentlichen Netzwerk wird dynamisch von einem DHCP-Server ausgegeben (sie kann mit einem MAC verbunden werden). In diesem Fall reicht es nach der endgültigen Einrichtung der "Himbeere" aus, das Providerkabel daran anzuschließen, und alles ist fertig. Die Autorisierung mit systemd-networkd ist das Thema eines separaten Artikels und wird hier nicht berücksichtigt.

Die Wi-Fi-Schnittstelle (n) von Raspberry ist ein lokales Netzwerk, und der integrierte Ethernet-Adapter (eth0) ist extern. Wir nummerieren das lokale Netzwerk statisch, zum Beispiel: 192.168.0.0/24. Malinkas Adresse: 192.168.0.1. In einem externen Netzwerk (Internet) funktioniert ein DHCP-Server.

Das Problem der einheitlichen Benennung und der berühmte guatemaltekische Programmierer sind zwei Probleme, die auf alle warten, die an der Konfiguration von Netzwerkschnittstellen und -diensten in Systemd-Distributionen beteiligt sind.

Paralleles Chaos (lyrischer Exkurs)
Lennart Pottering hat sein Systemprogramm sehr gut gemacht. Dieses System startet andere Programme so schnell, dass sie, nachdem sie sich nicht vom Pfeifen des Schiedsrichters erholt haben, beim Start stolpern und fallen, ohne ihren Hindernislauf zu beginnen.

Aber im Ernst, die aggressive Parallelisierung der gestarteten Prozesse zu Beginn des systemd-OS ist eine Art „Eselbrücke“ für erfahrene serielle LSB-Treiber. Glücklicherweise stellt sich heraus, dass es einfach ist, dieses „parallele Chaos“ aufzuräumen, obwohl die Wahrheit nicht immer offensichtlich ist.

Wir erstellen zwei virtuelle Bridge-Schnittstellen mit konstanten Namen: lan und wan . Wir werden die Wi-Fi-Adapter mit dem ersten und eth0 der Himbeere mit dem zweiten "verbinden".

/etc/systemd/network/lan.netdev :

 [NetDev] Name=lan Kind=bridge 

/etc/systemd/network/lan.network :

 [Match] Name=lan [Network] Address=192.168.0.1/24 IPForward=yes 

/etc/systemd/network/wan.netdev :

 [NetDev] Name=wan Kind=bridge #MACAddress=xx:xx:xx:xx:xx:xx 

/etc/systemd/network/wan.network :

 [Match] Name=wan [Network] DHCP=ipv4 IPForward=yes 

IPForward = yes macht es überflüssig, über sysctl auf den Kernel hinzuweisen, um das Routing zu aktivieren.
MACAddress = auskommentieren und ggf. ändern.

Zuerst verbinden wir eth0. Denken Sie an das „Einheitlichkeitsproblem“ und verwenden Sie nur die MAC-Adresse dieser Schnittstelle, die Sie beispielsweise wie folgt herausfinden können:

 # cat /sys/class/net/eth0/address 

Erstellen Sie /etc/systemd/network/eth.network :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Network] Bridge=wan 

Löschen Sie die vorherige eth0-Konfigurationsdatei, starten Sie die "Himbeere" neu und erhalten Sie Netzwerkzugriff darauf (die IP-Adresse wird sich höchstwahrscheinlich ändern):

 # rm -fv /etc/systemd/network/eth0.network # reboot 

5. DNSMASQ


Für die Herstellung von Wi-Fi-Zugangspunkten wurde noch nichts Besseres als ein süßes Paar von dnsmasq + hostapd erfunden. Meiner Meinung nach.

Wenn jemand vergessen hat, dann ...
hostapd verwaltet Wi-Fi-Adapter (insbesondere wird es schwierig sein, sie mit dem virtuellen LAN der Himbeere zu verbinden). Es autorisiert und registriert drahtlose Clients.

dnsmasq - Konfiguriert den Netzwerkstapel von Clients: Stellt IP-Adressen, DNS-Server, ein Standard-Gateway und dergleichen bereit.

Wir beginnen mit dnsmasq:

 # yum install dnsmasq 

Vorlage /etc/resolv.conf :

 nameserver 1.1.1.1 nameserver 1.0.0.1 nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 77.88.8.8 nameserver 77.88.8.1 domain router.local search router.local 

Bearbeiten Sie es nach Ihren Wünschen.

Minimalistisch /etc/dnsmasq.conf :

 domain-needed bogus-priv interface=lan bind-dynamic expand-hosts domain=# dhcp-range=192.168.0.100,192.168.0.199,255.255.255.0,24h conf-dir=/etc/dnsmasq.d 

Die „Magie“ hier ist der bindendynamische Parameter, der den dnsmasq-Dämon anweist, auf das Erscheinen von interface = lan im System zu warten und nach dem Start nicht vor einem Angriff stolzer Einsamkeit in Ohnmacht zu fallen.

 # systemctl enable dnsmasq # systemctl start dnsmasq; journalctl -f 

6. HOSTAPD


Schließlich die magischen Hostapd-Konfigurationen. Ich habe keinen Zweifel, dass jemand diesen Artikel auf der Suche nach genau diesen geschätzten Zeilen liest.

Vor der Installation von hostapd müssen Sie sich mit dem „Einheitlichkeitsproblem“ befassen. Der integrierte WLAN-Adapter wlan0 kann seinen Namen leicht in wlan1 ändern, wenn zusätzliche USB-WLAN-Geräte angeschlossen werden. Daher werden wir die Namen der Schnittstellen folgendermaßen festlegen: Wir werden eindeutige Namen für (drahtlose) Adapter erstellen und diese an die MAC-Adressen binden.

Für den eingebauten Wi-Fi-Adapter, der immer noch wlan0 ist:

 # cat /sys/class/net/wlan0/address b8:27:eb:xx:xx:xx 

Erstellen Sie /etc/systemd/network/wl0.link :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Link] Name=wl0 

Jetzt werden wir sicher sein, dass wl0 das eingebaute Wi-Fi ist. Wir starten die "Himbeere" neu, um dies zu sehen.

Installieren:

 # yum install hostapd wireless-tools 

Konfigurationsdatei /etc/hostapd/hostapd.conf :

 ssid=rpi wpa_passphrase=1234567890 channel=36 country_code=US interface=wl0 bridge=lan driver=nl80211 auth_algs=1 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP macaddr_acl=0 hw_mode=a wmm_enabled=1 # N ieee80211n=1 require_ht=1 ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40] # AC ieee80211ac=1 require_vht=1 ieee80211d=0 ieee80211h=0 vht_capab=[MAX-AMSDU-3839][SHORT-GI-80] vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 

Ohne das GKChP für eine Minute zu vergessen, ändern wir die benötigten Parameter und überprüfen manuell die Leistung:

 # hostapd /etc/hostapd/hostapd.conf 

hostapd startet interaktiv und übersetzt seinen Status in die Konsole. Wenn keine Fehler vorliegen, können Clients, die den AC-Modus unterstützen, bereits mit dem Access Point verbunden werden. So stoppen Sie hostapd - Strg-C.

Hostapd muss weiterhin in den Systemstart einbezogen werden. Wenn Sie standardmäßig handeln (systemctl enable hostapd), können Sie nach dem nächsten Neustart einen "Daemon im Blut" eines Dämons mit der Diagnose " wl0-Schnittstelle nicht gefunden " erhalten. Infolge des "parallelen Chaos" landete hostapd schneller als der Kernel einen drahtlosen Adapter gefunden hatte.

Das Internet ist voll von Medikamenten: vom erzwungenen Timeout vor dem Start des Dämons (für einige Minuten) bis zu einem anderen Dämon, der das Erscheinungsbild der Benutzeroberfläche überwacht und das Hostpad (neu) startet. Die Lösungen funktionieren ziemlich gut, sind aber furchtbar hässlich. Wir bitten das große System um Hilfe bei seinen "Zielen" und " Aufgaben ", "Abhängigkeiten".

Kopieren Sie die Distributionsdienstdatei nach /etc/systemd/system/hostapd.service :

 # cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system 

und bringen Sie seinen Inhalt in die folgende Form:

 [Unit] Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator After=sys-subsystem-net-devices-wl0.device BindsTo=sys-subsystem-net-devices-wl0.device [Service] Type=forking PIDFile=/run/hostapd.pid ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B [Install] WantedBy=sys-subsystem-net-devices-wl0.device 

Die Magie der aktualisierten Servicedatei besteht darin, hostapd dynamisch an ein neues Ziel zu binden - die wl0-Schnittstelle. Wenn die Schnittstelle angezeigt wird, wird der Dämon gestartet und beim Verschwinden gestoppt. Und alles online - ohne das System neu zu starten. Diese Technik ist besonders nützlich, wenn Sie eine Verbindung zum USB-WLAN-Adapter "Himbeere" herstellen.

Jetzt können Sie:

 # systemctl enable hostapd # reboot 

7. IPTABLES


"Shta ???" © Ja, ja! Kein systemd . Keine neuen Mähdrescher (in Form von Firewalld ), die letztendlich das Gleiche tun.

Wir verwenden die guten alten iptables , deren Dienste nach ihrem Start Netzwerkregeln in den Kernel hochladen und leise herunterfahren, ohne resident zu bleiben und ohne Ressourcen zu verbrauchen. Systemd hat eine elegante IPMasquerade = , aber wir werden iptables weiterhin mit Adressübersetzung (NAT) und Firewall betrauen.

Installieren:

 # yum install iptables-services # systemctl enable iptables ip6tables 

Ich bevorzuge es, die iptables-Konfiguration als Skript zu speichern (Beispiel):

 #!/bin/bash # # Disable IPv6 # ip6tables --flush ip6tables --delete-chain ip6tables --policy INPUT DROP ip6tables --policy FORWARD DROP ip6tables --policy OUTPUT DROP ip6tables-save > /etc/sysconfig/ip6tables systemctl restart ip6tables # # Cleaning # iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # # Loopback, lan # iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i lan -j ACCEPT # # Ping, Established # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # # NAT # iptables -t nat -A POSTROUTING -o wan -j MASQUERADE # # Saving # iptables-save > /etc/sysconfig/iptables systemctl restart iptables 

Wir führen das obige Skript aus und verlieren die Fähigkeit, neue verkabelte SSH-Verbindungen mit dem "Malinka" herzustellen. Richtig, wir haben einen WLAN-Router entwickelt, auf den "über das Internet" standardmäßig der Zugriff verboten ist - jetzt nur noch "über die Luft". Wir verbinden das Kabel des Anbieters mit Ethernet und beginnen zu surfen!

8. Bonus: + 2,4 GHz


Als ich den ersten Himbeer-Router gemäß der oben beschriebenen Zeichnung zusammenbaute, fand ich in meinem Haushalt eine Reihe von Geräten, bei denen Wi-Fi aufgrund ihrer Designbeschränkungen die "Himbeere" überhaupt nicht sehen konnte. Die Neukonfiguration des Routers für 802.11b / g / n war unsportlich, da die maximale Geschwindigkeit "über Funk" in diesem Fall 40 Mbit / s nicht überschritt und mein bevorzugter Internetprovider mir 100 (über Kabel) anbietet.

Tatsächlich wurde bereits eine Lösung für das Problem erfunden: eine zweite Wi-Fi-Schnittstelle mit 2,4 GHz und ein zweiter Zugangspunkt. Am nächsten Stand kaufte ich nicht die erste, sondern die zweite USB-WLAN-Pfeife, die mir einfiel. Der Verkäufer wurde von Fragen zum Chipsatz, zur Kompatibilität mit Linux-ARM-Kernen und zur Möglichkeit, im AP-Modus zu arbeiten, gequält (er startete zuerst).

Wir konfigurieren die "Pfeife" analog zum eingebauten Wi-Fi-Adapter.

Benennen Sie es zunächst in wl1 um :

 # cat /sys/class/net/wlan0/address b0:6e:bf:xx:xx:xx 

/etc/systemd/network/wl1.link :

 [Match] MACAddress=b0:6e:bf:xx:xx:xx [Link] Name=wl1 

Wir werden die Verwaltung der neuen Wi-Fi-Schnittstelle einem separaten Hostapd-Daemon anvertrauen, der abhängig vom Vorhandensein einer streng definierten „Pfeife“ im System gestartet und gestoppt wird: wl1.

Konfigurationsdatei /etc/hostapd/hostapd2.conf :

 ssid=rpi2 wpa_passphrase=1234567890 #channel=1 #channel=6 channel=11 interface=wl1 bridge=lan driver=nl80211 auth_algs=1 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP macaddr_acl=0 hw_mode=g wmm_enabled=1 # N ieee80211n=1 require_ht=1 ht_capab=[HT40][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40] 

Der Inhalt dieser Datei hängt direkt vom Modell des USB-WLAN-Adapters ab, sodass Sie beim einfachen Kopieren / Einfügen im Stich gelassen werden können.

Kopieren Sie die Distributionsdienstdatei nach /etc/systemd/system/hostapd2.service :

 # cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service 

und bringen Sie seinen Inhalt in die folgende Form:

 [Unit] Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator After=sys-subsystem-net-devices-wl1.device BindsTo=sys-subsystem-net-devices-wl1.device [Service] Type=forking PIDFile=/run/hostapd2.pid ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd2.conf -P /run/hostapd2.pid -B [Install] WantedBy=sys-subsystem-net-devices-wl1.device 

Es bleibt eine neue Instanz von hostapd einzuschließen:

 # systemctl enable hostapd2 

Das ist alles! Ziehen Sie die Pfeife und die Himbeere selbst und sehen Sie sich die drahtlosen Netzwerke an.

Und schließlich möchte ich vor der Qualität des USB-WLAN-Adapters und des Raspberry-Netzteils warnen. Verbunden mit "einer heißen Pfeife", kann es manchmal zu einem "Himbeer-Hang" aufgrund kurzfristiger elektrischer Probleme kommen.

Source: https://habr.com/ru/post/de458994/


All Articles