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

No artigo Raspberry Pi + CentOS = Hotspot Wi-Fi (ou roteador framboesa de chapéu vermelho) Falei sobre como transformar a 'Raspberry' em um ponto de acesso sem fio usando o sistema operacional CentOS. Montando meu roteador doméstico seguindo esse projeto, satisfiz meu ego criativo e garanti um nível de tranquilidade sobre um elemento crítico da minha infraestrutura aconchegante. No entanto, a sensação de que a solução estava incompleta e um perfeccionismo interior não me deixavam em paz: 'um resultado imperfeito não tem direito de existir'. A ideia de que 'o ideal pode e deve ser alcançado' não me abandonou nem por um minuto.

E um dia, em um dos fóruns temáticos, eu me deparei com uma discussão sobre a arquitetura dos sistemas operacionais existentes para a 'Raspberry' (aarch64 vs armhfp): quais sistemas operacionais de 64 bits podem ser implementados e funcionar na versão 3++ da Raspberry?

Minha adorada CentOS para a arquitetura ARM da 'Userland' não estava apressada em migrar para o núcleo da versão mais recente e se tornar 64 bits. E o repositório EPEL, adicionado sabe-se lá de onde sem assinatura digital, era um pesadelo nos meus sonhos inquietos...

Como defensor de distribuições baseadas em RPM, fiquei surpreso ao descobrir que nos debates sobre sistemas operacionais para a 'Raspberry', uma distribuição estava absolutamente esquecida. Fedora! E isso apesar do fato de que seu lançamento
a partir da versão 28 suporta oficialmente a Raspberry Pi 3B+ em uma versão de 64 bits!

Raspberry Pi + Fedora (aarch64) = ponto de acesso Wi-Fi (ou roteador framboesa com chapéu azul)
Neste artigo, falarei sobre como instalar Fedora (aarch64) para Raspberry Pi 3 Model B+ em na sua versão extramente minimalista.. Vou abordar brevemente as características de configuração do ponto de acesso Wi-Fi, identificadas durante a experiência com minha configuração anterior em CentOS 7.

0. O que será necessário

Tudo igual ao que foi listado no artigo anterior:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (posteriormente, o sistema pode ser 'transferido' para um armazenamento de 2GB);
  • Estação de trabalho com Linux e leitor de cartões microSD;
  • Conexão de rede com fio entre a 'Raspberry' e a estação de trabalho com Linux (nesse caso, não serão necessários monitor e teclado adicionais para configuração), acesso à Internet em ambos os dispositivos;
  • Habilidade avançada em Linux (saber e não ter medo de: parted, dd e mkfs).

Semelhante à abordagem iterativa da LFS-compilação do próprio Linux, será utilizado a imagem do distribuidor Fedora, e então com base nela será criada uma sistema mínima (sem 'compilação a partir do código-fonte').

1. Instalação do distribuidor original

As coordenadas da imagem raw do sistema na rede:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Após gravar no microSD e antes de começar a usar, é necessário:

  1. Expandir o "root" 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 o SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Remover 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 inicializar a "raspberry" com o microSD e se conectar a ela pela rede.

O arranque a frio leva cerca de um minuto e meio. Especificações do sistema após a inicialização:

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

rpm -qa | wc -l
444

2. Montagem do sistema mínimo

Infelizmente, o "distribuidor mínimo" dos desenvolvedores acaba não sendo o mais modesto em consumo de recursos. A imagem do sistema pode ser reduzida ainda mais.

Para isso, na "raspberry" é necessário executar o 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

Após a execução do script, será criado um subdiretório ($P) com o conteúdo do root da nova edição mínima do SO. Você pode desligar a "raspberry" e retornar o microSD à estação de trabalho Linux.

3. Instalação do sistema mínimo

A instalação consiste em copiar os arquivos da "imagem" mínima do SO (obtida na etapa anterior) para o microSD preparado nas pastas correspondentes.

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

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

Após preparar o microSD e copiar os arquivos para ele, é necessário:

  • consertar a inicialização do SO;
  • ativar a rede;
  • configurar o acesso via ssh.

Consertar a inicialização consiste em alterar os UUIDs das partições nos arquivos:

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

e o parâmetro saved_entry= no último arquivo

No arquivo:

microSD:/etc/fstab

podem ser encontrados os antigos valores, e os atuais (vigorosos) — 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 das partições.

A operacionalidade da rede ao ligar pela primeira vez a "raspberry" pode ser alcançada com um pequeno "workaround" — criar um link (esquematicamente):

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

e o arquivo:

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

Após a inicialização bem-sucedida — organizar o início systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

O acesso de superusuário via ssh é configurado da mesma forma que no item 1.

Após fazer tudo com cuidado e sem erros, você pode transferir o microSD para a 'Raspberry' e começar a trabalhar com o sistema operacional de 64 bits na sua versão mais minimalista.

4. Sistema pronto

A 'imagem' do sistema pronto, criada conforme as instruções acima, pode ser baixada pelo link:
Fedora-Tiny-31-5.5.7-200.aarch64

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

.\/install \/dev\/mmcblk0

Fique atento!

Sem qualquer aviso, o dispositivo será formatado e uma nova versão do sistema operacional será instalada nele.

Após a execução correta do script, o cartão pode ser transferido para a 'Raspberry' e usado: conectar via dhcp, a senha é '1'.

O sistema foi limpo de qualquer ID e chaves, o que torna cada nova instalação única.

Reitero mais uma vez, o sistema é mínimo! Por isso, não se assuste: o DNF está disponível, e para seu funcionamento será necessário 'criar' um correto /etc/resolv.conf.

A inicialização a frio da 'Raspberry' leva cerca de 40 segundos. Especificações do sistema após a carga:

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

rpm -qa | wc -l
191

5. Wi-Fi

Vou parar um pouco nas particularidades da implementação do ponto de acesso Wi-Fi. Para mais detalhes, você pode consultar meu anterior artigo.

Agora o EPEL não será necessário — todos os pacotes estão contidos nos repositórios oficiais.

Provavelmente, seria melhor abrir mão de dnsmasq, pois no Fedora, ao contrário do CentOS, há um systemd-networkd suficientemente recente, que possui servidores DHCP/DNS embutidos normais. Mas o fato de que os desenvolvedores do RHEL8 abriram mão do suporte ao stack de rede para qualquer coisa além do NM, não inspira confiança no futuro brilhante do projeto (canalhas). Em suma, não experimentei.

Além disso, os drivers atuais do adaptador Wi-Fi embutido não precisam ser 'roubados' do Raspbian, mas podem ser baixados diretamente do github.

Assim são os arquivos de firmware da Broadcom na minha '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, não será possível utilizar 5GHz/AC.

Sobre o número e os nomes das interfaces. Agora, recomendo enfaticamente a todos que não recorram aos 'serviços' de switches de software sem necessidade.bridge), que impõem uma carga significativa na pilha de rede e prejudicam o roteamento. Se não houver planos para múltiplos adaptadores sem fio, deve-se usar exclusivamente interfaces físicas. Eu tenho dois Wi-Fi, por isso somente os uno em uma ponte virtual (embora seja possível administrar isso de outra forma, considerando a configuração do hostapd).

E eu gosto de renomear interfaces.

Para isso, no Fedora, é necessário criar um link simbólico:

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

e então será possível dar nomes significativos sem mexer em udev, apenas com os recursos do systemd-networkd.

Assim, por exemplo, os adaptadores de rede no meu roteador são nomeados:

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 — embutido, ext — adaptadores Wi-Fi externos (USB), reunidos em um "bridge" lan;
  • wan — adaptador Ethernet, no qual a Internet está conectada.

Notou? fq_codel — realmente uma coisa incrível. Junto com o kernel Linux mais recente, faz verdadeiros milagres na faixa sem fio: um download intenso via torrent não causará uma degradação súbita na velocidade dos vizinhos. Até mesmo a IPTV doméstica "sem fio" não "quebra" nem "gagueja" de forma alguma, mesmo em um canal sobrecarregado!

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

Agora ele se parece assim (com o exemplo do adaptador embutido):

[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 "mágico" hostapd-int.conf para operação 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 pouco de "Photoshop" feito com meu "Ericsson A1018s":

(conexão à Internet — 100Mb/s)Raspberry Pi + Fedora (aarch64) = ponto de acesso Wi-Fi (ou roteador framboesa com chapéu azul)
E, para concluir, um pequeno FAQ.

6. FAQ

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

Poderíamos responder simplesmente dizendo "é interessante tentar e só isso".

Mas, na verdade, como eu vejo, o tema é bastante sério. Na era da Internet "sangrenta", comprar um roteador na loja e permanecer refém do seu fabricante é uma perspectiva bastante sombria. Ficar com vulnerabilidades conhecidas ou um backdoor embutido já é algo com o que muitos compreendem que não se pode conviver.

Claro, é possível migrar para firmwares WRT de entusiastas. Confiança neles, talvez, seja maior, mas se você não quiser depender deles, então só resta — produzir o seu próprio. Idealmente – um computador completo para a possibilidade de realizar tudo isso. No que se refere ao roteamento, é claro.

Portanto, a escolha do "berry" é uma decisão meramente econômica: um verdadeiro computador e, ao mesmo tempo, acessível. Embora, talvez também — com suas "dobras" internas.

6.2 Mas o Raspberry é um "roteador barato": lento e com apenas uma porta Ethernet!

Como roteador Wi-Fi doméstico, o "berry" me atende mais do que bem. Já falei sobre a velocidade "sem fio" acima. E uma única Ethernet, bem, em um produto semelhante da Apple, é mais ou menos a mesma coisa!

E falando sério, é claro que eu gostaria de mais. E apesar de que em minha casa todos os dispositivos estão conectados sem fio, às vezes ainda é necessário uma conexão com fio. Para tais ocasiões, eu tenho um "hub móvel" guardado:

um dispositivo — tipo esteRaspberry Pi + Fedora (aarch64) = ponto de acesso Wi-Fi (ou roteador framboesa com chapéu azul)

6.3 Se este é um roteador, então nada foi dito sobre a "tuning" TCP/IP, pois isso é importante!

Além da configuração da pilha de rede (tcp_fastopen, YeAH e afins), neste e no artigo anterior, não foram revelados outros detalhes, em particular, o processo de preparação do microSD para uso ótimo (embora o instalador tente formatar o cartão de memória de uma maneira engenhosa). O processo de aprimoramento é interminável, só é preciso parar a tempo.

6.4 Por que Fedora?

Porque eu gosto! Fedora — "mainstream" — é um sistema para geeks, para os quais, de fato, este artigo é destinado. No momento da escrita, talvez a única OS que para Raspberry em versão de 64 bits é oficialmente suportada por uma equipe significativa de desenvolvedores (dos quais não consigo receber) o núcleo 5.6).

6.5 E o Bluetooth funciona? E quanto ao vídeo/som/GPIO?

Não sei. O artigo é sobre a instalação mínima do sistema e seu uso posterior como roteador Wi-Fi.

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

Porque o sistema é mínimo, não tem nem mesmo um firewall e utilitários para sua configuração. Quem precisar pode instalar adicionalmente tudo o que for necessário.

6.7 Não é possível usar o sistema, não é possível alterar a senha — não há passwd. Não há ping, não há nada!

Há DNF. Ou essa opção de instalação não é para você – use a distribuição dos desenvolvedores.

6.8 E onde está o SWAP? Não consigo viver sem ele!

É verdade? Bom, 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!

Para preparar o instalador "para todos" será necessário algum tempo e esforço. Se (de repente!) isso parecer realmente interessante e necessário para alguém – escreva, vamos pensar em algo.

Com isso, vou concluir.

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

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster