Raspberry Pi + CentOS = Wi-Fi Hotspot (ose router me shenjë të kuqe)

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Ă«.

Raspberry Pi + CentOS = Wi-Fi Hotspot (ose router me shenjë të kuqe)
(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

Faqja kryesore e projektit

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 timerat systemd, 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).

Shkarkoni imazhin aktual të Raspbian. 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.

Problemi i uniformitetit tĂ« emrave dhe programuesi i njohur guatemalas — 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ë hostapd — Ă«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.

dnsmasq — 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 GKÇP, 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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster