Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)

Nell'articolo Raspberry Pi + CentOS = Wi-Fi Hotspot (o router malva con cappello rosso) Ho parlato del modo di trasformare il "raspberry" in un punto di accesso wireless utilizzando il sistema operativo CentOS. Costruendo il mio router domestico seguendo questo schema, ho soddisfatto il mio ego creativo e ho ottenuto tranquillità riguardo a un elemento critico della mia infrastruttura accogliente. Tuttavia, la sensazione di incompletezza della soluzione e il mio perfezionismo interiore non mi lasciavano in pace: "un risultato imperfetto non ha diritto di esistere". Il pensiero che "l'ideale può e deve essere raggiunto" non mi ha mai abbandonato.

Un giorno, su uno dei forum tematici, mi sono imbattuto in una discussione sulla architettura delle attuali distribuzioni di sistemi operativi per il "raspberry" (aarch64 vs armhfp): quali sistemi operativi a 64 bit possono essere installati e funzionare sulla versione Raspberry 3++?

La mia amata CentOS per architettura ARM di "Userland" non si affrettava a passare all'ultima versione del kernel e a diventare a 64 bit. Inoltre, il repository EPEL, attivato chissà da dove senza firma digitale, era un incubo nei miei sogni inquieti...

Essendo un sostenitore delle distribuzioni basate su RPM, ho scoperto con sorpresa che, nelle discussioni sui sistemi operativi per il "raspberry", era completamente dimenticata Fedora! E questo nonostante il suo rilascio
dalla versione 28 supporti ufficialmente Raspberry Pi 3B+ in versione a 64 bit!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)
In questo articolo parlerò del metodo di installazione Fedora (aarch64) con Raspberry Pi 3 Model B+ in in versione extra minimale. Faccio una breve panoramica delle caratteristiche per attivare un punto di accesso Wi-Fi, emerse dall'esperienza con la mia configurazione precedente su CentOS 7.

0. Cosa serve

Tutto ciò che è stato menzionato nell'articolo precedente:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (in seguito potresti "trasferire" il sistema su un'unità da 2GB);
  • Postazione di lavoro con Linux e lettore di schede microSD;
  • Collegamento di rete cablato tra il "raspberry" e la postazione di lavoro con Linux (in questo caso non serviranno monitor e tastiera aggiuntivi per la configurazione), accesso a Internet da entrambi i dispositivi;
  • Competenze avanzate in Linux (sapere e non avere paura: parted, dd e mkfs).

Analogamente all'iterativa LFS-compilazione del proprio Linux, utilizzerò l'immagine del sistema operativo Fedora, e poi su questa base creerò un sistema minimale (senza "compilazione da sorgente").

1. Installazione della distribuzione originale

Coordinate dell'immagine raw del sistema in rete:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Dopo averlo registrato su microSD e prima di iniziare ad usarlo, è necessario:

  1. Espandere il "root" del filesystem (3° partizione, ext4)
    parted /dev/mmcblk0 resizepart 3 100%
    e2fsck -f /dev/mmcblk0p3; resize2fs /dev/mmcblk0p3; e2fsck -f /dev/mmcblk0p3
    for i in 1 2 3; do mkdir -p /mnt/$i; mount /dev/mmcblk0p$i /mnt/$i; done
    

  2. Disabilitare SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Rimuovere il Maestro della configurazione iniziale:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Abilitare l'accesso SSH:
    mkdir -p /mnt/3/root/.ssh
    cp -fv ~/.ssh/id_rsa.pub /mnt/3/root/.ssh/authorized_keys
    sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /mnt/3/etc/ssh/sshd_config
    

Adesso è possibile avviare il "raspberry" da microSD e connettersi ad esso tramite rete.

L'avviamento a freddo richiede circa un minuto e mezzo. Specifiche del sistema dopo l'avvio:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)

rpm -qa | wc -l
444

2. Costruzione di un sistema minimale

Sfortunatamente, il "distro minimo" degli sviluppatori si rivela non essere dei più leggeri in termini di consumo di risorse. È possibile rendere l'immagine di sistema ancora più piccola.

Per fare ciò, sul "raspberry" è necessario eseguire uno script:

#!/bin/bash

. /etc/os-release
P=$(mktemp --directory $(pwd)/$ID-$VERSION_ID.XXX)

dnf --installroot=$P --releasever=$VERSION_ID --setopt=install_weak_deps=false 
--assumeyes install  
    bcm283x-firmware 
    dnf              
    grub2-efi-aa64   
    kernel           
    openssh-server   
    shim-aa64

for f in /boot/efi/EFI/fedora/grub.cfg 
         /boot/efi/EFI/fedora/grubenv  
         /boot/efi/rpi3-u-boot.bin     
         /etc/default/grub             
         /etc/fstab
do
  cp -fv $f $P$f
done

rm  -fv $P/dev/*
rm -rfv $P/var/cache/dnf

echo "--------------------------------------------------------------------------------"
du -hs $P

Dopo l'esecuzione dello script, nella directory corrente verrà creato un sottodirectory ($P) con il contenuto della root della nuova edizione minimale del sistema operativo. Puoi spegnere il "raspberry" e riportare la microSD alla postazione di lavoro Linux.

3. Installazione del sistema minimale

L'installazione consiste nella copia dei file dell'immagine minimale del sistema (ottenuta nel passo precedente) sulla microSD appositamente preparata nelle directory corrispondenti.

Bastano una scheda da 2GB e due partizioni su di essa:

  1. /boot/efi — EFI+FAT32, di avvio, 100MB;
  2. / (root) — EXT4, tutto lo spazio rimanente.

Dopo aver preparato la microSD e copiato i file su di essa, è necessario:

  • correggere il boot del sistema;
  • attivare la rete;
  • configurare l'accesso SSH.

La correzione del boot consiste nella sostituzione degli UUID delle partizioni nei file:

microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv

e il parametro saved_entry= nel secondo file

Nel file:

microSD:/etc/fstab

puoi trovare i valori obsoleti, mentre i valori attuali (correnti) sono nei risultati del comando:

blkid | grep mmcblk | sort

Dopo la sostituzione, è necessario anche correggere il contenuto fstab sulla microSD, affinché i punti di montaggio corrispondano ai nuovi UUID delle partizioni.

La funzionalità di rete al primo avvio del "raspberry" può essere attivata con un piccolo "escamotage" — creando un link (schematicamente):

ln -s /usr/lib/systemd/system/systemd-networkd.service 
  microSD:/etc/systemd/system/multi-user.target.wants

e un file:

mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF

Dopo un avvio riuscito — sistemare l'avvio systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

L'accesso superutente via ssh si configura in modo simile al punto 1.

Se fatto con cura e senza errori, è possibile spostare la microSD nel "Raspberry Pi" e iniziare a lavorare con un sistema operativo a 64 bit in versione estremamente minimale.

4. Sistema pronto

L'immagine del sistema pronto, creata secondo le istruzioni sopra riportate, può essere scaricata al seguente link:
Fedora-Tiny-31-5.5.7-200.aarch64

Si tratta di un archivio contenente due file: uno script di installazione e un TGZ con i file del sistema operativo. L'archivio deve essere estratto su una workstation Linux, inserire la microSD (una scheda da 2GB è sufficiente) e avviare lo script con il parametro — il nome del dispositivo:

./install /dev/mmcblk0

Fate attenzione!

Senza alcun preavviso, il dispositivo verrà formattato e su di esso verrà installato il sistema operativo.

Dopo che lo script è stato eseguito senza errori, la scheda può essere spostata nel "Raspberry Pi" e utilizzata: ottenere tramite dhcp, la password è "1".

Il sistema è stato ripulito da tutti gli ID e le chiavi, il che rende ogni nuova installazione unica.

Ripeto, il sistema è minimale! Quindi non spaventatevi: DNF è presente, per il suo corretto funzionamento sarà necessario "creare" il giusto /etc/resolv.conf.

L'accensione a freddo del "Raspberry Pi" richiede circa 40 secondi. Specifiche del sistema dopo il boot:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)

rpm -qa | wc -l
191

5. Wi-Fi

Mi soffermerò brevemente sulle caratteristiche dell'implementazione di un punto di accesso Wi-Fi. Per dettagli specifici, puoi fare riferimento al mio precedente articolo.

EPEL non sarà più necessario — tutti i pacchetti sono contenuti nei repository ufficiali.

Probabilmente sarebbe meglio rinunciare a dnsmasq, poiché in Fedora, a differenza di CentOS, c'è una versione sufficientemente recente di systemd-networkd, che ha normali server DHCP/DNS integrati. Ma il fatto che in RHEL8 gli sviluppatori abbiano rinunciato al supporto del stack di rete per qualsiasi cosa tranne NM, non infonde fiducia nel futuro luminoso del progetto (scellerati). In sintesi, non ho provato.

In seguito, i driver attuali dell'adattatore Wi-Fi integrato non devono essere "rubati" dalla distribuzione Raspbian, ma possono essere scaricati direttamente da github.

Ecco come appaiono i file di firmware Broadcom sulla mia "Raspberry Pi" (schematicamente):

ls /usr/lib/firmware/brcm | grep 43455

 [612775] brcmfmac43455-sdio.bin
  [14828] brcmfmac43455-sdio.clm_blob
[symlink] brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt -> brcmfmac43455-sdio.txt
   [2099] brcmfmac43455-sdio.txt

Senza di essi non sarà possibile utilizzare il 5GHz/AC.

Per quanto riguarda il numero e i nomi delle interfacce. Ora consiglio a tutti di non ricorrere senza necessità ai "servizi" degli switch software (bridge), che introducono un carico significativo nello stack di rete e limitano il routing. Se non si prevede di utilizzare più adattatori wireless, è consigliabile utilizzare solo interfacce fisiche. Ne ho due Wi-Fi, quindi unisco solo queste in un ponte software (anche se si potrebbe fare a meno di questo, guardando diversamente la configurazione di hostapd).

E mi piace rinominare le interfacce.

Per fare ciò in Fedora è necessario creare un collegamento simbolico:

/etc/systemd/network/99-default.link -> /dev/null

e così sarà possibile dare nomi significativi senza dover frugare in udev, ma solo utilizzando gli strumenti di systemd-networkd.

Ecco come vengono chiamati, ad esempio, gli adattatori di rete nel mio router:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stato SCONOSCIUTO gruppo default qlen 1000

2: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel stato UP gruppo default qlen 1000

3: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stato UP gruppo default qlen 1000

4: int: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan stato UP gruppo default qlen 1000

5: ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master lan stato UP gruppo default qlen 1000

  • -int — adattatore integrato, ext — adattatori Wi-Fi esterni (USB) raggruppati in "bridge" lan;
  • wan — adattatore Ethernet a cui è collegato Internet.

Notato? fq_codel — è davvero una cosa eccezionale. Insieme a un kernel Linux aggiornato crea veri miracoli nella banda wireless: un intenso download di torrent non porterà a un'improvvisa degradazione della velocità per i vicini. Anche l'IP-TV domestico che funziona "in modalità wireless" non "si scompone" e non "fa pause" affatto!

Ha subito piccole modifiche il file di servizio del demone hostapd.

Ora appare così (per l'adattatore integrato):

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=network.target
BindsTo=sys-subsystem-net-devices-int.device

[Service]
Type=forking
PIDFile=/run/hostapd-int.pid
#ExecStartPre=/usr/sbin/iw dev int set power_save off
ExecStart=/usr/sbin/hostapd /path/to/hostapd-int.conf -P /run/hostapd-int.pid -B

[Install]
RequiredBy=sys-subsystem-net-devices-int.device

E il "magico" hostapd-int.conf per il funzionamento a 5GHz/AC:

ssid=rpi
wpa_passphrase=FedoRullezZ

# 5180 MHz  [36] (20.0 dBm)
# 5200 MHz  [40] (20.0 dBm)
# 5220 MHz  [44] (20.0 dBm)
# 5240 MHz  [48] (20.0 dBm)
# 5745 MHz [149] (20.0 dBm)
# 5765 MHz [153] (20.0 dBm)
# 5785 MHz [157] (20.0 dBm)
# 5805 MHz [161] (20.0 dBm)
# 5825 MHz [165] (20.0 dBm)

channel=36
#channel=149

# channel+6
# http://blog.fraggod.net/2017/04/27/wifi-hostapd-configuration-for-80211ac-networks.html

vht_oper_centr_freq_seg0_idx=42
#vht_oper_centr_freq_seg0_idx=155

country_code=US

interface=int
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=[HT40+][SHORT-GI-40][SHORT-GI-20]

# AC
ieee80211ac=1
ieee80211d=0
ieee80211h=0
vht_oper_chwidth=1
require_vht=1
vht_capab=[SHORT-GI-80]

Un po' di "Photoshop", fatto con il mio "Ericsson A1018s":

(connessione a Internet — 100 Mbit/sec)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)
E in conclusione una breve FAQ.

6. FAQ

6.1 Perché realizzare un router Wi-Fi su Raspberry?

Potremmo semplicemente rispondere che è "interessante provare e tutto il resto".

Ma in realtà, a mio avviso, il tema è piuttosto serio. Nell'era di Internet "carnivoro", acquistare un router in negozio e rimanere prigionieri del suo produttore è una prospettiva piuttosto triste. Sedersi con CVE o un backdoor incorporato è qualcosa che molti hanno già compreso.

Naturalmente, si può migrare a firmware WRT da appassionati. La fiducia in essi è probabilmente maggiore, ma se non si vuole dipendere nemmeno da loro, l'unica soluzione è realizzare qualcosa di proprio. Idealmente - un computer completo per avere la possibilità di implementare qualsiasi cosa. In termini di routing, ovviamente.

Quindi, la scelta della "malina" è un semplice movimento economico: un vero computer e, al contempo, economico. Anche se, forse, anche essa ha le sue "ambiguità" interne.

6.2 Ma la Raspberry non è un "router economico": lenta e con una sola porta Ethernet!

Come router Wi-Fi domestico, la "malina" mi soddisfa più che sufficientemente. Ho già parlato della velocità "wireless" sopra. E una sola Ethernet, beh, in un prodotto simile di Apple è così anche!

E se ci pensiamo seriamente, ovviamente vorrei avere di più. E nonostante che tutti i miei dispositivi siano connessi senza fili, a volte è necessaria una connessione cablata. Per tali casi, ho riservato un "hub mobile":

dispositivo - tipo questoRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (o il router lampone con un cappello blu)

6.3 Se questo è un router, non si parla di "tuning" TCP/IP, ed è importante!

Oltre alla configurazione dello stack di rete (tcp_fastopen, YeAH e simili), in questo e nel precedente articolo non sono stati rivelati altri dettagli, in particolare il processo di preparazione della microSD per un uso ottimale (anche se l'installatore tenta di formattare la scheda di memoria in modo ingegnoso). Il processo di miglioramento è infinito, bisogna solo fermarsi in tempo.

6.4 Perché Fedora?

Perché mi piace! Fedora è "mainstream" - un sistema per geek, per i quali, di fatto, è dedicato questo articolo. Al momento della scrittura, è probabilmente l'unico sistema operativo che per Raspberry in versione 64-bit è ufficialmente supportato da un gran numero di sviluppatori (da cui non riesco a ricevere) il kernel 5.6).

6.5 E il Bluetooth funziona? Come va con video/suono/GPIO?

Non lo so. L'articolo riguarda l'installazione minima del sistema e il suo successivo utilizzo come router Wi-Fi.

6.6 Perché tutti gli articoli su CentOS/Fedora/RedHat iniziano con la disattivazione di SELinux?

Perché il sistema è minimo, non ha nemmeno un firewall e strumenti per configurarlo. Chi ha bisogno può installare tutto il necessario aggiuntivamente.

6.7 Non si può usare il sistema, non si può cambiare la password - non c'è passwd. Non c'è ping, non c'è niente!

DNF. O questo metodo di installazione non è per te - utilizza una distribuzione dei sviluppatori.

6.8 E dove è SWAP? Non posso vivere senza!

Davvero? Beh, ok:

fallocate -l 1G /swap
chmod -v 0600 /swap
mkswap -f /swap
swapon -v /swap
grep "/swap" /etc/fstab || echo "/swap swap swap defaults 0 0" >> /etc/fstab

6.9 Vorrei scaricare subito un'immagine pronta con il punto di accesso Wi-Fi già configurato!

Per preparare un'installazione "per tutti" ci vorrà un certo tempo e sforzi. Se (per caso!) a qualcuno questo sembrerà davvero interessante e necessario - scrivete, inventeremo qualcosa.

Su questo - concludo.

Auguro a tutti una navigazione sicura e il massimo controllo sull'infrastruttura!

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster