Há uma grande quantidade de informações na Internet sobre a criação de pontos de acesso Wi-Fi baseados em um PC de placa única Raspberry. Via de regra, isso significa usar o sistema operacional Raspbian nativo do Raspberry.
Sendo um adepto de sistemas baseados em RPM, não poderia deixar de lado esse pequeno milagre e não experimentar meu querido CentOS nele.
O artigo fornece instruções para fazer um roteador Wi-Fi de 5 GHz/AC a partir de um Raspberry Pi 3 Modelo B+ baseado no sistema operacional CentOS. Haverá vários truques padrão, mas pouco conhecidos, e como bônus - um sorteio para conectar equipamentos Wi-Fi adicionais ao Raspberry, permitindo que ele opere simultaneamente em vários modos (2,4+5GHz).
(combinação de imagens disponíveis gratuitamente)
Notemos imediatamente que algumas velocidades cósmicas não funcionarão. Eu extraio no máximo 100 Mbps do meu Raspberry over the air, e isso cobre a velocidade do meu provedor de Internet. Por que você precisa de um AC tão lento, se em teoria você consegue meio gigabit mesmo em N? Se você já se fez essa pergunta, vá até a loja para comprar um roteador real com oito antenas externas.
0. O que você vai precisar
- Na verdade, o “produto framboesa” em si é do calibre: Pi 3 Modelo B+ (para atingir as cobiçadas velocidades e canais de 5 GHz);
- Bom microSD >= 4GB;
- Estação de trabalho com leitor/gravador Linux e microSD;
- Disponibilidade de habilidades suficientes em Linux, o artigo é para um Geek treinado;
- Conectividade de rede cabeada (eth0) entre Raspberry e Linux, rodando servidor DHCP na rede local e acesso à Internet de ambos os dispositivos.
Um pequeno comentário sobre o último ponto. “O que veio primeiro, o ovo ou...” como fazer um roteador Wi-Fi na ausência de qualquer equipamento de acesso à Internet? Vamos deixar este exercício divertido fora do escopo do artigo e simplesmente assumir que o Raspberry está conectado à rede local por fio e tem acesso à Internet. Neste caso, não precisaremos de uma TV adicional e de um manipulador para configurar a “framboesa”.
1. Instale o CentOS
No momento em que este artigo foi escrito, a versão do CentOS em execução no dispositivo era de 32 bits. Em algum lugar na World Wide Web me deparei com opiniões de que o desempenho de tais sistemas operacionais na arquitetura ARM de 64 bits é reduzido em até 20%. Vou deixar este momento sem comentários.
No Linux, baixe a imagem mínima com o kernel "-Raspberry Pi-"e grave-o no microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Antes de começar a usar a imagem, iremos remover a partição SWAP dela, expandir a raiz para todo o volume disponível e nos livrar do SELinux. O algoritmo é simples: faça uma cópia da raiz no Linux, exclua todas as partições do microSD exceto a primeira (/boot), crie uma nova raiz e retorne seu conteúdo da cópia.
Exemplo de ações necessárias (saída grave do console)
# 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
Depois de descompactar o conteúdo da partição raiz, é hora de fazer algumas alterações nela.
Desative o SELinux em /mnt/etc/selinux/config:
SELINUX=disabled
Edição /mnt/etc/fstab, deixando nele apenas duas entradas sobre as partições: boot (/boot, sem alterações) e root (alteramos o valor UUID, que pode ser descoberto estudando a saída do comando blkid no Linux):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Finalmente, alteramos os parâmetros de inicialização do kernel: especificamos um novo local para a partição raiz, desabilitamos a saída de informações de depuração e (opcionalmente) proibimos o kernel de atribuir endereços IPv6 em interfaces de rede:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Aqui está o conteúdo /mnt/cmdline.txt para o seguinte formato (uma linha sem hífens):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Feito:
# cd
# umount /mnt
# sync
Reorganizamos o microSD no “framboesa”, iniciamos e obtemos acesso de rede via ssh (root/centos).
2. Configurando o CentOS
Os três primeiros movimentos inabaláveis: passwd, yum -y atualização, reinicialização.
Distribuímos gerenciamento de rede rede:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Crie um arquivo (junto com diretórios) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Reinicializamos o “framboesa” e novamente obtemos acesso à rede via ssh (o endereço IP pode mudar). Preste atenção no que é usado / Etc / resolv.conf, criado anteriormente pelo Network Manager. Portanto, em caso de problemas de resolução, edite seu conteúdo. Usar resolvido pelo sistema não vamos.
Removemos o “desnecessário”, reparamos e aceleramos o carregamento do SO:
# 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
Quem precisa cron e quem não digere o embutido
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Desative o uso de IPv6 por serviços básicos (se necessário)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
A relevância do tempo na “framboesa” é uma coisa importante. Como não há capacidade de hardware para salvar o estado atual do relógio na reinicialização, a sincronização é necessária. Um daemon muito bom e rápido para isso é crony - já instalado e inicia automaticamente. Você pode alterar os servidores NTP para os mais próximos.
/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
Para definir o fuso horário que usaremos truque. Como nosso objetivo é criar um roteador Wi-Fi operando nas frequências de 5 GHz, nos prepararemos para surpresas com antecedência regulador:
#yum info crda
Resumo: Daemon de conformidade regulatória para redes sem fio 802.11
Este design maligno, também baseado no fuso horário, “proíbe” o uso (na Rússia) de frequências de 5GHz e canais com números “altos”. O truque é definir um fuso horário sem usar nomes de continentes/cidades, ou seja, em vez de:
# timedatectl set-timezone Europe/Moscow
Pressionamos:
# timedatectl set-timezone Etc/GMT-3
E os retoques finais no penteado do sistema:
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# User specific environment and startup programs
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. Complementos CentOS
Tudo o que foi dito acima pode ser considerado instruções completas para instalação do CentOS “vanilla” no Raspberry Pi. Você deve acabar com um PC que (re)inicializa em menos de 10 segundos, usa menos de 15 Megabytes de RAM e 1.5 Gigabytes de microSD (na verdade, menos de 1 Gigabyte devido a um /boot incompleto, mas sejamos honestos).
Para instalar o software de ponto de acesso Wi-Fi neste sistema, você precisará expandir ligeiramente os recursos da distribuição padrão do CentOS. Em primeiro lugar, vamos atualizar o driver (firmware) do adaptador Wi-Fi integrado. A página inicial do projeto diz:
Wifi no Raspberry 3B e 3B+
Os arquivos de firmware Raspberry PI 3B/3B+ não podem ser distribuídos pelo Projeto CentOS. Você pode usar os artigos a seguir para entender o problema, obter o firmware e configurar o wifi.
O que é proibido para o projeto CentOS não é proibido para nós para uso pessoal. Substituímos o firmware Wi-Fi de distribuição no CentOS pelo correspondente dos desenvolvedores da Broadcom (aqueles mesmos odiados blobs binários...). Isto, em particular, permitirá que você use AC no modo de ponto de acesso.
Atualização de firmware Wi-FiDescubra o modelo do dispositivo e a versão atual do firmware:
# 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
Vemos que a versão do firmware é 7.45.18 datada de 01.03.2015/XNUMX/XNUMX, e lembramos do seguinte conjunto de números: 43455 (brcmfmac43455-sdio.bin).
# 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
Os arquivos de firmware do adaptador Wi-Fi resultantes devem ser copiados e substituídos por “raspberry” no diretório /usr/lib/firmware/brcm/
Reinicializamos o futuro roteador e sorrimos satisfeitos:
# 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
Versão: 7.45.154 de 27.02.2018/XNUMX/XNUMX.
E claro 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. Configuração da rede e desafios futuros
Conforme combinamos acima, o “framboesa” está conectado por “fio” à rede local. Suponhamos que o provedor forneça acesso à Internet exatamente da mesma forma: o endereço na rede pública é emitido dinamicamente pelo servidor DHCP (talvez com ligação MAC). Neste caso, após a configuração final do framboesa, basta “conectar” o cabo do provedor nele e pronto. Autorização usando Systemd-Networkd - o tópico de um artigo separado e não é discutido aqui.
A(s) interface(s) Wi-Fi do Raspberry é uma rede local e o adaptador Ethernet integrado (eth0) é externo. Vamos numerar a rede local estaticamente, por exemplo: 192.168.0.0/24. Endereço de framboesa: 192.168.0.1. Um servidor DHCP operará na rede externa (Internet).
Caos paralelo (digressão lírica)Lennart Pottering compilou seu próprio programa sistema Muito bom. Esse sistema lança outros programas tão rapidamente que, não tendo tempo de se recuperar do apito do árbitro, tropeça e cai na largada, sem sequer iniciar a pista de obstáculos.
Mas, falando sério, a paralelização agressiva de processos iniciados no início do sistema operacional systemd é uma espécie de “ponte de burro” para especialistas experientes em LSB sequencial. Felizmente, trazer ordem a este “caos paralelo” revela-se simples, embora nem sempre óbvio.
Criamos duas interfaces de ponte virtual com nomes constantes: lan и pálido. Iremos “conectar” o(s) adaptador(es) Wi-Fi ao primeiro, e o eth0 “raspberry” ao segundo.
/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=sim elimina a necessidade de dar dicas ao kernel via sysctl para habilitar o roteamento.
Endereço MAC = Vamos descomentar e alterar se necessário.
Primeiro nós “conectamos” eth0. Lembramos do “problema de uniformidade” e utilizamos apenas o endereço MAC desta interface, que pode ser descoberto, por exemplo, assim:
# cat /sys/class/net/eth0/address
Criar /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Excluímos o arquivo de configuração anterior eth0, reinicializamos o Raspberry e obtemos acesso de rede a ele (o endereço IP provavelmente mudará):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Para criar pontos de acesso Wi-Fi, nada se compara a alguns lindos dnsmasq + hostapd ainda não descobri. Na minha opinião.
Caso alguém tenha esquecido, então...
Vamos começar com dnsmasq:
# yum install dnsmasq
Modelo / 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
edite-o ao seu gosto.
minimalista /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
A “mágica” aqui está no parâmetro vinculação dinâmica, que diz ao daemon dnsmasq para esperar até que ele apareça no sistema interface=lan, e não desmaiar devido a um ataque de orgulhosa solidão após o início.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
E finalmente, as configurações mágicas do hostapd. Não tenho dúvidas de que alguém está lendo este artigo em busca justamente dessas preciosas linhas.
Antes de instalar o hostapd, você precisa superar o “problema de uniformidade”. O adaptador Wi-Fi integrado wlan0 pode facilmente mudar seu nome para wlan1 ao conectar equipamento USB Wi-Fi adicional. Portanto, corrigiremos os nomes das interfaces da seguinte maneira: criaremos nomes exclusivos para os adaptadores (sem fio) e os vincularemos aos endereços MAC.
Para o adaptador Wi-Fi integrado, que ainda é wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Criar /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Agora teremos certeza de que wl0 - Este é o Wi-Fi integrado. Reinicializamos o Raspberry para ter certeza disso.
Instalar:
# yum install hostapd wireless-tools
Arquivo de configuração /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
Sem esquecer por um momento
# hostapd /etc/hostapd/hostapd.conf
hostapd iniciará em modo interativo, transmitindo seu estado para o console. Se não houver erros, os clientes que suportam o modo AC poderão se conectar ao ponto de acesso. Para parar o hostapd - Ctrl-C.
Resta apenas habilitar o hostapd na inicialização do sistema. Se você fizer o procedimento padrão (systemctl enable hostapd), após a próxima reinicialização você poderá obter um demônio “rolando em sangue” com o diagnóstico “interface wl0 não encontrada". Como resultado do “caos paralelo”, o hostapd foi iniciado mais rápido do que o kernel encontrou o adaptador sem fio.
A Internet está cheia de soluções: desde um tempo limite forçado antes de iniciar o daemon (vários minutos), até outro daemon que monitora a aparência da interface e (re)inicia o hostpad. As soluções são bastante viáveis, mas terrivelmente feias. Pedimos ajuda ao grande sistema com seus “objetivos” e “tarefas” e “dependências”.
Copie o arquivo do serviço de distribuição para /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
e reduza seu conteúdo para a seguinte forma:
[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
A magia do arquivo de serviço atualizado está na ligação dinâmica do hostapd ao novo destino - a interface wl0. Quando a interface aparece, o daemon é iniciado; quando desaparece, ele para. E tudo isso online - sem reiniciar o sistema. Esta técnica será especialmente útil ao conectar um adaptador USB Wi-Fi a um Raspberry.
Agora você pode:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Wha???" © Sim, sim! Nenhum sistema. Nenhuma combinação moderna (na forma firewalld), que acabam fazendo a mesma coisa.
Vamos usar o bom e velho iptables, cujos serviços, após serem iniciados, carregarão as regras de rede no kernel e serão encerrados silenciosamente, sem permanecerem residentes e sem consumir recursos. systemd tem um elegante Máscara IP=, mas ainda confiaremos a tradução de endereços (NAT) e o firewall ao iptables.
Instalar:
# yum install iptables-services
# systemctl enable iptables ip6tables
Prefiro armazenar a configuração do iptables como um script (exemplo):
#!/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
Executamos o script acima e perdemos a capacidade de estabelecer novas conexões SSH com fio com o Raspberry. Isso mesmo, fizemos um roteador Wi-Fi, cujo acesso “via Internet” é proibido por padrão - agora apenas “over the air”. Conectamos o cabo Ethernet do provedor e começamos a navegar!
8. Bônus: +2,4 GHz
Quando montei o primeiro roteador Raspberry usando o desenho descrito acima, descobri vários gadgets em minha casa que, devido às limitações de design do Wi-Fi, não conseguiam ver o “framboesa”. Reconfigurar o roteador para funcionar em 802.11b/g/n foi antiesportivo, já que a velocidade máxima “over the air” neste caso não ultrapassava 40 Mbit, e meu provedor de Internet favorito me oferece 100 (via cabo).
Na verdade, uma solução para o problema já foi inventada: uma segunda interface Wi-Fi operando na frequência de 2,4 GHz e um segundo ponto de acesso. Em uma barraca próxima, comprei não o primeiro, mas o segundo “apito” de Wi-Fi USB que encontrei. O vendedor foi atormentado por dúvidas sobre o chipset, compatibilidade com kernels ARM Linux e a possibilidade de trabalhar em modo AP (ele foi o primeiro a começar).
Configuramos o “apito” por analogia com o adaptador Wi-Fi integrado.
Primeiro, vamos renomeá-lo para wl1:
# 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
Confiaremos o gerenciamento da nova interface Wi-Fi a um daemon hostapd separado, que será iniciado e interrompido dependendo da presença de um “apito” estritamente definido no sistema: wl1.
Arquivo de configuração /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]
O conteúdo deste arquivo depende diretamente do modelo do adaptador USB Wi-Fi, portanto, copiar/colar banal pode falhar.
Copie o arquivo do serviço de distribuição para /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
e reduza seu conteúdo para a seguinte forma:
[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
Resta apenas habilitar uma nova instância do hostapd:
# systemctl enable hostapd2
Isso é tudo! Puxe o “apito” e a própria “framboesa”, observe as redes sem fio ao seu redor.
E por fim, quero alertar sobre a qualidade do adaptador USB Wi-Fi e da fonte de alimentação do Raspberry. O “apito quente” conectado às vezes pode causar “congelamento de framboesa” devido a problemas elétricos de curto prazo.
Fonte: habr.com