Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)

En el artículo Raspberry Pi + CentOS = Punto de acceso Wi-Fi (o enrutador frambuesa con un sombrero rojo) Hablé sobre cómo convertir la "frambuesa" en un punto de acceso inalámbrico utilizando el sistema operativo CentOS. Al construir mi enrutador doméstico según este esquema, satisfice mi ego creativo y obtuve tranquilidad por un elemento crítico de mi acogedora infraestructura. Sin embargo, la sensación de que la solución no estaba completa y mi perfeccionismo interno no me dejaban en paz: "un resultado imperfecto no tiene derecho a existir". La idea de que "el ideal puede y debe alcanzarse" no me abandonaba ni un instante.

Y un día, en uno de los foros temáticos, me encontré con una discusión sobre la compatibilidad de los sistemas operativos existentes para la "frambuesa" (aarch64 frente a armhfp): ¿qué sistemas operativos de 64 bits pueden instalarse y funcionar en la Raspberry versión 3++?

Mi querido CentOS para la arquitectura ARM de "Userland" no se apresuraba a actualizarse a la última versión del núcleo y convertirse en 64 bits. Y el repositorio EPEL, que se conectó Dios sabe de dónde sin firma digital, se convirtió en una pesadilla en mi inquieto sueño...

Siendo un defensor de las distribuciones basadas en RPM, descubrí con sorpresa que en las discusiones sobre sistemas operativos para la "frambuesa" se había olvidado por completo Fedora! Y eso a pesar de que su lanzamiento
desde la versión 28 oficialmente soporta Raspberry Pi 3B+ en ejecución de 64 bits!

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)
En este artículo, hablaré sobre cómo instalar Fedora (aarch64) en Raspberry Pi 3 Modelo B+ en en una versión mínimamente extra. Haré un breve resumen sobre las características de la configuración del punto de acceso Wi-Fi, identificadas a partir de la experiencia con mi configuración anterior en CentOS 7.

0. Qué se necesitará

Todo lo mismo que se enumeró en el artículo anterior:

  • Raspberry Pi 3 Modelo B+;
  • microSD >= 4GB (más tarde se puede "mover" el sistema a un dispositivo de 2GB);
  • Estación de trabajo con Linux y lector de tarjetas microSD;
  • Conexión por cable entre la "frambuesa" y la estación de trabajo con Linux (en este caso no se necesitarán monitor y teclado adicionales para la configuración), acceso a Internet desde ambos dispositivos;
  • Habilidad avanzada en Linux (saber y no tener miedo: parted, dd y mkfs).

Al igual que en una compilación iterativa deLFS, se utilizará una imagen de distribución de Fedora, y luego sobre su base se creará un sistema mínimo (sin "compilación desde el código fuente").

1. Instalación de la distribución original

Las coordenadas de la imagen raw del sistema en la red:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Después de grabarlo en la microSD y antes de comenzar a usarlo, necesita:

  1. Expandir la raíz del sistema de archivos (3er partición, 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. Desactivar SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Eliminar el Asistente de configuración inicial:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Permitir acceso por 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
    

Ahora se puede arrancar la 'raspberry' desde la microSD y conectarse a ella a través de la red.

El arranque en frío toma alrededor de un minuto y medio. Especificaciones del sistema después del arranque:

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)

rpm -qa | wc -l
444

2. Construcción del sistema mínimo

Desafortunadamente, el "distribución mínima" de los desarrolladores resulta ser bastante exigente en el consumo de recursos. La imagen del sistema puede hacerse aún más pequeña.

Para ello, se necesita ejecutar un script en la 'raspberry':

#!/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

Después de ejecutar el script, se creará un subdirectorio en el directorio actual ($P) con el contenido de la raíz de la nueva edición mínima del sistema operativo. Se puede apagar la 'raspberry' y devolver la microSD a la estación de trabajo de Linux.

3. Instalación del sistema mínimo

La instalación consiste en copiar los archivos de la imagen mínima del sistema operativo (obtenida en el paso anterior) en la microSD especialmente preparada en los directorios correspondientes.

Es suficiente con una tarjeta de 2GB y dos particiones en ella:

  1. /boot/efi — EFI+FAT32, de arranque, 100MB;
  2. / (raíz) — EXT4, todo el espacio restante.

Después de preparar la microSD y copiar los archivos en ella, necesita:

  • reparar el arranque del sistema operativo;
  • activar la red;
  • configurar el acceso por ssh.

La reparación del arranque consiste en reemplazar los UUID de las particiones en los archivos:

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

y el parámetro saved_entry= en el último archivo

En el archivo:

microSD:/etc/fstab

se pueden encontrar los valores antiguos, y los actuales (valores válidos) — en la salida del comando:

blkid | grep mmcblk | sort

Después de la sustitución, también se debe ajustar el contenido fstab en la microSD, para que los puntos de montaje correspondan a los nuevos UUID de las particiones.

La conectividad de red en el primer arranque de la 'raspberry' se puede lograr con un pequeño 'parche': crear un enlace (esquemáticamente):

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

y el archivo:

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

Después de una carga exitosa, ordenar el inicio systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

El acceso de superusuario por SSH se configura de forma similar al punto 1.

Haciendo todo de manera cuidadosa y sin errores, se puede volver a colocar la microSD en la 'frambuesa' y comenzar a trabajar con un sistema operativo de 64 bits en una versión ultraminimal.

4. Sistema listo

La 'imagen' del sistema listo, creada según las instrucciones anteriores, se puede descargar a través del enlace:
Fedora-Tiny-31-5.5.7-200.aarch64

Este será un archivo comprimido que contiene dos archivos: un script de instalación y un TGZ con los archivos del sistema operativo. Hay que descomprimir el archivo en una estación de trabajo Linux, insertar la microSD (una tarjeta de 2GB es suficiente) y ejecutar el script con el parámetro — el nombre del dispositivo:

.\/install \/dev\/mmcblk0

¡Tengan cuidado!

Sin ninguna advertencia, el dispositivo será formateado y se le instalará el sistema operativo.

Después de que el script se ejecute sin errores, se puede volver a colocar la tarjeta en la 'frambuesa' y usarla: capturando a través de DHCP, la contraseña es ‘1’.

El sistema está libre de IDs y claves, lo que hace que cada nueva instalación sea única.

Reitero, el sistema es mínimo¡Así que no se asusten: DNF está disponible, para que funcione tendrás que 'crear' un correcto /etc/resolv.conf.

El arranque en frío de la 'frambuesa' tarda alrededor de 40 segundos. Especificaciones del sistema después de cargar:

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)

rpm -qa | wc -l
191

5. Wi-Fi

Me detendré un momento en las características de la implementación del punto de acceso Wi-Fi. Para más detalles, se puede consultar mi anterior el artículo.

EPEL ya no es necesario; todos los paquetes están disponibles en los repositorios oficiales.

Tal vez habría sido mejor prescindir de dnsmasq, ya que en Fedora, a diferencia de CentOS, hay una versión bastante reciente de systemd-networkd, que tiene servidores DHCP/DNS integrados adecuados. Pero el hecho de que en RHEL8 los desarrolladores renunciaran al soporte de la pila de red por cualquier cosa que no sea NM, no inspira confianza en el futuro brillante del proyecto (canallas). En resumen, no lo he probado.

A continuación, los controladores actuales del adaptador Wi-Fi integrado se pueden descargar directamente en lugar de 'robarlos' del distro Raspbian desde github.

Así se ven en mi 'frambuesa' los archivos de firmware de Broadcom (de manera esquemática):

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

Sin ellos no es posible 5GHz/AC.

En cuanto a la cantidad y nombres de interfaces. Ahora ya le recomiendo encarecidamente a todos que sin necesidad no recurran a los "servicios" de conmutadores de software (puente), que introducen una carga significativa en la pila de red y afectan la enrutación. Si no se planean varios adaptadores inalámbricos, solo se deben usar interfaces físicas. Yo tengo dos Wi-Fi, por lo que solo las combino en un puente de software (aunque se puede hacer sin esto, considerando de otra manera la configuración de hostapd).

Y me gusta renombrar las interfaces.

Para ello, en Fedora, hay que crear un enlace simbólico:

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

y entonces se podrán dar nombres significativos sin meterse en udev, utilizando solo las herramientas de systemd-networkd.

Así es como se llaman, por ejemplo, los adaptadores de red en mi enrutador:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: wan:  mtu 1500 qdisc fq_codel state UP group default qlen 1000

3: lan:  mtu 1500 qdisc noqueue state UP group default qlen 1000

4: int:  mtu 1500 qdisc fq_codel master lan state UP group default qlen 1000

5: ext:  mtu 1500 qdisc mq master lan state UP group default qlen 1000

  • int — integrado, ext — adaptadores Wi-Fi externos (USB), reunidos en un "puente" lan;
  • wan — adaptador Ethernet al que está conectado Internet.

¿Lo notaron? fq_codel — realmente es algo impresionante. Junto con el nuevo núcleo de Linux, están logrando verdaderas maravillas en la banda inalámbrica: una intensa descarga por torrent no provocará una degradación repentina de la velocidad para los vecinos. ¡Incluso la IPTV doméstica que funciona "por aire" no se "descompone" ni se "tartamudea" en absoluto con un canal congestionado!

El archivo de servicio del demonio hostapd.

Ahora se ve así (tomando como ejemplo el adaptador integrado):

[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

Y el "mágico" hostapd-int.conf para operar en 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 poco de "Photoshop" hecho con mi "Ericsson A1018s":

(conexión a Internet — 100Mbit/s)Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)
Y para concluir, una pequeña FAQ.

6. FAQ

6.1 ¿Por qué hacer un router Wi-Fi en Raspberry?

Se podría responder simplemente que "es interesante probar y ya está".

Pero en realidad, creo que el tema es bastante serio. En la época de Internet "sangriento", comprar un router en la tienda y quedar a merced de su fabricante es una perspectiva bastante desalentadora. Permanecer con un CVE o con un backdoor integrado ya muchos entienden que no es aceptable.

Por supuesto, se puede migrar a firmware WRT de entusiastas. La confianza en ellos es probablemente mayor, pero si no se quiere depender de ellos, entonces solo queda crear un producto propio. Idealmente, una computadora completa para la posibilidad de implementar cualquier cosa en ella. En términos de routing, por supuesto.

Por lo tanto, la elección de la "frambuesa" es un movimiento puramente económico: una computadora real y, además, económica. Aunque, tal vez, también con sus "dilemas" internos.

6.2 Pero la Raspberry no es un "superrouter": ¡lenta y con un solo puerto Ethernet!

Como router Wi-Fi doméstico, la "frambuesa" me satisface más que suficiente. Ya mencioné la velocidad "inalámbrica" arriba. Y tener solo un Ethernet, bueno, en un producto similar de Apple es prácticamente lo mismo.

Y hablando en serio, sí que desearía más. Y a pesar de que en mi hogar todos los dispositivos están conectados de forma inalámbrica, a veces aún se requiere conexión por cable. Para esos casos, tengo reservado un "hub móvil":

un dispositivo como esteRaspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador frambuesa con sombrero azul)

6.3 Si esto es un router, entonces no se ha dicho nada sobre el "tuning" de TCP/IP, ¡que es importante!

Además de configurar la pila de red (tcp_fastopen, YeAH, etc.), este y el artículo anterior no abordan otros matices, en particular, el proceso de preparación de microSD para un uso óptimo (aunque el instalador intenta formatear la tarjeta de memoria de una manera astuta). El proceso de perfeccionamiento es infinito, solo hay que saber cuándo parar.

6.4 ¿Por qué Fedora?

¡Porque me gusta! Fedora es "mainstream" — un sistema para geek, para quienes, de hecho, está destinado este artículo. En el momento de escribir, quizás la única OS que para Raspberry en una versión de 64 bits es oficialmente respaldada por un considerable número de desarrolladores (de los cuales no tengo noticias). núcleo 5.6).

6.5 ¿Funciona Bluetooth? ¿Qué tal el video/audio/GPIO?

No lo sé. El artículo es sobre la instalación mínima del sistema y su uso posterior como enrutador Wi-Fi.

6.6 ¿Por qué todos los artículos sobre CentOS/Fedora/RedHat comienzan con la desactivación de SELinux?

Porque el sistema es mínimo, ni siquiera hay firewall ni utilidades para configurarlo. Quien lo necesite, puede instalar todo lo necesario adicionalmente.

6.7 ¡No se puede usar el sistema, no se puede cambiar la contraseña — no hay passwd. No hay ping, ¡no hay nada!

Hay DNF. O tal vez esta opción de instalación no sea para ti — usa la distribución de los desarrolladores.

6.8 ¿Y dónde está SWAP? ¡No puedo vivir sin él!

¿De verdad? Bueno, está bien:

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 ¡Me gustaría descargar una imagen lista con el punto de acceso Wi-Fi configurado!

Preparar el instalador "para todos" requerirá algo de tiempo y esfuerzo. Si (de repente) a alguien realmente le parece interesante y necesario, escríbeme, pensaremos en algo.

Con esto, terminaré.

¡Les deseo a todos una navegación segura y el máximo control sobre la infraestructura!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster