C'è un'enorme quantità di informazioni su Internet sulla creazione di punti di accesso Wi-Fi basati su un PC a scheda singola Raspberry. Di norma ciò significa utilizzare il sistema operativo Raspbian nativo del Raspberry.
Essendo un sostenitore dei sistemi basati su RPM, non potevo lasciarmi sfuggire questo piccolo miracolo e non provare il mio preferito su di esso CentOS.
Questo articolo fornisce istruzioni su come costruire un router Wi-Fi 5GHz/AC da un Raspberry Pi 3 Model B+ con sistema operativo CentOSVerranno illustrati diversi trucchi standard, ma poco conosciuti, e, come bonus, uno schema per collegare ulteriori dispositivi Wi-Fi al Raspberry Pi, consentendogli di operare simultaneamente in più modalità (2,4 + 5 GHz).

(mix di immagini liberamente disponibili)
Notiamo subito che alcune velocità cosmiche non funzioneranno. Ottengo un massimo di 100 Mbps dal mio Raspberry via etere e questo copre la velocità del mio provider Internet. Perché hai bisogno di un AC così lento, se in teoria puoi ottenere mezzo gigabit anche su N? Se ti sei posto questa domanda, allora vai in negozio per acquistare un vero router con otto antenne esterne.
0. Di cosa avrai bisogno
- In realtà, il “prodotto lampone” stesso è del calibro: Pi 3 Modello B+ (per raggiungere le ambite velocità e canali a 5GHz);
- Buona microSD >= 4GB;
- Workstation con Linux e lettore/scrittore di schede microSD;
- Possedere competenze sufficienti in Linux, articolo - per il geek preparato;
- Connettività di rete cablata (eth0) tra Raspberry e Linux, un server DHCP funzionante sulla rete locale e accesso a Internet da entrambi i dispositivi.
Un piccolo commento sull'ultimo punto. "Chi è nato prima, l'uovo o..." come realizzare un router Wi-Fi in assenza di apparecchiature per l'accesso a Internet? Lasciamo questo divertente esercizio fuori dallo scopo dell'articolo e supponiamo semplicemente che il Raspberry sia connesso alla rete locale via cavo e abbia accesso a Internet. In questo caso, non avremo bisogno di una TV aggiuntiva e di un manipolatore per impostare il "lampone".
1. Installazione CentOS
Al momento della stesura di questo articolo, la versione di lavoro CentOS Il dispositivo utilizza un sistema a 32 bit. Ho letto online che le prestazioni di tali sistemi operativi su architettura ARM a 64 bit diminuiscono fino al 20%. Non mi pronuncio ulteriormente su questo punto.
Su Linux-e scarica l'immagine minima con il kernel "-RaspberryPI-"e scrivetelo sulla microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Prima di utilizzare l'immagine, rimuoveremo la partizione SWAP, espanderemo la root all'intero volume disponibile e ci libereremo di SE.LinuxL'algoritmo è semplice: creiamo una copia della radice su Linux, elimina tutte le partizioni dalla microSD tranne la prima (/boot), crea una nuova partizione root e ripristina il suo contenuto dalla copia.
Esempio di azioni richieste (output della console grave)
# 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
Dopo aver decompresso il contenuto della partizione root, è il momento di apportarvi alcune modifiche.
Disabilita SELinux в /mnt/etc/selinux/config:
SELINUX=disabled
La modifica /mnt/etc/fstab, lasciando in esso solo due voci relative alle partizioni: boot (/boot, invariato) e root (cambiamo il valore UUID, che può essere scoperto esaminando l'output del comando blkid su Linux-e):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Infine, modifichiamo i parametri di avvio del kernel: specifichiamo una nuova posizione per la partizione root, disabilitiamo l'output delle informazioni di debug e (facoltativo) proibiamo al kernel di assegnare indirizzi IPv6 sulle interfacce di rete:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Ecco il contenuto /mnt/cmdline.txt nella seguente forma (una riga senza trattini):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Finitura:
# cd
# umount /mnt
# sync
Spostiamo la microSD nel Raspberry Pi, lo avviamo e otteniamo l'accesso alla rete tramite ssh (root/centos).
2. Installazione CentOS
I primi tre movimenti incrollabili: passwd, yum -y aggiornamento, reboot.
Diamo via la gestione della rete networkd:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Creare un file (insieme alle directory) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Riavviamo il "lampone" e otteniamo nuovamente l'accesso alla rete tramite ssh (l'indirizzo IP potrebbe cambiare). Prestare attenzione a ciò che viene utilizzato /etc/resolv.conf, creato in precedenza da Network Manager. Pertanto, in caso di problemi con la risoluzione, modificarne il contenuto. Utilizzo risolto da systemd noi non.
Rimuoviamo ciò che è “non necessario”, ripariamo e acceleriamo il caricamento del sistema operativo:
# 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
Chi ha bisogno cron e chi non digerisce il built-in , può stabilire cosa manca. / Var / log- e guarda attraverso journalctl. Se hai bisogno della cronologia dei registri (per impostazione predefinita, le informazioni vengono archiviate solo dal momento in cui viene avviato il sistema):
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Disabilitare l'uso di IPv6 da parte dei servizi di base (se richiesto)/etc/ssh/sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
La rilevanza del tempo sul “lampone” è una cosa importante. Poiché l'hardware non è in grado di salvare lo stato corrente dell'orologio al riavvio, è necessaria la sincronizzazione. Un demone molto buono e veloce per questo è chrony - già installato e si avvia automaticamente. Puoi cambiare i server NTP con quelli più vicini.
/etc/crony.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
Per impostare il fuso orario che utilizzeremo trucco. Poiché il nostro obiettivo è creare un router Wi-Fi che funzioni su frequenze di 5 GHz, ci prepareremo in anticipo per le sorprese regolatore:
# gnam informazioni crda
Riepilogo: demone di conformità normativa per la rete wireless 802.11
Questo disegno diabolico, basato anche sul fuso orario, “vieta” l’uso (in Russia) delle frequenze a 5GHz e dei canali con numeri “alti”. Il trucco sta nell'impostare un fuso orario senza utilizzare i nomi dei continenti/città, cioè invece di:
# timedatectl set-timezone Europe/Moscow
Premiamo:
# timedatectl set-timezone Etc/GMT-3
E il tocco finale all'acconciatura del sistema:
# hostnamectl set-hostname router
/root/.profilo_bash:
. . .
# User specific environment and startup programs
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. Aggiunte CentOS
Tutto quanto detto sopra può essere considerato un'istruzione completa per l'installazione "vanilla" CentOS su un Raspberry Pi. Dovresti ottenere un PC che si (ri)avvia in meno di 10 secondi, utilizza meno di 15 megabyte di RAM e 1.5 gigabyte di scheda microSD (in realtà, meno di 1 gigabyte a causa di un /boot incompleto, ma siamo onesti).
Per installare il software del punto di accesso Wi-Fi su questo sistema, sarà necessario espandere leggermente le funzionalità della distribuzione standard. CentOSInnanzitutto, aggiorniamo il driver (firmware) per l'adattatore Wi-Fi integrato. La pagina web del progetto afferma:
Wifi sul Raspberry 3B e 3B+
Non è consentito distribuire i file del firmware Raspberry PI 3B/3B+ CentOS Progetto. Puoi utilizzare i seguenti articoli per comprendere il problema, ottenere il firmware e configurare il Wi-Fi.
Cosa non è consentito fare al progetto CentOS, quindi non ci è vietato utilizzarlo per uso personale. Stiamo sostituendo il firmware Wi-Fi di distribuzione in CentOS alla corrispondente versione degli sviluppatori Broadcom (quei soliti odiati blob binari...). Questo, in particolare, permetterà di utilizzare l'AC in modalità punto di accesso.
Aggiornamento del firmware Wi-FiScopri il modello del dispositivo e la versione attuale del 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
Vediamo che la versione del firmware è 7.45.18 del 01.03.2015/XNUMX/XNUMX, e ricordiamo la seguente serie di numeri: 43455 (brcmfmac43455-sdio.bin).
Chi è pigro può masterizzare l'immagine su una microSD ed estrarre i file del firmware da lì. In alternativa, è possibile montare la partizione root dell'immagine in Linux e copia ciò che ti serve da lì:
# 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
I file firmware dell'adattatore Wi-Fi risultanti devono essere copiati e sostituiti con "raspberry" nella directory /usr/lib/firmware/brcm/
Riavviamo il futuro router e sorridiamo soddisfatti:
# 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
Versione: 7.45.154 del 27.02.2018/XNUMX/XNUMX.
E ovviamente 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. Configurazione della rete e sfide future
Come abbiamo concordato sopra, il "lampone" è collegato tramite "filo" alla rete locale. Supponiamo che il provider fornisca l'accesso a Internet esattamente nello stesso modo: l'indirizzo sulla rete pubblica viene assegnato dinamicamente dal server DHCP (eventualmente con associazione MAC). In questo caso, dopo la configurazione finale del raspberry, ti basterà “collegare” il cavo del provider e il gioco è fatto. Autorizzazione utilizzando systemd-networkd - l'argomento di un articolo separato e non è discusso qui.
Le interfacce Wi-Fi di Raspberry sono una rete locale e l'adattatore Ethernet integrato (eth0) è esterno. Numeriamo staticamente la rete locale, ad esempio: 192.168.0.0/24. Indirizzo lampone: 192.168.0.1. Un server DHCP funzionerà sulla rete esterna (Internet).
и - due problemi che attendono chiunque configuri interfacce e servizi di rete nelle distribuzioni systemd.
Caos parallelo (digressione lirica)Lennart Pottering ha compilato il proprio programma systemd Molto bene. Questo systemd lancia altri programmi così velocemente che questi, non avendo il tempo di riprendersi dal fischio dell'arbitro, inciampano e cadono all'inizio senza nemmeno iniziare il loro percorso a ostacoli.
Ma sul serio, la parallelizzazione aggressiva dei processi avviati all'inizio del sistema operativo systemd è una sorta di "ponte asino" per specialisti LSB sequenziali esperti. Fortunatamente, mettere ordine in questo “caos parallelo” risulta essere semplice, anche se non sempre ovvio.
Creiamo due interfacce bridge virtuali con nomi costanti: lan и pallido. “Collegheremo” l’adattatore Wi-Fi al primo e l’eth0 “raspberry” al secondo.
/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=sì elimina la necessità di suggerire al kernel tramite sysctl per abilitare il routing.
IndirizzoMAC= Decommentiamo e cambiamo se necessario.
Per prima cosa “connettiamo” eth0. Ricordiamo il “problema di uniformità” e utilizziamo solo l'indirizzo MAC di questa interfaccia, che può essere trovato, ad esempio, in questo modo:
# cat /sys/class/net/eth0/address
Creare /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Eliminiamo il file di configurazione precedente eth0, riavviamo il Raspberry e otteniamo l'accesso alla rete (molto probabilmente l'indirizzo IP cambierà):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Per creare punti di accesso Wi-Fi, niente è meglio di un bel paio di dnsmasq + hostapd non l'ho ancora capito. Secondo me.
Nel caso qualcuno se ne fosse dimenticato, allora... - questa è la cosa che controlla gli adattatori Wi-Fi (in particolare, si occuperà di collegarli al virtual lan "lamponi"), autorizza e registra i client wireless.
— configura lo stack di rete dei client: emette indirizzi IP, server DNS, gateway predefinito e delizie simili.
Cominciamo con dnsmasq:
# yum install dnsmasq
sagoma /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
modificalo a tuo piacimento.
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
La “magia” qui sta nel parametro vincolo-dinamico, che dice al demone dnsmasq di attendere finché non appare sul sistema interfaccia=lan, e non svenire per un attacco di orgogliosa solitudine dopo l'inizio.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
E infine, le magiche configurazioni hostapd. Non ho dubbi che qualcuno stia leggendo questo articolo alla ricerca proprio di queste preziose righe.
Prima di installare hostapd è necessario superare il “problema di uniformità”. L'adattatore Wi-Fi integrato wlan0 può facilmente cambiare il suo nome in wlan1 quando si collegano ulteriori apparecchiature Wi-Fi USB. Pertanto, fisseremo i nomi delle interfacce nel modo seguente: troveremo nomi univoci per gli adattatori (wireless) e li collegheremo agli indirizzi MAC.
Per l'adattatore Wi-Fi integrato, che è ancora wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Creare /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Ora ne saremo sicuri wl0 - Questo è il Wi-Fi integrato. Riavviamo il Raspberry per assicurarcene.
Installare:
# yum install hostapd wireless-tools
File di configurazione /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
Senza dimenticarlo per un attimo , modifica i parametri di cui abbiamo bisogno e controlla manualmente la funzionalità:
# hostapd /etc/hostapd/hostapd.conf
hostapd verrà avviato in modalità interattiva, trasmettendo il suo stato alla console. Se non sono presenti errori, i client che supportano la modalità AC saranno in grado di connettersi al punto di accesso. Per interrompere hostapd: Ctrl-C.
Non resta che abilitare hostapd all'avvio del sistema. Se fai la cosa standard (systemctl abilita hostapd), dopo il prossimo riavvio puoi ottenere un demone "rotolare nel sangue" con la diagnosi "interfaccia wl0 non trovata". Come risultato del “caos parallelo”, hostapd si è avviato più velocemente di quanto il kernel abbia trovato l’adattatore wireless.
Internet è piena di rimedi: da un timeout forzato prima di avviare il demone (diversi minuti), a un altro demone che monitora l'aspetto dell'interfaccia e (ri)avvia l'hostpad. Le soluzioni sono abbastanza realizzabili, ma terribilmente brutte. Invochiamo l'aiuto del Grande systemd con i suoi “obiettivi”, “compiti” e “dipendenze”.
Copiare il file del servizio di distribuzione in /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
e ridurne il contenuto nella seguente 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
La magia del file di servizio aggiornato risiede nel collegamento dinamico di hostapd al nuovo target: l'interfaccia wl0. Quando appare l'interfaccia, il demone si avvia; quando scompare, si ferma. E tutto questo è online, senza riavviare il sistema. Questa tecnica sarà particolarmente utile quando si collega un adattatore Wi-Fi USB a un Raspberry.
Ora puoi:
# systemctl enable hostapd
# reboot
7. IPTABLES
“Cosa???” © Sì, sì! Nessuno systemd. Nessuna nuova combinazione (nella forma firewalld), che finiscono per fare la stessa cosa.
Usiamo quello caro vecchio iptables, i cui servizi, dopo l'avvio, caricheranno le regole di rete nel kernel e si spegneranno silenziosamente senza rimanere residenti e senza consumare risorse. systemd ha un elegante IPMasquerade=, ma affideremo comunque la traduzione degli indirizzi (NAT) e il firewall a iptables.
Installare:
# yum install iptables-services
# systemctl enable iptables ip6tables
Preferisco memorizzare la configurazione di iptables come script (esempio):
#!/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
Eseguiamo lo script precedente e perdiamo la possibilità di stabilire nuove connessioni SSH cablate con il Raspberry. Esatto, abbiamo realizzato un router Wi-Fi, il cui accesso “via Internet” è vietato per impostazione predefinita, ora solo “via etere”. Colleghiamo il cavo Ethernet del provider e iniziamo a navigare!
8. Bonus: +2,4 GHz
Quando ho assemblato il primo router Raspberry utilizzando il disegno sopra descritto, ho scoperto nella mia famiglia una serie di gadget che, a causa dei limiti di progettazione Wi-Fi, non riuscivano affatto a vedere il "lampone". Riconfigurare il router per funzionare in 802.11b/g/n è stato antisportivo, poiché la velocità massima "over the air" in questo caso non ha superato i 40 Mbit e il mio provider Internet preferito me ne offre 100 (via cavo).
In realtà, una soluzione era già stata ideata: una seconda interfaccia Wi-Fi operante a 2,4 GHz e un secondo punto di accesso. Presso un chiosco lì vicino, ho acquistato non la prima, ma la seconda chiavetta Wi-Fi USB che ho trovato. Il commesso mi assillava con domande sul chipset e sulla sua compatibilità con i core ARM. Linux e riguardo alla possibilità di lavorare in modalità AP (è stato lui a iniziare per primo).
Configuriamo il "fischio" per analogia con l'adattatore Wi-Fi integrato.
Innanzitutto, rinominiamolo in 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
Affideremo la gestione della nuova interfaccia Wi-Fi a un demone hostapd separato, che si avvierà e si arresterà a seconda della presenza di un “fischio” rigorosamente definito nel sistema: wl1.
File di configurazione /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]
Il contenuto di questo file dipende direttamente dal modello dell'adattatore USB Wi-Fi, quindi un banale copia/incolla potrebbe fallire.
Copiare il file del servizio di distribuzione in /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
e ridurne il contenuto nella seguente 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
Non resta che abilitare una nuova istanza di hostapd:
# systemctl enable hostapd2
È tutto! Tira il "fischio" e il "lampone" stesso, guarda le reti wireless intorno a te.
E infine, voglio avvisarti sulla qualità dell'adattatore Wi-Fi USB e dell'alimentatore del Raspberry. Il “fischio caldo” collegato a volte può causare un “congelamento lampone” a causa di problemi elettrici a breve termine.
Fonte: habr.com
