Raspberry Pi + CentOS = Wi-Fi Hotspot (ose routeri i malinës në kapelen e kuqe)

NĂ« internet ka njĂ« sasi tĂ« madhe informacioni pĂ«r krijimin e pikave tĂ« qasjes Wi-Fi bazuar nĂ« kompjuterin njĂ«plakĂ« Raspberry. Zakonisht, nĂ«nkuptohet pĂ«rdorimi i sistemit operativ tĂ« lindur pĂ«r "malinkĂ«n" — Raspbian.

Si një adhurues i sistemeve të bazuara në RPM, nuk mund të kaloj pa e provuar këtë mrekulli të vogël me CentOS-në time të preferuar.

Ky artikull paraqet njĂ« udhĂ«zim pĂ«r ndĂ«rtimin e njĂ« router Wi-Fi 5GHz/AC nga Raspberry Pi 3 Model B+ me bazĂ« sistemin operativ CentOS. Do tĂ« ofrohen disa truke standarde, por tĂ« panjohura, dhe si bonus — njĂ« skemĂ« lidhjeje pĂ«r pajisje tĂ« tjera Wi-Fi, qĂ« e lejojnĂ« atĂ« tĂ« funksionojĂ« nĂ« disa mĂ«nyra njĂ«kohĂ«sisht (2.4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (ose routeri i malinës në kapelen e kuqe)
(mikse imazhesh nga burime të lira të qasjes)

Të theksojmë menjëherë se nuk do të arrini shpejtësi galaktike. Unë arrij maksimumi 100 Mbit nga "malinka" ime, dhe kjo mbulon shpejtësinë e ofruesit tim të internetit. Pse të keni një AC të tillë të ngadaltë, kur në teorinë N mund të merrni gjysmën e gigabitit? 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

  • Realiteti, vetĂ« "produktin malino" e kalibrit: Pi 3 Model B+ (pĂ«r tĂ« arritur shpejtĂ«sitĂ« dhe kanalet e dĂ«shiruara 5GHz);
  • NjĂ« microSD e mirĂ« > = 4GB;
  • NjĂ« stacion pune me Linux dhe njĂ« lexues/shkrues microSD;
  • TĂ« ketĂ« aftĂ«si tĂ« mjaftueshme nĂ« Linux, ky artikull Ă«shtĂ« pĂ«r Gikun e pĂ«rgatitur;
  • NjĂ« lidhje me tel (eth0) midis Raspberry dhe Linux, njĂ« server DHCP i punĂ«suar nĂ« rrjetin lokal dhe qasje nĂ« internet nga tĂ« dy pajisjet.

NjĂ« koment i vogĂ«l pĂ«r pikĂ«n e fundit. "ÇfarĂ« doli e para, veza apo..." si tĂ« bĂ«jmĂ« njĂ« router Wi-Fi nĂ« mungesĂ« tĂ« çdo pajisje pĂ«r akses nĂ« internet? Ta lĂ«mĂ« kĂ«tĂ« ushtrim interesante jashtĂ« kufijve tĂ« artikullit dhe tĂ« supozomĂ« se Raspberry Ă«shtĂ« lidhur me rrjetin lokal me kabllo dhe ka qasje nĂ« internet. NĂ« kĂ«tĂ« rast, nuk do tĂ« na nevojitet edhe njĂ« televizor dhe njĂ« manovrues pĂ«r tĂ« konfiguruar "malinkĂ«n".

1. Instalimi i CentOS

Faqja kryesore e projektit

NĂ« momentin e shkrimit tĂ« kĂ«tij artikulli, versioni funksional i CentOS nĂ« pajisje — Ă«shtĂ« 32-bit. Diku nĂ« hapĂ«sirat e internetit kam hasur mendime pĂ«r uljen e performancĂ«s sĂ« kĂ«tyre OS-ve nĂ« arkitekturĂ«n 64-bit ARM deri nĂ« 20%. Do ta lĂ« kĂ«tĂ« çështje pa koment.

Në Linux, shkarkojmë imazhin minimal me bërthamën "-RaspberryPI-" dhe e regjistroni 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, hiqni nga ai ndarjen SWAP, zgjatni rrĂ«njĂ«n nĂ« tĂ« gjithĂ« kapacitetin nĂ« dispozicion dhe hiqni SELinux. Algoritmi — i thjeshtĂ«: bĂ«ni njĂ« kopje tĂ« rrĂ«njĂ«s nĂ« Linux, hiqni tĂ« gjitha ndarjet nga microSD me pĂ«rjashtim tĂ« asaj tĂ« parĂ« (/boot), krijoni njĂ« rrĂ«njĂ« tĂ« re dhe kthejeni pĂ«rmbajtjen e saj nga kopja.

Një shembull veprimesh të nevojshme (dalje e ashpër nga console)

# 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.

Çaktivizoni SELinux nĂ« /mnt/etc/selinux/config:

SELINUX=disabled

Editoni /mnt/etc/fstab, duke lënë aty vetëm dy regjistrime për ndarjet: ngarkuese (/boot, pa ndryshime) dhe rrënjore (ndryshoni vlerën UUID, e cila mund të krijohet duke shqyrtuar 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

Në fund, ndryshoni parametrat e ngarkesës së bërthamës: tregoni vendndodhjen e re të ndarjes rrënjore, çaktivizoni daljen e informacionit të debagimit dhe (opsionale) ndaloni bërthamën të alokojë adresa IPv6 në ndërfaqet e rrjetit:

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

Formoni përmbajtjen /mnt/cmdline.txt në aspektin e mëposhtëm (një rresht pa kthyesh rresht):

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

Gati:

# cd
# umount /mnt
# sync

Ribëni microSD në "malinka", niseni dhe merrni qasje në rrjet përmes ssh (root/centos).

2. Konfigurimi i CentOS

Të tri lëvizjet e patjetërsueshme: passwd, yum -y update, rikthim.

Dorëzojmë menaxhimin e rrjetit networkd:

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

Krijoni një skedar (së bashku me katalogët) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Rinisni "malinkën" dhe merrni përsëri qasje në rrjet përmes ssh (IP-adresa mund të ndryshojë). Vini re se po përdoret /etc/resolv.conf, krijuar më parë nga Menaxher-i i Rrjetit. Prandaj, në rast se ka probleme me zgjidhjen, redaktoni përmbajtjen e tij. Nuk do ta përdorim systemd-resolved .

Hiqni "të tepërta", rregulloni dhe përshpejtoni ngarkesën 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 e ka nevojën cron dhe kush nuk e përtyp dot timera systemd, mund të instaloni të munguarit. /var/log-dhe shikoni përmes journalctl. Nëse nevojitet historia e regjistrit (për të cilën për shkak të parazgjedhjes ruhen vetëm informacionet nga fillimi i sistemit):

# 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 kryesore (nĂ«se Ă«shtĂ« e nevojshme)/etc/ssh/sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Aktualiteti i kohĂ«s nĂ« "malinka" Ă«shtĂ« njĂ« gjĂ« e rĂ«ndĂ«sishme. Duke qenĂ« se "nga kutia" mungon mundĂ«sia harduerike pĂ«r tĂ« ruajtur gjendjen aktuale tĂ« orĂ«s gjatĂ« rinisjes, ne kemi nevojĂ« pĂ«r sinkronizim. NjĂ« demon shumĂ« i mirĂ« dhe i shpejtĂ« pĂ«r kĂ«tĂ« Ă«shtĂ« chrony — Ă«shtĂ« tashmĂ« i instaluar dhe aktivizohet automatikisht. Mund tĂ« ndryshoni serverĂ«t NTP nĂ« ato mĂ« afĂ«r.

/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 do të përdorim një truk. Duke pasur parasysh se qëllimi ynë është ndërtimi i një router Wi-Fi që punon në frekuencat 5GHz, le të përgatitemi për surprizat e rregullatorit:

# yum info crda
Përmbledhje: Daemon për përputhje me rregullat për rrjetin wireless 802.11

Kjo strukturë armiqësore, duke marrë parasysh gjithashtu zonën kohore, "ndalon" përdorimin (në Rusi) të frekuencave 5GHz dhe kanaleve me numra "të mëdhenj". Truku qëndron në vendosjen e zonës kohore pa përdorur emrat e kontinenteve/ qyteteve, që do të thotë në vend të:

# timedatectl set-timezone Europe/Moscow

Shtypim:

# timedatectl set-timezone Etc/GMT-3

Dhe goditjet e fundit në ndriçimin e sistemit:

# hostnamectl set-hostname router

/root/.bash_profile:

. . .

# Mjedisi i veçantë për përdoruesit dhe programet e fillimit

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

3. Shtesat për CentOS

Të gjitha që është thënë më lart mund të konsiderohet si një udhëzues për instalimin e CentOS "të pastër" në Raspberry Pi. Duhet të krijoni një PC që (ri)startohet për më pak se 10 sekonda, përdor më pak se 15 Megabajt RAM dhe 1.5 Gigabajt microSD (në të vërtetë më pak se 1 Gigabajt për shkak të /boot të pamjaftueshme, por le të jemi të sinqertë deri në fund).

Për të instaluar softuerin për pikën e qasjes Wi-Fi në këtë sistem, do të kërkohet të zgjeroni disi mundësitë e distribucionit standard CentOS. Para së gjithash, "do të përmirësojmë" driver-in (firmware) të adaptorit 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 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ë firmware dhe për të vendosur wifi.

ÇfarĂ« nuk Ă«shtĂ« e lejuar pĂ«r projektin CentOS, nuk Ă«shtĂ« e ndaluar pĂ«r ne pĂ«r pĂ«rdorim personal. ZĂ«vendĂ«sojmĂ« firmware-in distribuues tĂ« Wi-Fi nĂ« CentOS me atĂ« tĂ« zhvilluesve Broadcom (ato tĂ« tmerrshmet binarĂ«t
). Kjo, nĂ« veçanti, do t'i japĂ« mundĂ«sinĂ« pĂ«rdorimit AC nĂ« modin pika qasje.

Përmirësimi i firmware të Wi-FiKurioziteti mbi 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 numrin e mëposhtëm: 43455 (brcmfmac43455-sdio.bin).

Shkarkojmë imazhin aktual të Raspbian. Ata që nuk dëshirojnë të bëjnë punë mund ta regjistrojnë imazhin në microSD dhe të marrin skedarët e firmware-at aty. Ose mund ta montoni pjesën e rrënjës së imazhit në Linux dhe të kopjoni atë që 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 marrë të firmware të adaptorit Wi-Fi duhet të kopjohen me zëvendësim në "mal për" në katalogun /usr/lib/firmware/brcm/

Rinisim router-in e ardhshëm dhe buzëqeshim:

# 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.

Sigurisht dhe 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ë që do të hasim

Siç u pajtuam mĂ« lart, "mal pĂ«r" Ă«shtĂ« lidhur "me kabllo" nĂ« rrjetin lokal. Le tĂ« supozojmĂ« se edhe ofruesi ofron akses nĂ« Internet nĂ« tĂ« njĂ«jtĂ«n mĂ«nyrĂ«: adresa nĂ« rrjetin publik jepet dinamikisht nga serveri DHCP (mund tĂ« ketĂ« lidhje me MAC). NĂ« kĂ«tĂ« rast, pas pĂ«rfundimit tĂ« konfigurimit tĂ« "mal pĂ«r", mjafton tĂ« "vendosni" kabllon e ofruesit nĂ« tĂ« dhe gjithçka Ă«shtĂ« gati. Autorizimi me ndihmĂ«n e systemd-networkd — Ă«shtĂ« njĂ« temĂ« tjetĂ«r dhe kĂ«tu nuk diskutohet.

Wi-Fi ndĂ«rfaqet e Raspberry — kjo Ă«shtĂ« rrjeti lokal, ndĂ«rsa adaptori Ethernet i integruar (eth0) — Ă«shtĂ« e jashtme. Le tĂ« numĂ«rojmĂ« rrjetin lokal statikisht, pĂ«r shembull: 192.168.0.0/24. Adresa e "mal pĂ«r": 192.168.0.1. NĂ« rrjetin e jashtĂ«m (Internet) do tĂ« funksionojĂ« serveri DHCP.

Problemi i njĂ«trajtshmĂ«risĂ« sĂ« emĂ«rtimit dhe programuesi i njohur guatemaleze — dy shqetĂ«sime qĂ« presin çdo njeri qĂ« merret me konfigurimin e ndĂ«rfaqeve rrjetĂ«sore dhe shĂ«rbimeve nĂ« distribuitĂ« tĂ« systemd.

Kaosi paralel (një shkëputje letrare)Lennart Pottering ka krijuar programin e tij systemd shumë mirë. Kjo systemd fillon programe të tjera aq shpejt, sa ato, pa e kuptuar ende nga shpejtësia e gjykatës, shkelin dhe bien në start edhe pa filluar garimin e tyre me pengesa.

Por nëse flasim seriozisht, paralelizimi agresiv i proceseve të nisura gjatë startit të sistemit me systemd është një lloj "urë të gomarit" për LSB-ujt e njohur. Për fat të mirë, të vendosësh rregull në këtë "kaos paralel" rezulton të jetë një punë e thjeshtë, për të cilën nuk është gjithmonë e dukshme.

KrijojmĂ« dy ndĂ«rfaqe virtuale bridge me emra tĂ« pĂ«rhershĂ«m: lan dhe wan. NĂ« tĂ« parin "do tĂ« lidhemi" me adaptorin Wi-Fi, ndĂ«rsa nĂ« tĂ« dytin — eth0 "mal pĂ«r".

/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 shkëput nevojën për të treguar përmes sysctl bërthamën për të aktivizuar ruterimin.
MACAddress= do ta heqim komentimin dhe ta ndryshojmë nëse është e nevojshme.

Fillimisht "lidheni" eth0. Kujtojmë "problem e njëtrajtshmërisë" dhe përdorim vetëm adresën MAC të këtij interfaci, e cila mund të zbulohet, 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 konfigurimit të mëparshëm eth0, rihapim "malinkën" dhe fitojmë qasje në rrjet (IP adresa me shumë mundësi do të ndryshojë):

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

5. DNSMASQ

Për krijimin e pikave të qasjes Wi-Fi nuk ka asgjë më të mirë se çifti i ëmbël nga dnsmasq + hostapd nuk është gjetur ende. Sipas mendimit tim.

NĂ«se dikush e ka harruar, atĂ«herë hostapd — Ă«shtĂ« gjĂ«ja qĂ« menaxhon adapterĂ«t Wi-Fi (nĂ« veçanti, do tĂ« marrĂ« pĂ«rsipĂ«r punĂ«n pĂ«r t'i lidhur ata me virtualen lan "malinkĂ«s"), autorizon dhe regjistron klientĂ«t e pa kabllor.

dnsmasq — konfiguron rrjetin e klientĂ«ve: jep IP adresat, serverĂ«t DNS, portin standard dhe gjĂ«ra tĂ« tjera tĂ« ngjashme.

Fillojmë 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 dëshirës sonë.

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

Këtu "magjia" qëndron në parametrin bind-dynamic, që tregon demonit dnsmasq të presë deri në shfaqjen në sistemin interface=lan, e jo të bjerë në gjumë nga krenaria e vetmërisë pas startit.

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

6. HOSTAPD

Dhe për fund, konfigurimet magjike të hostapd. Nuk dyshoj se dikush po e lexon këtë artikull në kërkim të këtyre rreshtave të shenjëzuar.

Para se të instalojmë hostapd, duhet të përballim "problemin e uniformitetit". Adapteri i integruar Wi-Fi wlan0 mund të ndryshojë lehtësisht emrin e tij në wlan1 gjatë lidhjes së pajisjeve të tjera USB Wi-Fi. Prandaj, do t'i ngulisim emrat e interface-ve në këtë mënyrë: t'i japim adapterëve (pa kabllor) emra unikë dhe t'i lidhim me adresat MAC.

Për adapterin e integruar Wi-Fi, i cili ende ë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 integruar. Rihapim "malinkĂ«n" pĂ«r t'u siguruar rreth kĂ«saj.

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Ă« mos harrojmĂ« pĂ«r GKKÇP, modifikojmĂ« parametrat e nevojshĂ«m dhe kontrollojmĂ« manualisht pĂ«r funksionim:

# hostapd /etc/hostapd/hostapd.conf

hostapd do tĂ« niste nĂ« mĂ«nyrĂ« interaktive, duke transmetuar nĂ« konsolĂ«n gjendjen e tij. NĂ«se nuk ka gabime, atĂ«herĂ« klientĂ«t qĂ« mbĂ«shtesin modin AC do tĂ« mund tĂ« lidhen me pikĂ«n e qasjes. PĂ«r tĂ« ndaluar hostapd — Ctrl-C.

Mbetet të aktivizojmë hostapd në ngarkesën e sistemit.Nëse veprojmë standardisht (systemctl enable hostapd), atëherë pas një rihapjeje tjetër mund të përfundojmë me një demon "të shtrirë në gjak" me diagnostikimin "interface wl0 nuk u gjet". Si rezultat i "kaosit paralel" hostapd filloi më shpejt se sa kernel gjeti adapterin pa kabllo.

Ka shumë receta në internet: nga një vonesë e detyruar para nisjes së demonit (për një periudhë kohe), deri tek një demon tjetër që monitoron shfaqjen e interface-it dhe (rindërton) hostapd. Zgjidhjet janë mjaft funksionale, por shumë të shëmtuara. Thërrasim ndihmën e madhështi systemd me "qëllimet" dhe "detyrat" e tij "vartësitë".

Kopjojmë 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 e përshtatim përmbajtjen e tij në këtë formë:

[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 — interface-in wl0. Kur interface-i shfaqet — demoni startohet, kur ai zhduket — ndalet. Dhe kjo ndodh online — pa e rinisur sistemin. Kjo teknikĂ« do tĂ« jetĂ« veçanĂ«risht e dobishme kur lidhemi me "malinkĂ«n" njĂ« adapter USB Wi-Fi.

Tani mund ta bëjmë:

# systemctl enable hostapd
# reboot

7. IPTABLES

"ÇfarĂ«???" © Po, po! AsnjĂ« systemd. AsnjĂ« pajisje moderne (nĂ« formĂ«n e firewalld), e cila pĂ«rfundimisht bĂ«n tĂ« njĂ«jtĂ«n gjĂ«.

Përdorim të mirin e vjetër iptables, shërbimi i të cilit pas startit të tij do të ngarkojë rregullat e rrjetit në kernel dhe do të mbyllë punën e tij pa mbetur rezident dhe pa konsumuar burime. Systemd ka një elegant IPMasquerade=, por përkthimin e adresave (NAT) dhe firewall-in do t'i besojmë iptables.

Instalojmë:

# yum install iptables-services
# systemctl enable iptables ip6tables

Unë preferoj të ruaj konfiguracionin e iptables në formën e një skripti (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

KryejmĂ« skriptin e mĂ«sipĂ«rm dhe humbasim mundĂ«sinĂ« pĂ«r tĂ« vendosur lidhje tĂ« reja ssh me "malinkĂ«n". E gjitha Ă«shtĂ« e saktĂ«, kemi krijuar njĂ« router Wi-Fi, aksesin nĂ« tĂ« cilin "nĂ«pĂ«rmjet Internetit" Ă«shtĂ« nĂ« parazgjedhje i ndaluar — tani vetĂ«m "nĂ« ajĂ«r". Lidhim kabllon e ofruesit nĂ« Ethernet dhe fillojmĂ« tĂ« shfletojmĂ«!

8. Bonusi: +2,4GHz

Kur po përshkrimin e mësipërm unë grita router-in e parë Raspberry, pashë që kisha disa pajisje që, për shkak të kufizimeve të tyre konstruktuese, nuk mundën të shihnin "mali" fare përmes Wi-Fi. Të rregulloja router-in për të punuar në 802.11b/g/n nuk ishte sportiv, pasi shpejtësia maksimale "në ajër" në këtë rast nuk e kalonte 40 Mbit, ndërsa ofruesi im i internetit të preferuar më ofron 100 (në kabllo).

Në të vërtetë, zgjidhja e problemit ishte tashmë e menduar: një ndërfaqe Wi-Fi e dytë që punon në frekuencën 2.4GHz dhe një pikë qasje e dytë. Në dyqanin më të afërt bleva një USB Wi-Fi "dongle" që ishte i dyti që më ra në sy. Shitësi u torturua me pyetje në lidhje me çipin, përputhshmërinë me bërthamën ARM të Linux dhe mundësinë e funksionimit në modin AP (ai e filloi).

E konfiguroni "dongle-n" në përputhje me adaptorin Wi-Fi të integruar.

Së pari - ta rregullojmë 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

Të menaxhojmë ndërfaqen e re Wi-Fi do t'ia japim një demoni të veçantë hostapd, i cili do të niset dhe ndalet në varësi të pranisë në sistem të "dongle-it" të përcaktuar: 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 adaptores Wi-Fi USB, prandaj një copy/paste i thjeshtë mund t'ju thyejë.

Kopjojmë 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 e përshtatim përmbajtjen e tij në këtë formë:

[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

Nuk mbetet gjë tjetër veçse të aktivizoni instancën e re të hostapd:

# systemctl enable hostapd2

Kjo është e gjithë! Tundni "dongle-n" dhe vetë "mali", shikoni lidhjet wireless përreth.

Dhe përfundimisht, dua të paralajmëroj për cilësinë e adaptores USB Wi-Fi dhe furnizimin me energji të Raspberry. Të lidhur "në nxehtë", ndonjëherë mund të shkaktojë "ngrirje të mali" për shkak të çështjeve të përkohshme elektrike.

Burimi: habr.com

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