Ekziston një sasi e madhe informacioni në internet për krijimin e pikave të aksesit Wi-Fi bazuar në një kompjuter me një bord Raspberry. Si rregull, kjo nënkupton përdorimin e sistemit operativ Raspbian, vendas i Raspberry.
Duke qenë aderues i sistemeve të bazuara në RPM, nuk mund ta kaloja këtë mrekulli të vogël dhe të mos provoja CentOS-in tim të dashur në të.
Artikulli ofron udhëzime për krijimin e një ruteri Wi-Fi 5 GHz/AC nga një Raspberry Pi 3 Model B+ bazuar në sistemin operativ CentOS. Do të ketë disa truke standarde, por pak të njohura, dhe si bonus - një vizatim për lidhjen e pajisjeve shtesë Wi-Fi me Raspberry, duke e lejuar atë të funksionojë njëkohësisht në disa mënyra (2,4+5 GHz).
(përzierje e imazheve të disponueshme falas)
Le të vërejmë menjëherë se disa shpejtësi kozmike nuk do të funksionojnë. Unë shtrydh një maksimum prej 100 Mbps nga Raspberry në ajër, dhe kjo mbulon shpejtësinë e ofruesit tim të internetit. Pse keni nevojë për një AC kaq të ngadaltë, nëse në teori mund të merrni gjysmë gigabit edhe në N? Nëse i keni bërë vetes këtë pyetje, atëherë shkoni në dyqan për të blerë një ruter të vërtetë me tetë antena të jashtme.
0. Çfarë do t'ju duhet
- Në fakt, vetë "produkti i mjedrës" është i kalibrit: Pi 3 Model B+ (për të arritur shpejtësitë dhe kanalet e lakmuara 5 GHz);
- MicroSD e mirë >= 4 GB;
- Stacioni i punës me lexues/shkrimtar Linux dhe microSD;
- Disponueshmëria e aftësive të mjaftueshme në Linux, artikulli është për një Geek të trajnuar;
- Lidhja me rrjetin me tel (eth0) midis Raspberry dhe Linux, ekzekutimi i serverit DHCP në rrjetin lokal dhe aksesi në internet nga të dyja pajisjet.
Një koment i vogël për pikën e fundit. "Cili erdhi i pari, veza apo..." si të bëni një ruter Wi-Fi në mungesë të ndonjë pajisjeje për qasje në internet? Le ta lëmë këtë ushtrim argëtues jashtë objektit të artikullit dhe thjesht të supozojmë se Raspberry është i lidhur me rrjetin lokal me tel dhe ka qasje në internet. Në këtë rast, nuk do të kemi nevojë për një televizor shtesë dhe një manipulues për të vendosur "mjedrën".
1. Instaloni CentOS
Në kohën e shkrimit të këtij artikulli, versioni i ekzekutimit i CentOS në pajisje është 32-bit. Diku në World Wide Web hasa në mendime se performanca e këtyre OS-ve në arkitekturën ARM 64-bit është ulur deri në 20%. Këtë moment do ta lë pa koment.
Në Linux, shkarkoni imazhin minimal me kernelin "-RaspberryPI-"dhe shkruani në microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Para se të fillojmë të përdorim imazhin, ne do të heqim ndarjen SWAP prej saj, do të zgjerojmë rrënjën në të gjithë vëllimin e disponueshëm dhe do të heqim qafe SELinux. Algoritmi është i thjeshtë: bëni një kopje të rrënjës në Linux, fshini të gjitha ndarjet nga microSD përveç të parës (/boot), krijoni një rrënjë të re dhe ktheni përmbajtjen e saj nga kopja.
Shembull i veprimeve të kërkuara (dalje e rëndë e konsolës)
# 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 shpaketimit të përmbajtjes së ndarjes rrënjësore, është koha për të bërë disa ndryshime në të.
Çaktivizo SELinux në /mnt/etc/selinux/config:
SELINUX=disabled
Redaktimi /mnt/etc/fstab, duke lënë në të vetëm dy hyrje në lidhje me ndarjet: boot (/boot, pa ndryshime) dhe rrënjë (ne ndryshojmë vlerën UUID, e cila mund të zbulohet 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ë fundi, ne ndryshojmë parametrat e nisjes së kernelit: ne specifikojmë një vendndodhje të re për ndarjen rrënjë, çaktivizojmë daljen e informacionit të korrigjimit dhe (opsionale) ndalojmë kernelin të caktojë adresat IPv6 në ndërfaqet e rrjetit:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Këtu është përmbajtja /mnt/cmdline.txt në formën e mëposhtme (një rresht pa vizë):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Finish:
# cd
# umount /mnt
# sync
Ne e riorganizojmë microSD në "mjedër", e nisim atë dhe marrim akses në rrjet në të nëpërmjet ssh (root/centos).
2. Vendosja e CentOS
Tre lëvizjet e para të palëkundshme: passwd, yum -y update, reboot.
Ne japim menaxhimin e rrjetit i lidhur në rrjet:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Krijo një skedar (së bashku me drejtoritë) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Ne rinisim "mjedrën" dhe përsëri marrim akses në rrjet në të përmes ssh (adresa IP mund të ndryshojë). Kushtojini vëmendje asaj që përdoret /etc/resolv.conf, krijuar më herët nga Menaxheri i Rrjetit. Prandaj, në rast të problemeve me zgjidhjen, modifikoni përmbajtjen e tij. Përdorni i zgjidhur nga sistemi ne nuk do të.
Ne heqim "të panevojshmen", riparojmë dhe përshpejtojmë ngarkimin e OS:
# 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ë cron e kush nuk e tret të ndërtuarin
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Çaktivizoni përdorimin e IPv6 nga shërbimet bazë (nëse kërkohet)/ Etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Rëndësia e kohës në "mjedër" është një gjë e rëndësishme. Meqenëse jashtë kutisë nuk ka aftësi harduerike për të ruajtur gjendjen aktuale të orës pas rindezjes, nevojitet sinkronizimi. Një demon shumë i mirë dhe i shpejtë për këtë është chrony - tashmë është instaluar dhe fillon automatikisht. Ju mund të ndryshoni serverët NTP në ato 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 kohore që do të përdorim mashtrim. Meqenëse qëllimi ynë është të krijojmë një ruter Wi-Fi që funksionon në frekuenca 5 GHz, ne do të përgatitemi për surpriza paraprakisht rregullator:
# yum info crda
Përmbledhje: Daemon i pajtueshmërisë rregullatore për rrjetet pa tel 802.11
Ky dizajn i keq, i bazuar gjithashtu në zonën kohore, "ndalon" përdorimin (në Rusi) të frekuencave 5 GHz dhe kanaleve me numra "të lartë". Truku është të vendosni një zonë kohore pa përdorur emrat e kontinenteve/qyteteve, domethënë, në vend të:
# timedatectl set-timezone Europe/Moscow
Ne shtypim:
# timedatectl set-timezone Etc/GMT-3
Dhe prekjet e fundit në modelin e flokëve të sistemit:
# 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. Shtesat CentOS
Gjithçka që u tha më lart mund të konsiderohet udhëzime të plota për instalimin e CentOS "vanilje" në Raspberry Pi. Duhet të përfundoni me një PC që (ri)niset në më pak se 10 sekonda, përdor më pak se 15 megabajt RAM dhe 1.5 Gigabajt microSD (në fakt më pak se 1 Gigabajt për shkak të një /boot jo të plotë, por le të jemi të sinqertë).
Për të instaluar softuerin e pikës së hyrjes Wi-Fi në këtë sistem, do t'ju duhet të zgjeroni pak aftësitë e shpërndarjes standarde CentOS. Para së gjithash, le të përmirësojmë drejtuesin (firmware) të përshtatësit të integruar Wi-Fi. Faqja kryesore e projektit thotë:
Wi-Fi në Raspberry 3B dhe 3B+
Skedarët e firmuerit Raspberry PI 3B/3B+ nuk lejohen të shpërndahen nga Projekti CentOS. Mund të përdorni artikujt e mëposhtëm për të kuptuar problemin, për të marrë firmuerin dhe për të konfiguruar Wi-Fi.
Ajo që është e ndaluar për projektin CentOS nuk është e ndaluar për ne për përdorim personal. Ne zëvendësojmë firmware-in e shpërndarjes Wi-Fi në CentOS me atë përkatës nga zhvilluesit e Broadcom (të njëjtat blobs binare të urryera...). Kjo, në veçanti, do t'ju lejojë të përdorni AC në modalitetin e pikës së hyrjes.
Përmirësimi i firmuerit Wi-FiGjeni modelin e pajisjes dhe versionin aktual të firmuerit:
# 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
Ne shohim që versioni i firmuerit është 7.45.18 i datës 01.03.2015/XNUMX/XNUMX dhe mbani mend grupin e mëposhtëm të numrave: 43455 (brcmfmac43455-sdio.bin).
# wget https://downloads.raspberrypi.org/raspbian_lite_latest
# unzip -p raspbian_lite_latest > raspbian.img
# fdisk -l raspbian.img
Disk raspbian.img: 2 GiB, 2197815296 bytes, 4292608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x17869b7d
Device Boot Start End Sectors Size Id Type
raspbian.img1 8192 532480 524289 256M c W95 FAT32 (LBA)
raspbian.img2 540672 4292607 3751936 1.8G 83 Linux
# mount -t ext4 -o loop,offset=$((540672 * 512)) raspbian.img /mnt
# cp -fv /mnt/lib/firmware/brcm/*43455* ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.bin' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.txt' -> ...
# umount /mnt
Skedarët e firmuerit të përshtatësit Wi-Fi që rezultojnë duhet të kopjohen dhe të zëvendësohen me "mjedër" në drejtori /usr/lib/firmware/brcm/
Rinisim ruterin e ardhshëm dhe buzë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 datë 27.02.2018.
Dhe 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 sfidat përpara
Siç ramë dakord më lart, "mjedra" është e lidhur me "tel" me rrjetin lokal. Le të supozojmë se ofruesi ofron qasje në internet në të njëjtën mënyrë: adresa në rrjetin publik lëshohet në mënyrë dinamike nga serveri DHCP (ndoshta me lidhje MAC). Në këtë rast, pas konfigurimit përfundimtar të mjedrës, thjesht duhet të "fusni" kabllon e ofruesit në të dhe keni mbaruar. Autorizimi duke përdorur systemd-networked - tema e një artikulli të veçantë dhe nuk diskutohet këtu.
Ndërfaqja(at) Wi-Fi e Raspberry është një rrjet lokal dhe përshtatësi i integruar Ethernet (eth0) është i jashtëm. Le të numërojmë rrjetin lokal në mënyrë statike, për shembull: 192.168.0.0/24. Adresa e mjedrës: 192.168.0.1. Një server DHCP do të funksionojë në rrjetin e jashtëm (Internet).
Kaos paralel (digresion lirik)Lennart Pottering ka përpiluar programin e vet systemd Shume mire. Kjo systemd nis programet e tjera aq shpejt sa ata, duke mos pasur kohë të rikuperohen nga goditja e bilbilit të arbitrit, pengohen dhe bien në fillim pa e nisur as rrugën e tyre me pengesa.
Por seriozisht, paralelizimi agresiv i proceseve të nisura në fillimin e sistemit operativ të sistemuar është një lloj "ure gomari" për specialistët me përvojë LSB sekuenciale. Për fat të mirë, vendosja e rendit në këtë "kaos paralel" rezulton të jetë e thjeshtë, megjithëse jo gjithmonë e dukshme.
Ne krijojmë dy ndërfaqe virtuale të urës me emra të vazhdueshëm: lan и i vranët. Ne do të "lidhim" përshtatësin(ët) Wi-Fi me të parin dhe "mjedrën" eth0 me të dytin.
/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=po eliminon nevojën për të aluduar në kernel nëpërmjet sysctl për të mundësuar rrugëzimin.
Adresa MACA= Le të mos komentojmë dhe të ndryshojmë nëse është e nevojshme.
Së pari ne "lidhim" eth0. Ne kujtojmë "problemin e uniformitetit" dhe përdorim vetëm adresën MAC të kësaj ndërfaqeje, e cila mund të gjendet, për shembull, si kjo:
# cat /sys/class/net/eth0/address
Ne krijojmë /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Ne fshijmë skedarin e mëparshëm të konfigurimit eth0, rinisim Raspberry dhe marrim akses në rrjet në të (adresa IP ka shumë të ngjarë të ndryshojë):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Për krijimin e pikave të aksesit Wi-Fi, asgjë nuk mund të kalojë një çift të ëmbël dnsmasq + hostapd nuk e kam kuptuar ende. Per mendimin tim.
Në rast se dikush harron, atëherë...
Le të fillojmë me dnsmasq:
# yum install dnsmasq
Шаблон /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
modifikojeni sipas dëshirës tuaj.
minimaliste /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 lidh-dinamik, i cili i thotë daemonit dnsmasq të presë derisa të shfaqet në sistem ndërfaqe=lan, dhe jo të fikët nga një sulm i vetmisë krenare pas fillimit.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Dhe së fundi, konfigurimet magjike të hostapd. Nuk kam dyshim se dikush po e lexon këtë artikull në kërkim të pikërisht këtyre rreshtave të çmuar.
Para se të instaloni hostapd, duhet të kapërceni "problemin e uniformitetit". Përshtatësi i integruar Wi-Fi wlan0 mund ta ndryshojë me lehtësi emrin e tij në wlan1 kur lidh pajisje shtesë USB Wi-Fi. Prandaj, ne do t'i rregullojmë emrat e ndërfaqes në mënyrën e mëposhtme: do të dalim me emra unikë për përshtatësit (me valë) dhe do t'i lidhim ato me adresat MAC.
Për përshtatësin e integruar Wi-Fi, i cili është ende wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Ne krijojmë /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Tani do të jemi të sigurt për këtë wl0 - Ky është Wi-Fi i integruar. Ne rinisim Raspberry për t'u siguruar për këtë.
Instaloni:
# 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
Pa harruar asnjë moment
# hostapd /etc/hostapd/hostapd.conf
hostapd do të fillojë në modalitetin interaktiv, duke transmetuar gjendjen e tij në tastierë. Nëse nuk ka gabime, atëherë klientët që mbështesin modalitetin AC do të mund të lidhen me pikën e hyrjes. Për të ndaluar hostapd - Ctrl-C.
Gjithçka që mbetet është të aktivizoni hostapd në fillimin e sistemit. Nëse bëni gjënë standarde (systemctl aktivizoni hostapd), atëherë pas rindezjes së radhës mund të merrni një demon "duke rrokullisur në gjak" me diagnozën "ndërfaqja wl0 nuk u gjet". Si rezultat i "kaosit paralel", hostapd filloi më shpejt sesa kerneli gjeti përshtatësin me valë.
Interneti është plot me mjete juridike: nga një ndërprerje e detyruar përpara fillimit të demonit (disa minuta), në një demon tjetër që monitoron pamjen e ndërfaqes dhe (ri)nis panelin e pritjes. Zgjidhjet janë mjaft të zbatueshme, por tmerrësisht të shëmtuara. I bëjmë thirrje të madhit për ndihmë systemd me “qëllimet” dhe “detyrat” dhe “varësitë” e saj.
Kopjoni skedarin e shërbimit të shpërndarjes në /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
dhe zvogëlojeni 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ërditësuar të shërbimit qëndron në lidhjen dinamike të hostapd me objektivin e ri - ndërfaqen wl0. Kur shfaqet ndërfaqja, daemon fillon; kur zhduket, ndalon. Dhe kjo është e gjitha në internet - pa rindezur sistemin. Kjo teknikë do të jetë veçanërisht e dobishme kur lidhni një përshtatës USB Wi-Fi me një Raspberry.
Tani mundesh:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Sta???" © Po, po! Asnje systemd. Asnjë kombinacion i ri (në formë bota e zjarrit), të cilat përfundojnë duke bërë të njëjtën gjë.
Le të përdorim të vjetrën e mirë iptables, shërbimet e të cilit, pas nisjes, do të ngarkojnë rregullat e rrjetit në kernel dhe do të mbyllen në heshtje pa mbetur rezident dhe pa konsumuar burime. systemd ka një elegante IPMasquerade=, por ne do t'ia besojmë përsëri përkthimin e adresës (NAT) dhe murin e zjarrit iptables.
Instaloni:
# yum install iptables-services
# systemctl enable iptables ip6tables
Unë preferoj të ruaj konfigurimin iptables si një skript (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
Ne ekzekutojmë skriptin e mësipërm dhe humbasim aftësinë për të krijuar lidhje të reja SSH me tela me Raspberry. Kjo është e drejtë, ne kemi bërë një ruter Wi-Fi, qasja në të cilën "përmes internetit" është e ndaluar si parazgjedhje - tani vetëm "nëpërmjet ajrit". Ne lidhim kabllon Ethernet të ofruesit dhe fillojmë të shfletojmë!
8. Bonusi: +2,4 GHz
Kur mblodha ruterin e parë Raspberry duke përdorur vizatimin e përshkruar më sipër, zbulova një numër pajisjesh në familjen time që, për shkak të kufizimeve të tyre të dizajnit Wi-Fi, nuk mund ta shihnin fare "mjedrën". Rikonfigurimi i ruterit për të punuar në 802.11b/g/n ishte jo sportiv, pasi shpejtësia maksimale "në ajër" në këtë rast nuk i kalonte 40 Mbit, dhe ofruesi im i preferuar i Internetit më ofron 100 (me kabllo).
Në fakt, tashmë është shpikur një zgjidhje për problemin: një ndërfaqe e dytë Wi-Fi që funksionon në një frekuencë prej 2,4 GHz dhe një pikë e dytë aksesi. Në një tezgë aty pranë bleva jo "bilbilin" e parë, por të dytë USB Wi-Fi që hasa. Shitësi u mundua nga pyetjet në lidhje me çipset, pajtueshmërinë me kernelet ARM Linux dhe mundësinë e punës në modalitetin AP (ai ishte i pari që filloi).
Ne konfigurojmë "bilbilin" sipas analogjisë me përshtatësin e integruar Wi-Fi.
Së pari, le ta riemërtojmë 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
Ne do t'ia besojmë menaxhimin e ndërfaqes së re Wi-Fi një demon të veçantë hostapd, i cili do të fillojë dhe do të ndalojë në varësi të pranisë së një "bilbili" të përcaktuar rreptësisht në sistem: 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 përshtatësit USB Wi-Fi, kështu që një kopjim/ngjit banal mund t'ju dështojë.
Kopjoni skedarin e shërbimit të shpërndarjes në /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
dhe zvogëlojeni 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
Gjithçka që mbetet është të aktivizoni një shembull të ri të hostapd:
# systemctl enable hostapd2
Kjo eshte e gjitha! Tërhiqni "bilbilin" dhe vetë "mjedrën", shikoni rrjetet me valë rreth jush.
Dhe së fundi, dua t'ju paralajmëroj për cilësinë e përshtatësit USB Wi-Fi dhe furnizimin me energji elektrike të Raspberry. "Bilbili i nxehtë" i lidhur ndonjëherë mund të shkaktojë "ngrirje të mjedrës" për shkak të problemeve afatshkurtra elektrike.
Burimi: www.habr.com