Raspberry Pi + CentOS = Wi-Fi Hotspot (ose ruter raspberry me një kapele të kuqe)

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

Raspberry Pi + CentOS = Wi-Fi Hotspot (ose ruter raspberry me një kapele të kuqe)
(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

Faqja kryesore e projektit

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 kohëmatës të sistemuar, mund të përcaktojë atë që mungon. / var / log- dhe shiko ditarctl. Nëse keni nevojë për histori log (si parazgjedhje, informacioni ruhet vetëm nga momenti i fillimit të 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 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).

Shkarkoni imazhin aktual të Raspbian. Njerëzit dembelë mund ta shkruajnë imazhin në microSD dhe t'i marrin skedarët me firmware nga atje. Ose mund të montoni ndarjen rrënjësore të imazhit në Linux dhe të kopjoni atë që ju nevojitet nga atje:

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

Problemi i konsistencës së emërtimit и programues i famshëm nga Guatemala - dy probleme që presin këdo që konfiguron ndërfaqet dhe shërbimet e rrjetit në shpërndarjet systemd.

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ë...hostapd - kjo është gjëja që kontrollon përshtatësit Wi-Fi (në veçanti, do të kujdeset për lidhjen e tyre me virtualin lan "raspberries"), autorizon dhe regjistron klientët me valë.

dnsmasq — konfiguron grupin e rrjetit të klientëve: lëshon adresat IP, serverët DNS, portën e paracaktuar dhe kënaqësitë e ngjashme.

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 Komiteti Shtetëror i Emergjencave, ndryshojmë parametrat që na duhen dhe kontrollojmë manualisht për funksionalitetin:

# 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

Shto një koment