Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)

o artigo Raspberry Pi + CentOS = ponto de acesso Wi-Fi (ou roteador framboesa com chapéu vermelho) Falei sobre uma maneira de transformar um Raspberry em um ponto de acesso sem fio usando o sistema operacional CentOS. Ao montar meu roteador doméstico de acordo com este desenho, satisfiz meu ego criativo e recebi um impulso de tranquilidade para um elemento crítico de minha infraestrutura aconchegante. Porém, a sensação de incompletude da solução e o perfeccionismo interno me assombravam: “um resultado de trabalho imperfeito não tem direito de existir”. O pensamento de que “o ideal pode e deve ser alcançado” não me abandonou por um minuto.

E então um dia, em um dos fóruns temáticos, me deparei com uma discussão sobre a profundidade de bits dos sistemas operacionais existentes para Raspberry (aarch64 vs armhfp): qual sistema operacional de 64 bits pode, em princípio, caber e funcionar no Raspberry versão 3 ++?

Meu querido CentOS para a arquitetura ARM da “Userland” não tinha pressa em mudar para a versão mais recente do kernel e transformá-lo em 64 bits. E o repositório EPEL, conectado sabe-se lá de onde sem assinatura digital, foi um pesadelo no meu sono agitado...

Falando como adepto de distribuições baseadas em RPM, fiquei surpreso ao descobrir que o sistema operacional para Raspberry foi completamente esquecido nas discussões. Fedora! E isso apesar de seu lançamento
a partir da versão 28 ele suporta oficialmente Raspberry Pi 3B+ na versão 64 bits!

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)
Neste artigo falarei sobre o método de instalação Fedora (aarch64) em Raspberry Pi 3 Modelo B + в desempenho extra mínimo. Vou me debruçar brevemente sobre os recursos de criação de um ponto de acesso Wi-Fi, identificados como resultado da operação experimental da minha configuração anterior em 7 CentOS.

0. O que você vai precisar

Tudo é igual ao listado no artigo anterior:

  • Framboesa Pi 3 Modelo B+;
  • microSD >= 4GB (mais tarde você pode “transferir” o sistema para um drive de 2GB);
  • Estação de trabalho com Linux e leitor de cartão microSD;
  • Conectividade de rede com fio entre o Raspberry e uma estação de trabalho Linux (neste caso, nenhum monitor e teclado adicionais serão necessários para configuração), acesso à Internet de ambos os dispositivos;
  • Habilidade avançada em Linux (conhecer e não ter medo: se separaram, dd и mkfs).

Semelhante ao iterativo LFS-construindo seu próprio Linux, será utilizada a imagem de distribuição do Fedora e, a partir dela, será criado um sistema mínimo (sem “compilar a partir do código-fonte”).

1. Instalação da distribuição original

Coordenadas da imagem bruta do sistema na Internet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Depois de gravá-lo no microSD e antes de usá-lo, você precisa:

  1. Expanda a “raiz” do sistema de arquivos (3ª partição, 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. Desativar SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Remova o assistente de configuração inicial:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Permitir acesso via 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
    

Agora você pode baixar o “framboesa” do microSD e conectar-se a ele pela rede.

Uma partida a frio leva cerca de um minuto e meio. TTX do sistema após carregamento:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)

rpm -qa | wc -l
444

2. Montando um sistema mínimo

Infelizmente, a “distribuição mínima” dos desenvolvedores acaba por estar longe de ser a mais modesta no consumo de recursos. A imagem do sistema pode ser ainda menor.

Para fazer isso, você precisa executar o script no Malinka:

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

Após executar o script, um subdiretório será criado no diretório atual ($P) com o conteúdo da raiz da nova edição mínima do sistema operacional. Você pode desligar o Raspberry e devolver o microSD à estação de trabalho Linux.

3. Instalação de um sistema mínimo

A instalação se resume a copiar os arquivos mínimos de “imagem” do sistema operacional (obtidos na etapa anterior) para um microSD especialmente preparado nos diretórios apropriados.

Um cartão de 2 GB e duas partições são suficientes:

  1. / boot / efi - EFI+FAT32, inicialização, 100MB;
  2. / (root) - EXT4, todo o espaço restante.

Depois de preparar o microSD e copiar os arquivos para ele, você precisa:

  • corrigir inicialização do sistema operacional;
  • ligue a rede;
  • configurar o acesso via ssh.

A correção de inicialização consiste em substituir o UUID das seções nos arquivos:

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

e parâmetro entrada_salvo= no último arquivo

No arquivo:

microSD:/etc/fstab

você pode encontrar os valores antigos e os valores atuais (atualizados) na saída do comando:

blkid | grep mmcblk | sort

Após a substituição, você também deve corrigir o conteúdo fstab no microSD para que os pontos de montagem correspondam aos novos UUIDs da partição.

A funcionalidade de rede quando você liga o Raspberry pela primeira vez pode ser alcançada com uma pequena “muleta” - crie um link (esquematicamente):

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

e arquivo:

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

Após um download bem-sucedido, organize o lançamento Systemd-Networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

O acesso de superusuário via ssh é configurado de forma semelhante à etapa 1.

Feito tudo com cuidado e sem erros, você pode mover o microSD para o “framboesa” e começar a trabalhar com um sistema operacional de 64 bits em uma versão extra mínima.

4. Sistema pronto

A “imagem” do sistema finalizado, criada conforme instruções acima, pode ser baixada no link:
Fedora-Tiny-31-5.5.7-200.aarch64

Este será um arquivo contendo dois arquivos: o script de instalação e o TGZ com arquivos do SO. O arquivo precisa ser descompactado em uma estação de trabalho Linux, inserir um microSD (um cartão de 2GB é suficiente) e executar o script com um parâmetro - o nome do dispositivo:

./install /dev/mmcblk0

Tenha cuidado!

Sem nenhum aviso, o dispositivo será formatado e o sistema operacional será instalado nele.

Após a execução do script sem erros, o cartão pode ser reorganizado em “framboesa” e utilizado: captura via dhcp, senha - “1”.

O sistema fica livre de todos os IDs e chaves, e é por isso que cada nova instalação é única.

Repito mais uma vez, o sistema - mínimo! Portanto, não se assuste: o DNF está disponível, para que funcione você terá que “inventar” o correto / Etc / resolv.conf.

A inicialização a frio do Raspberry leva cerca de 40 segundos. TTX do sistema após carregamento:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)

rpm -qa | wc -l
191

5. Wi-fi

Vou me alongar um pouco sobre os recursos de implementação de um ponto de acesso Wi-Fi. Para obter detalhes, você pode consultar meu anterior статье.

O EPEL não é mais necessário - todos os pacotes estão contidos nos repositórios oficiais.

Provavelmente valeria a pena desistir dnsmasq, já que o Fedora, ao contrário do CentOS, possui um systemd-networkd bastante recente, que possui servidores DHCP/DNS normais integrados. Mas o fato é que nos desenvolvedores RHEL8 recusou-se a oferecer suporte à pilha de rede com qualquer coisa diferente de NM, não inspira confiança no futuro brilhante do projeto (canalhas). Resumindo, ainda não experimentei.

Além disso, os drivers atuais para o adaptador Wi-Fi integrado não podem ser “roubados” da distribuição Raspbian, mas baixados diretamente do github.

Esta é a aparência dos arquivos de firmware da Broadcom no meu Raspberry (esquematicamente):

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

Sem eles você não obterá 5 GHz/AC.

Em relação ao número e nomes das interfaces. Agora, recomendo fortemente a todos que não recorram aos “serviços” de troca de software, a menos que seja absolutamente necessário (ponte), que introduzem carga significativa na pilha da rede e deprimem o roteamento. Se você não planeja ter vários adaptadores sem fio, deverá usar apenas interfaces físicas. Eu tenho dois Wi-Fi, então combino apenas eles em uma ponte de software (embora você possa fazer sem isso olhando a configuração do hostapd de forma diferente).

E adoro renomear interfaces.

Para fazer isso no Fedora você precisa criar um link simbólico:

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

e então será possível dar nomes significativos sem bisbilhotar udev, mas apenas usando systemd-networkd.

Por exemplo, é assim que os adaptadores de rede do meu roteador são chamados:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

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

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

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

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

  • int - construídas em, ext — adaptadores Wi-Fi externos (USB) montados em uma “ponte” lan;
  • pálido — Adaptador Ethernet ao qual a Internet está conectada.

Você já reparou? fq_codel - uma coisa muito legal. Junto com um novo kernel Linux, eles fazem verdadeiros milagres no alcance sem fio: um “download de torrent” feroz não levará a uma degradação repentina da velocidade entre vizinhos. Mesmo uma IP-TV doméstica operando “over the air” com um canal carregado não “quebra” e nem “gagueja”!

O arquivo de serviço daemon sofreu pequenas alterações hostapd.

Agora fica assim (usando o exemplo de um 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

E o hostapd-int.conf “mágico” para trabalhar em 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]

Um pequeno photoshop feito com meu Ericsson A1018:

(Conexão com a Internet - 100Mbit/seg)Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)
E finalmente, um pequeno FAQ.

6. FAQ

6.1 Por que fazer um roteador Wi-Fi no Raspberry?

Alguém poderia responder simplesmente, como “é interessante tentar e tudo mais”.

Mas, na verdade, parece-me que o assunto é bastante sério. Na era da Internet “sangrenta”, comprar um roteador em uma loja e ficar refém de seu fabricante é uma perspectiva muito sombria. Muitas pessoas já entendem que não é possível ficar com um CVE ou backdoor integrado.

Claro, você pode migrar para firmware WRT de entusiastas. Provavelmente há mais confiança neles, mas se você não quiser depender deles, basta usar seu próprio produto. Idealmente, um computador completo para que tudo no mundo possa ser implementado nele. Em termos de roteamento, é claro.

Portanto, escolher uma “framboesa” é uma jogada puramente econômica: um computador real e ao mesmo tempo barato. Embora, talvez também - com seus “duplos” dentro.

6.2 Mas o Raspberry é um “roteador baixo”: lento e com uma porta Ethernet!

Como roteador Wi-Fi doméstico, o Raspberry é mais do que satisfatório para mim. Já falei sobre a velocidade do ar acima. E existe apenas uma Ethernet, bem, em um produto semelhante da Apple é quase a mesma coisa!

Mas falando sério, é claro que eu gostaria de mais. E apesar de na minha casa todos os dispositivos estarem conectados sem fio, às vezes ainda é necessária uma conexão de cobre. Para esses casos, tenho um “hub móvel” em estoque:

dispositivo - algo assimRaspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (ou roteador framboesa com chapéu azul)

6.3 Se este for um roteador, então nada é dito sobre “sintonizar” o TCP/IP, porque isso é importante!

Além de configurar a pilha de rede (tcp_fastopen, YeAH, etc.), este e o artigo anterior não cobrem outras nuances, em particular, o processo de preparação do microSD para uso ideal (embora o instalador tente formatar o cartão de memória em uma maneira complicada). O processo de melhoria é interminável, basta parar no tempo.

6.4 Por que o Fedora?

Porque eu gosto! O Fedora é um sistema “mainstream” para geeks, para quem este artigo se destina. No momento em que este artigo foi escrito, talvez o único sistema operacional para Raspberry na versão de 64 bits fosse oficialmente suportado por uma equipe significativa de desenvolvedores (dos quais mal posso esperar). núcleo 5.6).

6.5 O Bluetooth funciona? Como está o vídeo/som/GPIO?

Não sei. O artigo trata da instalação mínima do sistema e sua posterior utilização como roteador Wi-Fi.

6.6 Por que todos os artigos sobre CentOS/Fedora/RedHat começam com a desativação do SELinux?

Como o sistema é mínimo, ele nem possui firewall ou utilitários para configurá-lo. Qualquer pessoa que precise pode instalar adicionalmente tudo o que precisa.

6.7 O sistema não pode ser usado, a senha não pode ser alterada - sem senha. Sem ping, sem nada!

Tem DNF. Ou esta opção de instalação não é para você - use a distribuição dos desenvolvedores.

6.8 Onde está o SWAP? Eu não posso viver sem ele!

É verdade? OK então:

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 Gostaria de baixar imediatamente uma imagem pronta com um ponto de acesso Wi-Fi configurado!

Preparar um instalador “para todos” exigirá algum tempo e esforço. Se (de repente!) alguém realmente achar isso interessante e necessário, escreva para nós e encontraremos algo.

Vou terminar com isso.

Desejo a todos uma navegação segura e máximo controle sobre a infraestrutura!

Fonte: habr.com

Adicionar um comentário