Raspberry Pi + CentOS = Wi-Fi Hotspot (of Raspberry Red Hat Router)

Daar is 'n groot hoeveelheid inligting op die internet oor die skep van Wi-Fi-toegangspunte gebaseer op 'n Raspberry-enkelbord-rekenaar. As 'n reël word die gebruik van die Raspbian-inheemse bedryfstelsel vir die Framboos geïmpliseer.

Omdat ek 'n bedrewe is van RPM-gebaseerde stelsels, kon ek nie by hierdie klein wonderwerk verbygaan en nie my gunsteling CentOS daarop probeer nie.

Die artikel verskaf instruksies vir die maak van 'n 5GHz / AC Wi-Fi-roeteerder van Raspberry Pi 3 Model B + gebaseer op die CentOS-bedryfstelsel. Daar sal verskeie standaard, maar min bekende truuks wees, en as 'n bonus, 'n tekening om bykomende Wi-Fi-toerusting aan die "framboos" te koppel, sodat dit gelyktydig in verskeie modusse (2,4 + 5GHz) kan werk.

Raspberry Pi + CentOS = Wi-Fi Hotspot (of Raspberry Red Hat Router)
(mengsel van beelde van die publieke domein)

Ons merk dadelik op dat sommige kosmiese snelhede nie sal werk nie. Ek druk 'n maksimum van 100 Mbps van my "framboos" oor die lug, en dit dek die spoed van my internetverskaffer. Hoekom het ons so 'n trae AC nodig, as jy selfs op N in teorie 'n halwe gigabit kan kry? As jy jouself so 'n vraag gevra het, gaan dan na die winkel vir 'n regte router met agt eksterne antennas.

0. Wat jy nodig het

  • Eintlik die einste "framboosproduk" van kaliber: Pi 3 Model B + (om die gesogte 5GHz-spoed en -kanale te bereik);
  • Soliede microSD >= 4GB;
  • Werkstasie met Linux en microSD leser/skrywer;
  • Die teenwoordigheid van voldoende vaardighede in Linux, die artikel is vir die voorbereide Geek;
  • Bedrade netwerk (eth0) konneksie tussen Raspberry en Linux, 'n lopende DHCP-bediener op die plaaslike netwerk en internettoegang vanaf albei toestelle.

'n Klein opmerking oor die laaste punt. "Wat het eerste gekom, die eier of ..." hoe om 'n Wi-Fi-roeteerder te maak in die afwesigheid van enige internettoegangtoerusting? Kom ons los hierdie vermaaklike oefening buite die bestek van die artikel en neem net aan dat die Framboos per draad aan die plaaslike netwerk gekoppel is en toegang tot die internet het. In hierdie geval het ons nie 'n bykomende TV en 'n manipuleerder nodig om die "framboos" op te stel nie.

1. Installeer CentOS

Projek tuisblad

Ten tyde van hierdie skrywe is die lopende weergawe van CentOS op die toestel 32-bis. Iewers op die Wêreldwye Web het ek opinies afgekom oor 'n afname in die werkverrigting van sulke bedryfstelsels op die 64-bis ARM-argitektuur met soveel as 20%. Ek sal hierdie oomblik sonder kommentaar verlaat.

Op Linux, laai die minimale prent af met die kern "-RaspberryPI-"en skryf dit na microSD:

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

Voordat ons die prent begin gebruik, sal ons die SWAP-partisie daarvan verwyder, die wortel na die hele beskikbare volume uitbrei en van SELinux ontslae raak. Die algoritme is eenvoudig: ons maak 'n kopie van die wortel op Linux, vee alle partisies van die microSD uit behalwe die eerste een (/boot), skep 'n nuwe wortel en gee die inhoud van die kopie terug.

Voorbeeld van vereiste aksies (harde konsole-uitvoer)

# 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

Nadat u die inhoud van die wortelpartisie onttrek het, is dit tyd om 'n paar veranderinge daaraan te maak.

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

SELINUX=disabled

Redigering /mnt/etc/fstab, wat slegs twee partisie-inskrywings daarin laat: boot (/boot, onveranderd) en root (ons verander die UUID-waarde, wat gevind kan word deur die uitvoer van die blkid-opdrag op Linux te ondersoek):

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

Laastens verander ons die kernselflaaiparameters: spesifiseer 'n nuwe ligging vir die wortelpartisie, deaktiveer debug-uitvoer, en (opsioneel) verhoed dat die kern IPv6-adresse op netwerkkoppelvlakke toeken:

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

Hier is die inhoud /mnt/cmdline.txt na die volgende vorm (een reël sonder koppeltekens):

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

afwerking:

# cd
# umount /mnt
# sync

Ons herrangskik die microSD na die "framboos", hardloop dit en kry netwerktoegang daartoe via ssh (root / centos).

2. Stel CentOS op

Die eerste drie onwrikbare bewegings: passwd, jy is 'n update, herlaai.

Ons gee netwerkbestuur weg genetwerk:

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

Skep 'n lêer (saam met gidse) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Ons herlaai die "framboos" en weer kry ons netwerktoegang daartoe via ssh (die IP-adres kan verander). Gee aandag aan wat gebruik word /etc/resolv.conf, vroeër geskep deur Network Manager. Daarom, in die geval van probleme met die oplossing, wysig die inhoud daarvan. Gebruik stelsel-opgelos ons sal nie.

Ons verwyder die "oortollige", herstel en versnel die laai van die bedryfstelsel:

# 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

Wie het nodig cron en wat nie die gebou verteer nie systemd timers, kan die vermiste installeer. / var / logen kyk deur joernaal. As jy 'n loggeskiedenis benodig (by verstek word inligting net gestoor vanaf die oomblik dat die stelsel begin is):

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

Deaktiveer die gebruik van IPv6 deur kerndienste (indien nodig)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Die relevansie van tyd op die "framboos" is 'n belangrike ding. Aangesien daar “uit die boks” geen hardeware vermoë is om die huidige toestand van die horlosie te stoor by herlaai nie, is sinchronisasie nodig. 'n Baie goeie en vinnige demoon hiervoor - chrony - is reeds geïnstalleer en begin outomaties. U kan die NTP-bedieners na die naaste verander.

/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

Om die tydsone te stel wat ons sal gebruik truuk. Aangesien ons doel is om 'n Wi-Fi-roeteerder te skep wat teen 5GHz-frekwensies werk, sal ons vooraf voorberei vir verrassings reguleerder:

# yum inligting crda
Opsomming: Regulerende nakoming daemon vir 802.11 draadlose netwerk

Hierdie kwaadwillige ontwerp, wat onder meer op die tydsone fokus, “verbied” die gebruik (in Rusland) van 5GHz-frekwensies en kanale met “groot” getalle. Die truuk is om die tydsone in te stel sonder om die name van die kontinente / stede te gebruik, dit wil sê in plaas van:

# timedatectl set-timezone Europe/Moscow

Ons druk:

# timedatectl set-timezone Etc/GMT-3

En die laaste aanraking in die haarstyl van die stelsel:

# hostnamectl set-hostname router

/root/.bash_profiel:

. . .

# User specific environment and startup programs

export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin

3. CentOS-byvoegings

Alles wat hierbo gesê is, kan beskou word as 'n volledige instruksie vir die installering van vanilla CentOS op 'n Raspberry Pi. Jy behoort 'n rekenaar te kry wat binne minder as 10 sekondes (her)selflaai, minder as 15 MB RAM en 1.5 GB microSD gebruik (minder as 1 GB eintlik as gevolg van die onvolledige /selflaai, maar kom ons wees eerlik).

Om die Wi-Fi-toegangspuntsagteware op hierdie stelsel te installeer, sal jy die vermoëns van die standaard CentOS-verspreiding effens moet uitbrei. Eerstens sal ons die drywer (firmware) van die ingeboude Wi-Fi-adapter “pomp”. Die projek tuisblad sê:

WiFi op die Raspberry 3B en 3B+

Die Raspberry PI 3B/3B+-firmwarelêers mag nie deur die CentOS-projek versprei word nie. U kan die volgende artikels gebruik om die probleem te verstaan, die firmware te kry en die wifi op te stel.

Wat nie by die CentOS-projek toegelaat word nie, word nie vir ons verbied vir persoonlike gebruik nie. Ons vervang die verspreidings-Wi-Fi-firmware in CentOS met die ooreenstemmende een van die Broadcom-ontwikkelaars (daardie gehate binêre blobs ...). Dit sal veral die gebruik van AC in toegangspuntmodus toelaat.

WiFi-firmware-opgraderingOns vind die toestelmodel en die huidige firmwareweergawe uit:

# 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 

Ons sien dat die firmware weergawe 7.45.18 gedateer 01.03.2015/XNUMX/XNUMX is, en onthou die volgende stel nommers: 43455 (brcmfmac43455-sdio.bin)

Laai tans die huidige Raspbian-beeld af. Die lui kan die prent na microSD skryf en die lêers met die firmware van daar af neem. Of jy kan die wortelpartisie van die prent in Linux monteer en van daar af kopieer wat jy nodig het:

# 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

Die resulterende Wi-Fi-adapter-firmwarelêers moet met 'n plaasvervanger vir "framboos" na die gids gekopieer word /usr/lib/firmware/brcm/

Ons herlaai die toekomstige router en glimlag mooi:

# 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 

Weergawe: 7.45.154 vanaf 27.02.2018/XNUMX/XNUMX.

En natuurlik 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. Netwerkkonfigurasie en uitdagings wat voorlê

Soos ons hierbo ooreengekom het, is die "framboos" met "draad" aan die plaaslike netwerk gekoppel. Gestel die verskaffer verskaf ook internettoegang op presies dieselfde manier: die adres in die publieke netwerk word dinamies deur die DHCP-bediener uitgereik (miskien gekoppel aan die MAC). In hierdie geval, na die finale konfigurasie van die "framboos", "prop" net die verskaffer se kabel daarin en jy is klaar. Magtiging gebruik systemd-netwerkd - die onderwerp van 'n aparte artikel en word nie hier oorweeg nie.

Die Wi-Fi-koppelvlak(s) op die Framboos is 'n plaaslike netwerk, en die ingeboude Ethernet-adapter (eth0) is 'n eksterne een. Kom ons nommer die plaaslike netwerk staties, byvoorbeeld: 192.168.0.0/24. Framboos-adres: 192.168.0.1. Die eksterne netwerk (internet) sal 'n DHCP-bediener laat loop.

Naamgewingsprobleem и bekende Guatemalaanse programmeerder - twee probleme wat op almal wag wat betrokke is by die opstel van netwerkkoppelvlakke en dienste in sistemde verspreidings.

Parallelle chaos (liriese afwyking)Lennart Pottering het sy program gemaak systemd Baie goed. Hierdie systemd loods ander programme so vinnig dat hulle aan die begin struikel en val voordat hulle selfs met hul hindernisse begin voordat hulle tyd het om te herstel van die skeidsregter se skop van die fluitjie.

Maar ernstig, die aggressiewe parallellisering van lopende prosesse aan die begin van systemd-OS is 'n soort "donkiebrug" vir geharde seriële LSB-shnikov. Gelukkig blyk dit 'n eenvoudige, maar nie altyd voor die hand liggende, saak te wees om hierdie "parallelle chaos" in orde te stel nie.

Skep twee virtuele brugkoppelvlakke (brug) met konstante name: lan и skop. Ons "koppel" die Wi-Fi-adapter(s) aan die eerste een, en eth0 "frambose" aan die tweede een.

/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=ja elimineer die behoefte om 'n wenk aan die kern via sysctl te gee om roetering moontlik te maak.
MACA-adres= maak kommentaar en verander indien nodig.

Eerstens "koppel" ons eth0. Hou die "probleem van eenvormigheid" in gedagte en gebruik slegs die MAC-adres van hierdie koppelvlak, wat jy byvoorbeeld so kan uitvind:

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

Ons skep /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Vee die vorige eth0-konfigurasielêer uit, herlaai die framboos en kry netwerktoegang daartoe (die IP-adres sal heel waarskynlik verander):

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

5.DNSMASQ

Vir die vervaardiging van Wi-Fi-toegangspunte is niks beter as 'n lieflike paartjie van nie dnsmasq + hostapd nog nie uitgepluis nie. Na my mening.

As iemand vergeet het...hostapd - dit is 'n ding wat Wi-Fi-adapters bestuur (dit sal veral die moeite doen om hulle aan 'n virtuele te koppel lan "frambose"), magtig en registreer draadlose kliënte.

dnsmasq - stel die netwerkstapel kliënte op: gee IP-adresse, DNS-bedieners, verstekpoort en soortgelyke genot uit.

Begin met dnsmasq:

# yum install dnsmasq

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

wysig dit na jou smaak.

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

Die "magic" hier lê in die parameter bind dinamiese, wat die dnsmasq-demoon vertel om te wag vir die koppelvlak=lan, en nie flou word van 'n aanval van trotse eensaamheid na die wegspring nie.

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

6. GASHUIS

En laastens, die magiese hostapd-konfigurasies. Ek het geen twyfel dat iemand hierdie artikel lees op soek na hierdie gekoesterde lyne nie.

Voordat jy hostapd installeer, moet jy die "uniformiteitsprobleem" hanteer. Die ingeboude Wi-Fi-adapter wlan0 kan maklik sy naam na wlan1 verander wanneer bykomende USB Wi-Fi-toerusting gekoppel word. Daarom maak ons ​​die koppelvlakname op die volgende manier reg: ons sal met unieke name vir (draadlose) adapters vorendag kom en dit aan MAC-adresse bind.

Vir die ingeboude Wi-Fi-adapter, wat steeds wlan0 is:

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

Ons skep /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Nou sal ons seker wees daarvan wl0 is ingeboude Wi-Fi. Ons herlaai die "framboos" om seker te maak hiervan.

Installeer:

# yum install hostapd wireless-tools

Konfigurasie lêer /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

Moenie vir 'n oomblik vergeet nie GKChP, verander die parameters wat ons benodig en kontroleer handmatig vir prestasie:

# hostapd /etc/hostapd/hostapd.conf

hostapd sal in interaktiewe modus begin en sy status na die konsole uitsaai. As daar geen foute is nie, kan kliënte wat AC-modus ondersteun reeds aan die toegangspunt koppel. Om hostapd te stop - Ctrl-C.

Dit bly om hostapd by die opstart van die stelsel in te sluit. As jy as standaard optree (systemctl aktiveer hostapd), dan kan jy na die volgende herlaai 'n "rol in die bloed" demoon kry met 'n diagnose van "koppelvlak wl0 nie gevind nie". As gevolg van die "parallelle chaos", het hostapd vinniger begin as wat die kern die draadlose adapter gevind het.

Die internet is vol kure: van 'n gedwonge uitteltyd voordat die daemon begin word ('n paar minute), tot 'n ander daemoon wat die voorkoms van die koppelvlak monitor en hostpad (her)begin. Die oplossings werk nogal, maar verskriklik lelik. Ons doen 'n beroep op die hulp van die grotes systemd met sy "doelwitte" en "doelwitte" "afhanklikhede".

Kopieer die verspreidingsdienslêer na /etc/systemd/system/hostapd.service:

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

en bring die inhoud na die volgende vorm:

[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

Die magie van die opgedateerde dienslêer is om hostapd dinamies aan 'n nuwe teiken, die wl0-koppelvlak, te bind. Wanneer 'n koppelvlak verskyn, begin die daemon, wanneer dit verdwyn, stop dit. En dit is alles aanlyn – sonder om die stelsel te herlaai. Hierdie tegniek sal veral nuttig wees wanneer 'n USB Wi-Fi-adapter aan 'n framboos gekoppel word.

Nou kan jy:

# systemctl enable hostapd
# reboot

7.IPTABELS

"Wat???" © Ja, ja! Geen systemd. Geen nuwerwetse kombinasies (in die vorm vuurmuur), wat uiteindelik dieselfde ding doen.

Ons gebruik die goeie oue iptables, wie se dienste, na hul aanvang, netwerkreëls in die kern sal laai en stilweg hul werk voltooi sonder om inwoner te bly en sonder om hulpbronne te verbruik. systemd het elegante IPMasquerade=, maar ons sal steeds adresvertaling (NAT) en die firewall aan iptables toevertrou.

Installeer:

# yum install iptables-services
# systemctl enable iptables ip6tables

Ek verkies om die iptables-konfigurasie as 'n skrip te stoor (voorbeeld):

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

Ons voer die bogenoemde skrif uit en verloor die vermoë om nuwe bedrade ssh-verbindings met die "framboos" te vestig. Dis reg, ons het 'n Wi-Fi-roeteerder gemaak, toegang waartoe "via die internet" by verstek verbied is - nou net "oor die lug". Ons koppel die verskaffer se kabel aan Ethernet en begin navigeer!

8. Bonus: +2,4GHz

Toe ek, volgens die bostaande tekening, die eerste Framboos-roeteerder saamgestel het, het ek 'n aantal toestelle in my huishouding gevind wat, as gevolg van hul Wi-Fi-ontwerpbeperkings, glad nie die "framboos" kon sien nie. Om die router te herkonfigureer om in 802.11b / g / n te werk, was onsportief, aangesien die maksimum spoed "oor die lug" in hierdie geval nie 40 Mbps oorskry het nie, en my gunsteling internetverskaffer bied my 100 (per kabel).

Trouens, daar is reeds aan die oplossing vir die probleem gedink: 'n tweede Wi-Fi-koppelvlak wat op 2,4GHz werk en 'n tweede toegangspunt. In die naaste stalletjie het ek nie die eerste nie, maar die tweede USB Wi-Fi “fluit” gekoop wat op my afgekom het. Die verkoper is geteister deur vrae oor die skyfiestel, verenigbaarheid met Linux ARM-pitte en die vermoë om in AP-modus te werk (hy het dit eerste begin).

Ons stel die "fluit" in analogie met die ingeboude Wi-Fi-adapter.

Kom ons hernoem dit eers na 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

Ons sal 'n aparte hostapd-demoon toewys om die nuwe Wi-Fi-koppelvlak te bestuur, wat sal begin en stop afhangende van die teenwoordigheid van 'n streng gedefinieerde "fluitjie" in die stelsel: wl1.

Konfigurasie lêer /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]

Die inhoud van hierdie lêer hang direk af van die USB Wi-Fi-adaptermodel, so 'n banale kopie / plak kan jou in die steek laat.

Kopieer die verspreidingsdienslêer na /etc/systemd/system/hostapd2.service:

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

en bring die inhoud na die volgende vorm:

[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

Dit bly om die nuwe hostapd-instansie te aktiveer:

# systemctl enable hostapd2

Dis al! Trek die "fluit" en die "framboos" self, kyk na die draadlose netwerke rondom.

En laastens wil ek jou waarsku oor die kwaliteit van die USB Wi-Fi-adapter en Raspberry-kragtoevoer. Gekoppel "op 'n warm fluitjie", kan soms veroorsaak "framboos hang" as gevolg van korttermyn elektriese probleme.

Bron: will.com

Voeg 'n opmerking