Në internet ka një mori informacioni mbi krijimin e pikave të qasjes Wi-Fi në bazë të kompjuterëve me një pllakë Raspberry. Zakonisht, supozohet që të përdoret sistemi operativ origjinal për 'malinën' — Raspbian.
Si adhurues i sistemeve të bazuara në RPM, nuk mund të kaloja pa këtë mrekulli të vogël dhe të provoja CentOS-n time të preferuar mbi të.
Ky artikull ofron një udhëzues për ndërtimin e një routeri Wi-Fi 5GHz/AC nga Raspberry Pi 3 Model B+ në bazë të sistemit operativ CentOS. Do të përfshihen disa truke standarde, por të panjohura, dhe si dhuratë — një skemë lidhjeje për pajisje të tjera Wi-Fi që lejon 'malinën' të funksionojë në disa mënyra (2.4+5GHz) në të njëjtën kohë.

(përzierje imazhesh nga burime të lira)
Le të theksojmë menjëherë se nuk do të arrijmë ndonjë shpejtësi kozmike. Unë nxjerr nga 'malina' ime maksimumi 100 Mbit në ajër, dhe kjo mbulon shpejtësinë e ofruesit tim të internetit. Pse është e nevojshme një AC kaq e ngadaltë, kur edhe në N teori mund të arrish gjysmë gigabiti? Nëse keni bërë këtë pyetje, shkoni në dyqan për një router të vërtetë me tetë antena të jashtme.
0. Çfarë do të nevojitet
- Në thelb, vetë 'malina' e kalibrit: Pi 3 Model B+ (për të arritur shpejtësi dhe kanale 5GHz të dëshiruara);
- MicroSD e mirë >= 4GB;
- Një stacion pune me Linux dhe një lexues/shkrues microSD;
- Të kesh aftësi të mjaftueshme në Linux, ky artikull — për Gikun e përgatitur;
- Një lidhje të kablluar (eth0) midis Raspberry dhe Linux, një server DHCP aktiv në rrjetin lokal dhe qasje në internet në të dy pajisjet.
Një koment i vogël mbi pikën e fundit. ‘Çfarë doli e para, veza apo…’ si të krijosh një router Wi-Fi në mungesë të çdo pajisjeje që ofron qasje në internet? Ta lëmë këtë ushtrim tërheqës jashtë kuadrit të artikullit dhe le të supozojmë se Raspberry është lidhur me rrjetin lokal me kabllo dhe ka qasje në internet. Në këtë rast, nuk do të na nevojiten televizor dhe manipulues të jashtëm për konfigurimin e 'malinës'.
1. Instalimi i CentOS
Në momentin e shkrimit të këtij artikulli, versioni aktiv i CentOS në pajisje është 32-bit. Diku në hapësirat e internetit kam ndeshur mendime për një rënie të performancës së këtyre sistemeve operative në arkitekturën 64-bit ARM deri në 20%. Do ta lë këtë moment pa koment.
Në Linux shkarkojmë imazhin minimal me bërthamën “-RaspberryPI-» dhe e regjistrojmë atë në microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Para fillimit të përdorimit të imazhit, do të hiqnim nga ai ndarjen SWAP, do të zgjeronim rrënjën në gjithë kapacitetin e disponueshëm dhe do të shpëtonim nga SELinux. Algoritmi është i thjeshtë: bëjmë një kopje të rrënjës në Linux, fshijmë nga microSD të gjitha ndarjet përveç të parës (\/boot), krijojmë një rrënjë të re dhe kthejmë përmbajtjen e saj nga kopja.
Shembulli i veprimeve të nevojshme (dalja e ashpër në konsolë)
# 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
Pas nxjerrjes së përmbajtjes nga ndarja e rrënjës, është koha për të bërë disa ndryshime në të.
Çaktivizojmë SELinux në /mnt/etc/selinux/config:
SELINUX=disabled
Editojmë /mnt/etc/fstab, duke lënë në të vetëm dy regjistrime për ndarjet: ndarja e ngarkimit (\/boot, pa ndryshime) dhe rrënja (ndryshojmë vlerën UUID, e cila mund të merret duke studiuar daljen e komandës blkid në Linux):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 \/ ext4 defaults,noatime 0 0
UUID=6938-F4F2 \/boot vfat defaults,noatime 0 0
Së fundmi, ndryshojmë parametrat e ngarkimit të bërthamës: tregojmë vendndodhjen e re të ndarjes rrënjë, çaktivizojmë shkarkimin e informacionit për debug dhe (opsionale) ndalojmë bërthamën të caktojë adresa IPv6 në ndërfaqet rrjetë:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Dërgojmë përmbajtjen /mnt/cmdline.txt në formën e mëposhtme (një rresht pa ndarjen):
root=\/dev\/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Përfunduan:
# cd
# umount /mnt
# sync
Hedhim microSD në «malin», e nisëm dhe marrim qasjen në të përmes ssh (root\/centos).
2. Konfigurimi i CentOS
Tre lëvizjet e para të pandryshueshme: passwd, yum -y update, reboot.
Menaxhimin e rrjetit e besojmë networkd:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Krijojmë skedarin (së bashku me katalogët) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Risjellim «malin» dhe përsëri marrim qasjen në të përmes ssh (IP adresa mund të ndryshojë). Vini re se po përdoret /etc/resolv.conf, i krijuar më parë nga Network Manager. Prandaj, në rast problemesh me resolve, redaktoni përmbajtjen e tij. Të përdorim systemd-resolved nuk do të bëjmë.
Heqim “gjërat e tepërta”, riparojmë dhe përshpejtojmë ngarkimin e OS-së:
# 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
Kush ka nevojë për cron dhe kush nuk e përballon të integruarit , mund të instalojë ato që mungojnë. /var/log-dhe shikojmë përmes journalctl. Nëse është nevoja për historikun e gazetës (normalisht ruhet informacioni vetëm që nga fillimi i sistemit):
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Çaktivizojmë përdorimin e IPv6 nga shërbimet kryesore (nëse kërkohet)/etc/ssh/sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Rëndësia e kohës në «malinka» është një gjë e rëndësishme. Për shkak se «nga fabrika» nuk ka mundësi hardware për të ruajtur gjendjen aktuale të orës në r reboot, sincronizimi është i nevojshëm. Një demon shumë i mirë dhe i shpejtë për këtë është chrony — tashmë është instaluar dhe starton automatikisht. Mund të ndryshoni serverët NTP në më të afërt.
/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
Për të vendosur zonën e kohës do të përdorim një trik. Pasiqë qëllimi ynë është krijimi i një router Wi-Fi që punon në frekuencat 5GHz, le të përgatitemi për surpriza regullatori:
# yum info crda
Përmbledhje: Demon për pajtueshmërinë me rregullat për rrjetin wireless 802.11
Kjo konstrukcion e keqe, duke u orientuar edhe në zonën e kohës, "ndalon" përdorimin (në Rusi) të frekuencave 5GHz dhe kanaleve me numra "të lartë". Triku qëndron në vendosjen e zonës së kohës pa përdorur emrat e kontinenteve/ qyteteve, domethënë në vend të:
# timedatectl set-timezone Europe/Moscow
Shtypim:
# timedatectl set-timezone Etc/GMT-3
Dhe prekurat përfundimtare në pamjen e sistemit:
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# Mjedisi dhe programet e nisjes specifike për përdoruesin
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. Shtesat për CentOS
Gjithë ajo që u tha më sipër mund të konsiderohet një udhëzues përfundimtar për instalimin e «vanilla» CentOS në Raspberry Pi. Ju duhet të keni një PC që (r)ngarkon për më pak se 10 sekonda, përdor më pak se 15 Megabayt RAM dhe 1.5 Gigabayt microSD (në të vërtetë më pak se 1 Gigabayt për shkak të pjesëmarrjes së pamjaftueshme /boot, por të jemi të sinqertë deri në fund).
Për të instaluar softuerin e pikës së qasje Wi-Fi në këtë sistem do të kërkohet të zgjeroni disi mundësitë e shpërndarjes së standardit CentOS. Para së gjithash, do të "aktivojmë" drajverin (firmware) të adapterit të integruar Wi-Fi. Në faqen kryesore të projektit thuhet:
Wifi në Raspberry 3B dhe 3B+
Skedarët e firmware për Raspberry PI 3B/3B+ nuk lejohet të shpërndahen nga Projekti CentOS. Mund të përdorni artikujt e mëposhtëm për të kuptuar çështjen, për të marrë firmware dhe për të konfiguruar Wi-Fi.
Ajo që nuk lejohet për projektin CentOS, nuk është e ndaluar për ne për përdorim personal. Zëvendësojmë firmware-n e shpërndarjes së Wi-Fi në CentOS me atë përkatëse nga zhvilluesit e Broadcom (ato të tmerrshmet binarë…). Kjo, në veçanti, do të lejojë përdorimin e AC në mënyrën e pikës së qasje.
Përmirësimi i firmware për Wi-FiKushptojmë modelin e pajisjes dhe versionin aktual të 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
Shohim se firmware ka versionin 7.45.18 nga 01.03.2015, dhe mbajmë mend setin e mëposhtëm të numrave: 43455 (brcmfmac43455-sdio.bin).
. Të lenjtë mund ta regjistrojnë imazhin në microSD dhe nga aty të marrin skedarët e firmware-it. Ose mund ta montoni sektorin e rrënjës së imazhit në Linux dhe të kopjoni atë që ju nevojitet nga aty:
# 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
Skedarët e marra të firmware-it të adapterit Wi-Fi duhet të kopjohen me zëvendësim në «malinkë» në katalog /usr/lib/firmware/brcm/
Rikthejmë router-in e ardhshëm dhe qeshim të kënaqur:
# 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
Versioni: 7.45.154 nga 27.02.2018.
E sigurisht 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. Konfigurimi i rrjetit dhe vështirësitë e ardhshme
Siç u ra dakord më sipër, «malinka» është e lidhur me kabllo me rrjetin lokal. Le të supozojmë që edhe ofruesi ofron qasje në Internet në të njëjtën mënyrë: adresa në rrjetin publik jepet dinamikisht nga serveri DHCP (mund të jetë e lidhur me MAC). Në këtë rast, pas përfundimit të konfigurimit të «malinkës», mjafton të lidhni kabllon e ofruesit dhe gjithçka është gati. Autentifikimi me systemd-networkd — është një temë e veçantë artikulli dhe nuk shqyrtohet këtu.
Interfaci(i) Wi-Fi në Raspberry është rrjeti lokal, ndërsa adapteri Ethernet (eth0) është i jashtëm. Ne do ta numërojmë rrjetin lokal statikisht, për shembull: 192.168.0.0/24. Adresa e «malinkës»: 192.168.0.1. Në rrjetin e jashtëm (Internet) do të funksionojë serveri DHCP.
dhe — dy probleme që presin çdo kush që merret me konfigurimin e interfazave të rrjetit dhe shërbimeve në distribucione të systemd.
Kaosi paralel (një pasazh lirik)Lennart Pottering hartoi programin e tij systemd shumë mirë. Ky systemd nis programe të tjera kaq shpejt sa ato, pa pasur mundësinë të mendojnë nga goditja e gjykatës, pengohen dhe bien në start madje pa filluar garën e tyre me pengesa.
Por seriozisht, paralelizimi agresiv i proceseve të nisura gjatë nisjes së sistemit systemd është një lloj «urë e gomarit» për specialistët e rreptë të LSB. Fatmirësisht, sjellja në rend të këtij «kaosi paralel» rezulton të jetë një gjë e thjeshtë, por jo gjithmonë e dukshme.
Krijojmë dy interfaca virtuale-urë (bridge) me emra të përhershëm: lan dhe wan. Në të parin do «lidhemi» me adapterin Wi-Fi, ndërsa në të dytin — eth0 të «malinkës».
/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=yes heq nevojën për të treguar kernel-it përmes sysctl për të aktivizuar rrugëtimin.
MACAddress= do të komentojmë dhe do të ndryshojmë nëse është e nevojshme.
Së pari, "lidhet" eth0. Kujtojmë "problemin e uniformitetit" dhe përdorim vetëm adresën MAC të këtij interfaci, e cila mund të merret, për shembull, kështu:
# cat /sys/class/net/eth0/address
Krijojmë /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Heqim skedarin e mëparshëm të konfigurimit për eth0, rinisim "malinkën" dhe fitojmë akses në rrjet (adresa IP do të ndryshojë me siguri):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5. DNSMASQ
Për krijimin e pikave të aksesit Wi-Fi, nuk ka asgjë më të mirë se çifti i ëmbël nga dnsmasq + hostapd as që është menduar deri tani. Sipas mendimit tim.
Nëse dikush e ka harruar, atëherë… — është një mjet që menaxhon adaptuerët Wi-Fi (në veçanti, do të marrë përsipër punën për t'i lidhur ata me një virtuale lan “malinke”), autorizon dhe regjistron klientët pa kabëll.
— konfiguron grilin e klientëve: jep adresa IP, serverë DNS, portin e paracaktuar dhe të tjera kënaqësi të tilla.
Nisim me dnsmasq:
# yum install dnsmasq
Shablloni /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
e redaktojmë sipas shijes tonë.
Minimalist /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
"Magjia" këtu qëndron në parametrin bind-dynamic, i cili i tregon demonit dnsmasq të presë që interfaci interface=lan, të mos bjerë në dëshpërim nga vetmia krenare pas nisjes.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Dhe së fundi, konfigurimet magjike të hostapd. Nuk dyshoj se dikush po e lexon këtë artikull për të gjetur këto rreshta të çmuar.
Para se të instaloni hostapd, duhet të luftoni me "problemin e uniformitetit". Adaptuesi i brendshëm Wi-Fi wlan0 mund të ndryshojë lehtësisht emrin e tij në wlan1 kur lidhet me pajisje Wi-Fi USB shtesë. Prandaj, do t'i përcaktojmë emrat e interfecëve në këtë mënyrë: do t'u japim (pa kabëll) adaptuesve emra unikë dhe do t'i lidhim ato me adresat MAC.
Për adaptuesin e brendshëm Wi-Fi, i cili akoma është wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Krijojmë /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Tani do të jemi të sigurt se wl0 — është Wi-Fi i brendshëm. Rinisim "malinkën" për t'u siguruar për këtë.
Instalojmë:
# yum install hostapd wireless-tools
Skedari i konfigurimit /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
Asnjëherë nuk duhet të harrojmë për , ne ndryshojmë parametrat e nevojshëm dhe verifikojmë manualisht funksionalitetin:
# hostapd /etc/hostapd/hostapd.conf
hostapd do të startojë në modalitetin interaktiv, duke transmetuar në konsolë gjendjen e tij. Nëse nuk ka gabime, atëherë klientët që mbështesin AC-modin mund të lidhen me pikën e aksesit. Për të ndaluar hostapd — Ctrl-C.
Tani duhet ta aktivizojmë hostapd në inicializimin e sistemit. Nëse veprojmë sipas standardeve (systemctl enable hostapd), pas një restarti të mëpasshëm mund të marrim një demon që "qëndron në gjak" me diagnostikimin "interface wl0 nuk u gjet". Si rezultat i "kaosit paralel" hostapd u aktivizua më shpejt se sa bërthama gjeti adaptorin wireless.
Në internet ka shumë zgjidhje: nga forcimi i shkurtimit përpara startit të demonit (për disa minuta), deri te një demon tjetër që monitoron shfaqjen e interfaces dhe (rindez) hostpad. Zgjidhjet janë mjaft funksionale, por jashtëzakonisht të shëmtuara. Thërrasim ndihmën e madhit systemd me "qëllimet" dhe "detyrat" e tij "varësitë".
Kopjojmë skedarin e shërbimit të distribucionit në /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
dhe e çojmë përmbajtjen e tij në formën e mëposhtme:
[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
Magjia e skedarit të përmirësuar të shërbimit qëndron në lidhjen dinamike të hostapd me objektivin e ri — interface-wl0. Kur interface shfaqet — demoni niset, kur ai zhduket — ndalet. Dhe e gjithë kjo ndodh në linjë — pa ri-startuar sistemin. Kjo teknikë do të jetë jashtëzakonisht e dobishme kur lidheni me një "pi" USB Wi-Fi adaptori.
Tani mund të:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Çfarë???" © Po, po! Asnjë systemd. Asnjë kombinator modern (në formën e firewalld), i cili në fund bëjnë të njëjtën gjë.
Përdorim të vjetrin e mirë iptables, shërbimi i të cilit pas startit do të ngarkojë në bërthamë rregullat rrjetësore dhe do të ndalojë punën e tij pa qëndruar rezident dhe pa konsumuar burime. Systemd ka një elegant IPMasquerade=, por përkthimin e adresave (NAT) dhe firewall do t'i besojmë gjithsesi iptables.
Instalojmë:
# yum install iptables-services
# systemctl enable iptables ip6tables
Unë preferoj ta ruaj konfigurimin e iptables si një skenar (shembull):
#!/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
Eko har suprajmë këtë skript dhe kemi humbur mundësinë për të vendosur lidhje të reja SSH me 'malinkën'. E gjithë kjo është e saktë, ne kemi prodhuar një router Wi-Fi, për të cilin qasja 'nëpërmjet Internetit' është ndaluar si parazgjedhje — tani vetëm 'në ajër'. lidhni kabllon e ofruesit në Ethernet dhe filloni të surfojmë!
8. Bonus: +2,4GHz
Kur sipas skemës më lart unë ndërtova routerin e parë Raspberry, zbulova se kisha disa pajisje në pronësi të mia, të cilat për shkak të kufizimeve strukturore nuk mund të shihnin 'malinkën' fare. Rregullimi i routerit për të punuar në 802.11b/g/n do të ishte jo-sportiv, sepse shpejtësia maksimale 'në ajër' në këtë rast nuk do të kalonte 40 Mbit, ndërsa ofruesi im i preferuar i Internetit më ofron 100 (nëpërmjet kabllit).
Në të vërtetë, zgjidhja e problemit ishte tashmë e shpikur: një interface Wi-Fi i dytë, i punësuar në frekuencën 2,4GHz, dhe një pikë e dytë qasjeje. Në dyqanin më të afërt bleva një USB Wi-Fi 'stick' që më doli i dyti para syve. Shitësi ishte i shqetësuar nga pyetjet për çipsetin, kompatibilitetin me ARM-krat e Linuxit dhe mundësinë për të punuar në modin AP (ai filloi i pari).
Konfigurojmë 'stickun' sipas analogjisë me adapterin Wi-Fi të integruar.
Fillimisht — ta riemërojmë atë në 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
Menaxhimin e interface-it të ri Wi-Fi ia besojmë një demoni të veçantë hostapd, i cili do të nisë dhe të ndalojë në varësi të pranishmërisë në sistem të një 'sticku' të caktuar: wl1.
Skedari i konfigurimit /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]
Përmbajtja e këtij skedari varet drejtpërdrejt nga modeli i adapterit USB Wi-Fi, prandaj një kopje/kolazh e zakontë mund t'ju vë në telashe.
Kopjojmë skedarin e shërbimit të distribucionit në /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
dhe e çojmë përmbajtjen e tij në formën e mëposhtme:
[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
Ka mbetur vetëm të aktivizojmë shembullin e ri të hostapd:
# systemctl enable hostapd2
Këtu është! Lëvizni 'stickun' dhe vetë 'malinkën', shikoni rrjetet pa tela përreth.
Dhe përfundimisht, dua të njoftoj për cilësinë e adapterit USB Wi-Fi dhe furnizimin me energji të Raspberry. Një 'stick' i lidhur 'në nxehtë', ndonjëherë mund të shkaktojë 'ngulfatjen e malinkës' për shkak të problemeve të përkohshme elektrike.
Burimi: habr.com
