Raspberry Pi + CentOS = Wi-Fi Hotspot (o router raspberry cù un cappellu rossu)

Ci hè una quantità enorme d'infurmazioni in Internet nantu à a creazione di punti d'accessu Wi-Fi basatu nantu à un PC Raspberry unicu. Comu regula, questu significa aduprà u sistema operatore Raspbian nativu di u Raspberry.

Essendu un aderente di sistemi basati in RPM, ùn pudia micca passà da stu picculu miraculu è ùn pruvà micca u mo amata CentOS.

L'articulu furnisce struzzioni per fà un router Wi-Fi 5GHz / AC da un Raspberry Pi 3 Model B + basatu annantu à u sistema operatore CentOS. Ci saranu parechji trucchi standard, ma pocu cunnisciuti, è cum'è bonus - un disegnu per cunnette l'equipaggiu Wi-Fi supplementu à u Raspberry, chì permette di operare simultaneamente in parechji modi (2,4 + 5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (o router raspberry cù un cappellu rossu)
(mix d'imaghjini liberamente dispunibili)

Avemu da nutà subitu chì alcune velocità cosmiche ùn anu micca travagliatu. I squeeze a maximum of 100 Mbps out of my Raspberry over the air, è questu copre a velocità di u mo fornitore di Internet. Perchè avete bisognu di un AC cusì lento, se in teoria pudete ottene a mità di gigabit ancu in N? Sè vo avete dumandatu sta quistione, andate à a tenda per cumprà un veru router cù ottu antenne esterne.

0. Chì avete bisognu

  • In realtà, u "pruduttu lampone" stessu hè di calibre: Pi 3 Model B + (per ghjunghje à a velocità è i canali 5GHz bramati);
  • Bonu microSD>= 4GB;
  • Workstation cù Linux è lettore / scrittore microSD;
  • Disponibilità di cumpetenze sufficienti in Linux, l'articulu hè per un Geek furmatu;
  • Connettività di rete cablata (eth0) trà Raspberry è Linux, esecuzione di u servitore DHCP in a reta lucale è accessu à Internet da i dui dispositi.

Un picculu cumentu nantu à l'ultimu puntu. "Quale hè vinutu prima, l'ovu o ..." cumu fà un router Wi-Fi in l'absenza di qualsiasi equipamentu di accessu à Internet? Lasciemu stu esercitu divertenti fora di u scopu di l'articulu è simpricimenti assume chì u Raspberry hè cunnessu à a reta lucale per filu è hà accessu à Internet. In questu casu, ùn avemu micca bisognu di una TV supplementu è di un manipulatore per stabilisce u "raspberry".

1. Installa CentOS

Pagina iniziale di u prughjettu

À u mumentu di a scrittura di stu articulu, a versione in esecuzione di CentOS in u dispusitivu hè 32-bit. In qualchì locu nantu à a World Wide Web, aghju trovu opinioni chì u rendiment di tali OS in l'architettura ARM 64-bit hè ridutta finu à u 20%. Lasceraghju stu mumentu senza cumentu.

In Linux, scaricate l'imagine minima cù u kernel "-RaspberryPI-"è scrivite à microSD:

# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz | 
  dd of=/dev/mmcblk0 bs=4M
# sync

Prima di principià à utilizà l'imaghjini, sguassemu a partizione SWAP da ellu, espansione a radica à tuttu u voluminu dispunibule è sguassate SELinux. L'algoritmu hè simplice: fate una copia di a radica in Linux, sguassate tutte e partizioni da u microSD eccettu u primu (/boot), crea una nova radica è torna u so cuntenutu da a copia.

Esempiu d'azzioni necessarii (output severu di a cunsola)

# 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

Dopu avè sbulicatu u cuntenutu di a partizione radicali, hè ora di fà qualchi cambiamenti.

Disattiva SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Edizione /mnt/etc/fstab, lascendu in questu solu duie entrate nantu à e partizioni: boot (/boot, no changes) è root (cambiamu u valore UUID, chì pò esse scupertu studiendu l'output di u cumandamentu blkid in Linux):

UUID=6a1a0694-8196-4724-a58d-edde1f189b31  /     ext4    defaults,noatime 0 0
UUID=6938-F4F2                             /boot vfat    defaults,noatime 0 0

Infine, cambiamu i paràmetri di boot di u kernel: specifiemu un novu locu per a partizione radicali, disattiveghjanu l'output di l'infurmazioni di debugging è (opcionalmente) pruibite u kernel d'assignà l'indirizzi IPv6 in l'interfacce di rete:

# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt

Eccu u cuntenutu /mnt/cmdline.txt à a forma seguente (una riga senza trattini):

root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1

Fattu:

# cd
# umount /mnt
# sync

Riarrangemu a microSD in u "raspberry", lanciamu è uttene accessu à a rete via ssh (root/centos).

2. Stallà CentOS

I primi trè movimenti irremovibili: passwd, yum -y actualizazione, reboot.

Demu a gestione di a rete in rete:

# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off

Crea un schedariu (inseme cù cartulari) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Riavvia u "raspberry" è torna l'accessu à a rete via ssh (l'indirizzu IP pò cambià). Attenti à ciò chì hè utilizatu /etc/resolv.conf, creatu prima da Network Manager. Dunque, in casu di prublemi cù risolve, edità u so cuntenutu. Aduprà systemd-risolta ùn avemu micca.

Eliminate u "innecessariu", riparà è accelerà a carica di u 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

Quale hè bisognu CRON è chì ùn digerisce micca u integratu timers di sistema, pò stabilisce ciò chì manca. / var / log- è guardà à traversu journalctl. Sè avete bisognu di a storia di log (per difettu, l'infurmazione hè almacenata solu da u mumentu chì u sistema principia):

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf

Disattivate l'usu di IPv6 da i servizii basi (se necessariu)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

A rilevanza di u tempu nantu à u "raspberry" hè una cosa impurtante. Siccomu fora di a scatula ùn ci hè micca capacità hardware per salvà u statu attuale di u clock à u reboot, a sincronizazione hè necessaria. Un demone assai bonu è veloce per questu hè crononia - digià stallatu è principia automaticamente. Pudete cambià i servitori NTP à i più vicini.

/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

Per stabilisce u fusu orariu avemu aduprà truccu. Siccomu u nostru scopu hè di creà un router Wi-Fi chì opera à frequenze 5GHz, avemu preparatu per sorprese in anticipu. regulatore:

# yum info crda
Riassuntu: Daemon di conformità regulatoria per a rete wireless 802.11

Stu disegnu male, ancu basatu annantu à u fusu orariu, "pruibisce" l'usu (in Russia) di frequenze 5GHz è canali cù numeri "alti". U truccu hè di stabilisce un fusu orariu senza aduprà i nomi di cuntinenti / cità, vale à dì invece di:

# timedatectl set-timezone Europe/Moscow

Pressemu:

# timedatectl set-timezone Etc/GMT-3

È i tocchi finali à u hairstyle di u 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. Add-ons CentOS

Tuttu ciò chì hè dettu sopra pò esse cunsideratu struzzioni cumpleta per installà "vanilla" CentOS nantu à u Raspberry Pi. Duvete finisce cù un PC chì (ri)boot in menu di 10 seconde, usa menu di 15 Megabytes di RAM è 1.5 Gigabytes di microSD (in realtà menu di 1 Gigabyte per via di un /boot incompletu, ma siamu onesti).

Per installà u software di puntu d'accessu Wi-Fi in questu sistema, avete bisognu di espansione ligeramente e capacità di a distribuzione standard CentOS. Prima di tuttu, aghjurnà u driver (firmware) di l'adattatore Wi-Fi integratu. A pagina iniziale di u prughjettu dice:

Wifi nantu à u Raspberry 3B è 3B+

I schedarii di firmware Raspberry PI 3B/3B+ ùn sò micca permessi di esse distribuiti da u Prughjettu CentOS. Pudete utilizà l'articuli seguenti per capisce u prublema, uttene u firmware è cunfigurà u wifi.

Ciò chì hè pruibitu per u prughjettu CentOS ùn hè micca pruibitu per noi per usu persunale. Sustituemu u firmware di distribuzione Wi-Fi in CentOS cù u currispundente da i sviluppatori Broadcom (quelli stessi blob binari odiati...). Questu, in particulare, vi permetterà di utilizà AC in modu di puntu d'accessu.

Actualizazione di firmware Wi-FiScuprite u mudellu di u dispusitivu è a versione di firmware attuale:

# 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 

Avemu vistu chì a versione di firmware hè 7.45.18 datata 01.03.2015/XNUMX/XNUMX, è ricurdate u seguitu serie di numeri: 43455 (brcmfmac43455-sdio.bin).

Scaricate l'imagine attuale di Raspbian. I pigri pò scrive l'imaghjini à microSD è piglià i schedari cù u firmware da quì. O pudete muntà a partizione radicali di l'imaghjini in Linux è copià ciò chì avete bisognu da quì:

# 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 schedarii di firmware di l'adattatore Wi-Fi risultanti devenu esse copiati è rimpiazzati cù "raspberry" in u cartulare /usr/lib/firmware/brcm/

Riavviamu u futuru router è sorrisemu cuntentu:

# 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 datata 27.02.2018/XNUMX/XNUMX.

È di sicuru 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. Cunfigurazione di a rete è sfide avanti

Cumu avemu accunsentutu sopra, u "raspberry" hè cunnessu per "filu" à a reta lucale. Assumimu chì u fornitore furnisce l'accessu à Internet esattamente in u listessu modu: l'indirizzu nantu à a reta publica hè emessu dinamicamente da u servitore DHCP (forse cù u ligame MAC). In questu casu, dopu a cunfigurazione finale di u raspberry, avete bisognu di "plug" u cable di u fornitore in questu è avete finitu. Autorizazione usendu systemd-networkd - u tema di un articulu separatu è ùn hè micca discututu quì.

L'interfaccia (s) Wi-Fi di Raspberry hè una reta lucale, è l'adattatore Ethernet integratu (eth0) hè esternu. Numeremu a rete locale in modu staticu, per esempiu: 192.168.0.0/24. Indirizzu Raspberry: 192.168.0.1. Un servitore DHCP operarà nantu à a reta esterna (Internet).

Prublemu di cunsistenza di nomi и famosu programatore Guatemalan - dui prublemi chì aspettanu à qualchissia chì cunfigurà interfacce di rete è servizii in distribuzioni systemd.

Caos parallelu (digressione lirica)Lennart Pottering hà cumpilatu u so propiu prugramma systemd Assai bonu. Questu systemd lancia altri prugrammi cusì prestu chì, senza avè u tempu di ricuperà da u colpu di l'arbitru di u fischiu, inciampate è cascanu à u principiu senza mancu principià a so corsa d'ostaculi.

Ma seriamente, a parallelizazione aggressiva di i prucessi lanciati à l'iniziu di u sistema OS hè una spezia di "ponte di sumere" per i specialisti LSB sequenziali stagionati. Fortunatamente, mette l'ordine à questu "caosu parallelu" hè simplice, ancu s'ellu ùn hè micca sempre evidenti.

Creemu dui interfacce di ponte virtuale cù nomi custanti: L lan и wan. "Connettaremu" l'adattatori Wi-Fi à u primu, è l'eth0 "raspberry" à u sicondu.

/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 a necessità di indicà à u kernel via sysctl per attivà u routing.
MACAddress = Scommentemu è cambiate se ne necessariu.

Prima avemu "cunnessu" eth0. Ricurdamu u "prublemu di uniformità" è utilizate solu l'indirizzu MAC di sta interfaccia, chì pò esse scuperta, per esempiu, cusì:

# cat /sys/class/net/eth0/address 

Creemu /etc/systemd/network/eth.network:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Network]
Bridge=wan

Sguassemu u schedariu di cunfigurazione precedente eth0, riavviate u Raspberry è uttene accessu à a rete (l'indirizzu IP serà più prubabilmente cambiatu):

# rm -fv /etc/systemd/network/eth0.network
# reboot

5.DNSMASQ

Per fà punti d'accessu Wi-Fi, nunda batte un dolce coppiu di dnsmasq + hostapd ùn l'avete ancora capitu. Secondu mè.

In casu chì qualcunu s'hè scurdatu, allora ...hostapd - questu hè a cosa chì cuntrolla l'adattatori Wi-Fi (in particulare, hà da piglià a cura di cunnetta à u virtuale). L lan "raspberries"), autorizeghja è registra i clienti wireless.

dnsmasq - cunfigurà a pila di rete di clienti: emette indirizzi IP, servitori DNS, gateway predeterminatu è piacè simili.

Cuminciamu cù dnsmasq:

# yum install dnsmasq

Pattern /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

editallu à u vostru piace.

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 "magia" quì si trova in u paràmetru bind-dinamica, chì dice à u daemon dnsmasq d'aspittà finu à chì apparisce in u sistema interfaccia = lan, è micca sbulicatu da una fiura di fiera sulitudine dopu à u principiu.

# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f

6. HOSTAPD

È infine, e cunfigurazioni magic hostapd. Ùn aghju micca dubbitu chì qualcunu sta leghje stu articulu in cerca di precisamente queste linee preziose.

Prima di stallà hostapd, avete bisognu di superà u "prublemu di uniformità". L'adattatore Wi-Fi integratu wlan0 pò facilmente cambià u so nome à wlan1 quandu si cunnessa l'equipaggiu USB Wi-Fi supplementu. Per quessa, avemu da riparà i nomi di l'interfaccia in a seguente manera: avemu da vene cun nomi unichi per l'adattatori (wireless) è ligami à l'indirizzi MAC.

Per l'adattatore Wi-Fi integratu, chì hè sempre wlan0:

# cat /sys/class/net/wlan0/address 
b8:27:eb:xx:xx:xx

Creemu /etc/systemd/network/wl0.link:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Link]
Name=wl0

Avà saremu sicuru chì wl0 - Questu hè Wi-Fi integratu. Riavvia u Raspberry per assicurà questu.

Installa:

# yum install hostapd wireless-tools

File di cunfigurazione /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 scurdà un mumentu Cumitatu di Emergenza Statale, cambiate i paràmetri chì avemu bisognu è verificate manualmente a funziunalità:

# hostapd /etc/hostapd/hostapd.conf

hostapd cumminciarà in modu interattivu, trasmette u so statu à a cunsola. Se ùn ci sò micca errori, i clienti chì supportanu u modu AC puderanu cunnette à u puntu d'accessu. Per piantà hostapd - Ctrl-C.

Tuttu ciò chì resta hè di attivà hostapd in l'iniziu di u sistema. Se fate a cosa standard (systemctl enable hostapd), dopu à u prossimu reboot pudete ottene un demoniu "rotulendu in sangue" cù u diagnosticu "interfaccia wl0 micca trovu". In u risultatu di u "caosu parallelu", hostapd hà iniziatu più veloce chì u kernel hà truvatu l'adattatore wireless.

L'Internet hè pienu di rimedii: da un timeout forzatu prima di inizià u daemon (parechji minuti), à un altru daemon chì monitorizza l'aspettu di l'interfaccia è (re)start the hostpad. I suluzioni sò abbastanza fattibili, ma terribilmente brutti. Chjamemu u grande per aiutu systemd cù i so "obiettivi" è "compiti" è "dipendenze".

Copia u schedariu di serviziu di distribuzione à /etc/systemd/system/hostapd.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system

è riduce u so cuntenutu à a forma seguente:

[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 di u schedariu di serviziu aghjurnatu si trova in u ligame dinamicu di hostapd à u novu scopu - l'interfaccia wl0. Quandu l'interfaccia appare, u daemon principia; quandu sparisce, si ferma. È questu hè tuttu in linea - senza rebooting u sistema. Sta tecnica serà soprattuttu utile quandu cunnette un adattatore USB Wi-Fi à un Raspberry.

Avà pudete:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Chì???" © Iè, sì! Nimu systemd. Nisuna combinazione nova (in a forma firewalld), chì finiscinu per fà a stessa cosa.

Adupremu u bonu vechju iptables, chì i servizii, dopu avè principiatu, carricà e regule di a rete in u kernel è si chjude in silenziu senza esse residente è senza cunsumà risorse. systemd hà un eleganti IPMasquerade =, ma avemu sempre affidatu a traduzzione di l'indirizzu (NAT) è u firewall à iptables.

Installa:

# yum install iptables-services
# systemctl enable iptables ip6tables

Preferite almacenà a cunfigurazione iptables cum'è un script (esempiu):

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

Eseguimu l'script di sopra è perdemu a capacità di stabilisce novi cunnessione SSH cablata cù u Raspberry. Hè propiu, avemu fattu un router Wi-Fi, l'accessu à quale "via Internet" hè pruibitu per difettu - avà solu "over the air". Cunnettemu u cable Ethernet di u fornitore è cuminciamu à navigà!

8. Bonus: + 2,4GHz

Quandu aghju assemblatu u primu router Raspberry utilizendu u disegnu descrittu sopra, aghju scupertu una quantità di gadgets in a mo casa chì, per via di e so limitazioni di designu Wi-Fi, ùn pudianu micca vede u "raspberry" in tuttu. A ricunfigurazione di u router per travaglià in 802.11b/g/n era antisportiva, postu chì a velocità massima "over the air" in questu casu ùn superava 40 Mbit, è u mo fornitore di Internet preferitu m'offre 100 (via cable).

In fatti, una suluzione à u prublema hè digià inventata: una seconda interfaccia Wi-Fi chì opera à una freccia di 2,4 GHz, è un secondu puntu d'accessu. In una stalla vicinu ùn aghju compru micca u primu, ma u sicondu USB Wi-Fi "fischiu" aghju scontru. U vinditore era turmentatu da e dumande nantu à u chipset, a cumpatibilità cù i kernels ARM Linux è a pussibilità di travaglià in modu AP (era u primu à principià).

Configuremu u "fischiu" per analogia cù l'adattatore Wi-Fi integratu.

Prima, rinominemu 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

Affideremu a gestione di a nova interfaccia Wi-Fi à un daemon hostapd separatu, chì accuminciarà è cessà secondu a presenza di un "fischiu" strettamente definitu in u sistema: wl1.

File di cunfigurazione /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]

U cuntenutu di stu schedariu dipende direttamente da u mudellu di l'adattatore USB Wi-Fi, cusì una copia / incolla banale pò falla.

Copia u schedariu di serviziu di distribuzione à /etc/systemd/system/hostapd2.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service

è riduce u so cuntenutu à a forma seguente:

[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

Tuttu ciò chì resta hè di attivà una nova istanza di hostapd:

# systemctl enable hostapd2

Eccu tuttu! Tira u "fischiu" è u "raspberry" stessu, fighjate à e rete wireless intornu à voi.

È infine, vogliu avvistà di a qualità di l'adattatore USB Wi-Fi è l'alimentazione di u Raspberry. U "fischiu caldu" cunnessu pò à volte causà "congelazione di lamponi" per via di prublemi elettrici di cortu termine.

Source: www.habr.com

Add a comment