Raspberry Pi + CentOS = „Wi-Fi“ viešosios interneto prieigos taškas (arba aviečių maršrutizatorius su raudona kepure)

Internete yra daug informacijos apie „Wi-Fi“ prieigos taškų kūrimą, pagrįstą „Raspberry“ vienos plokštės kompiuteriu. Paprastai tai reiškia, kad reikia naudoti Raspbian operacinę sistemą, gimtąją Raspberry.

Būdamas RPM pagrįstų sistemų šalininkas, negalėjau praeiti pro šį mažą stebuklą ir neišbandyti jame savo mylimo CentOS.

Straipsnyje pateikiamos instrukcijos, kaip sukurti 5 GHz/AC Wi-Fi maršrutizatorių iš Raspberry Pi 3 Model B+, pagrįsto CentOS operacine sistema. Bus keletas standartinių, bet mažai žinomų gudrybių, o kaip premiją – brėžinys, kaip prie Raspberry prijungti papildomą Wi-Fi įrangą, leidžiančią vienu metu veikti keliais režimais (2,4+5GHz).

Raspberry Pi + CentOS = „Wi-Fi“ viešosios interneto prieigos taškas (arba aviečių maršrutizatorius su raudona kepure)
(laisvai prieinamų vaizdų derinys)

Iš karto atkreipkime dėmesį, kad kai kurie kosminiai greičiai neveiks. Iš savo Raspberry per orą išspaudžiu daugiausia 100 Mbps ir tai apima mano interneto tiekėjo greitį. Kam tau toks vangus kintamasis, jei teoriškai galima gauti pusę gigabito net ant N? Jei uždavėte sau šį klausimą, eikite į parduotuvę ir nusipirkite tikrą maršrutizatorių su aštuoniomis išorinėmis antenomis.

0. Ko tau prireiks

  • Tiesą sakant, pats „avietinis produktas“ yra tokio kalibro: Pi 3 Model B+ (siekiant trokštamų 5 GHz greičių ir kanalų);
  • Gera microSD >= 4GB;
  • Darbo stotis su Linux ir microSD skaitytuvu/rašytuvu;
  • Turite pakankamai Linux įgūdžių, straipsnis skirtas apmokytam Geek'ui;
  • Laidinio tinklo (eth0) ryšys tarp Raspberry ir Linux, veikia DHCP serveris vietiniame tinkle ir prieiga prie interneto iš abiejų įrenginių.

Mažas komentaras apie paskutinį punktą. „Kas buvo pirmas, kiaušinis ar...“ kaip sukurti „Wi-Fi“ maršrutizatorių, kai nėra interneto prieigos įrangos? Palikime šį linksmą pratimą už straipsnio taikymo srities ir tiesiog manykime, kad Raspberry yra prijungtas prie vietinio tinklo laidu ir turi prieigą prie interneto. Tokiu atveju mums nereikės papildomo televizoriaus ir manipuliatoriaus, kad galėtume nustatyti „avietę“.

1. Įdiekite CentOS

Pagrindinis projekto puslapis

Šio straipsnio rašymo metu įrenginyje veikianti CentOS versija buvo 32 bitų. Kažkur žiniatinklyje aptikau nuomones, kad tokių OS našumas 64 bitų ARM architektūroje sumažėja net 20%. Šią akimirką paliksiu be komentarų.

„Linux“ sistemoje atsisiųskite minimalų vaizdą su branduoliu "-RaspberryPI-"ir įrašykite į microSD:

# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz | 
  dd of=/dev/mmcblk0 bs=4M
# sync

Prieš pradėdami naudoti vaizdą, pašalinsime iš jo SWAP skaidinį, išplėsime šaknį iki viso turimo tomo ir atsikratysime SELinux. Algoritmas paprastas: sukurkite šakninės versijos kopiją Linux sistemoje, ištrinkite visus skaidinius iš microSD, išskyrus pirmąjį (/boot), sukurkite naują šaknį ir grąžinkite jos turinį iš kopijos.

Reikalingų veiksmų pavyzdys (sunki konsolės išvestis)

# 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

Išpakavus šakninio skaidinio turinį, laikas jį pakeisti.

Išjungti SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Redagavimas /mnt/etc/fstab, paliekant jame tik du įrašus apie skaidinius: boot (/boot, be pakeitimų) ir root (pakeičiame UUID reikšmę, kurią galima sužinoti ištyrus komandos blkid išvestį Linux sistemoje):

UUID=6a1a0694-8196-4724-a58d-edde1f189b31  /     ext4    defaults,noatime 0 0
UUID=6938-F4F2                             /boot vfat    defaults,noatime 0 0

Galiausiai pakeičiame branduolio įkrovos parametrus: nurodome naują šakninio skaidinio vietą, išjungiame derinimo informacijos išvestį ir (pasirinktinai) uždraudžiame branduoliui priskirti IPv6 adresus tinklo sąsajose:

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

Čia yra turinys /mnt/cmdline.txt į šią formą (viena eilutė be brūkšnelių):

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

Atlikta:

# cd
# umount /mnt
# sync

Pertvarkome „microSD“ į „avietę“, paleidžiame ir gauname prieigą prie tinklo per ssh (root/centos).

2. CentOS nustatymas

Pirmieji trys nepajudinami judesiai: passwd, yum -y atnaujinimas, perkrovimo.

Dovanojame tinklo valdymą tinkle:

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

Sukurkite failą (kartu su katalogais) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Perkrauname „avietę“ ir vėl gauname prieigą prie tinklo per ssh (IP adresas gali pasikeisti). Atkreipkite dėmesį į tai, kas naudojama / Etc / resolv.conf, kurį anksčiau sukūrė tinklo tvarkyklė. Todėl, jei kyla problemų dėl sprendimo, redaguokite jo turinį. Naudokite sistema išspręsta mes ne.

Pašaliname „nereikalingus“, pataisome ir pagreitiname OS įkėlimą:

# 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

Kam reikia cron o kas nevirškina įmontuoto sisteminiai laikmačiai, gali nustatyti, ko trūksta. / var / log- ir pažiūrėk Journalctl. Jei jums reikia žurnalo istorijos (pagal numatytuosius nustatymus informacija saugoma tik nuo sistemos paleidimo momento):

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf

Išjungti pagrindinių paslaugų IPv6 naudojimą (jei reikia)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

„Avietės“ ​​laiko reikšmė yra svarbus dalykas. Kadangi iš dėžutės nėra aparatinės įrangos galimybės išsaugoti dabartinę laikrodžio būseną perkrovus, reikia sinchronizuoti. Labai geras ir greitas demonas tam yra chronija - jau įdiegta ir paleidžiama automatiškai. Galite pakeisti NTP serverius į artimiausius.

/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

Norėdami nustatyti laiko juostą, kurią naudosime triukas. Kadangi mūsų tikslas yra sukurti Wi-Fi maršrutizatorių, veikiantį 5GHz dažniais, netikėtumams ruošimės iš anksto reguliatorius:

# yum info crda
Santrauka: 802.11 belaidžio tinklo reguliavimo atitikties demonas

Šis blogas dizainas, taip pat pagrįstas laiko juosta, „draudžia“ naudoti (Rusijoje) 5 GHz dažnius ir kanalus su „aukštais“ skaičiais. Triukas yra nustatyti laiko juostą nenaudojant žemynų / miestų pavadinimų, ty vietoj:

# timedatectl set-timezone Europe/Moscow

Mes spaudžiame:

# timedatectl set-timezone Etc/GMT-3

Ir paskutinis sistemos šukuosenos akcentas:

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

Viskas, kas buvo pasakyta aukščiau, gali būti laikoma išsamiomis instrukcijomis, kaip įdiegti „vanilinę“ CentOS „Raspberry Pi“. Turėtumėte gauti kompiuterį, kuris (iš naujo) paleidžiamas greičiau nei per 10 sekundžių, naudoja mažiau nei 15 megabaitų RAM ir 1.5 gigabaito „microSD“ (iš tikrųjų mažiau nei 1 gigabaitą dėl neužbaigto / įkrovimo, bet būkime sąžiningi).

Norėdami įdiegti Wi-Fi prieigos taško programinę įrangą šioje sistemoje, turėsite šiek tiek išplėsti standartinio CentOS platinimo galimybes. Visų pirma, atnaujinkime integruoto Wi-Fi adapterio tvarkyklę (firmware). Projekto pagrindiniame puslapyje rašoma:

„Wi-Fi“ „Raspberry 3B“ ir „3B+“.

„CentOS Project“ neleidžia platinti „Raspberry PI 3B/3B+“ programinės įrangos failų. Norėdami suprasti problemą, gauti programinę-aparatinę įrangą ir nustatyti „Wi-Fi“, galite naudoti šiuos straipsnius.

Tai, kas draudžiama CentOS projektui, mums nėra draudžiama asmeniniam naudojimui. „CentOS“ paskirstymo „Wi-Fi“ programinę-aparatinę įrangą pakeičiame atitinkama „Broadcom“ kūrėjų programine įranga (tos pačios nekenčiamos dvejetainės dėmės...). Tai ypač leis naudoti kintamąją srovę prieigos taško režimu.

„Wi-Fi“ programinės įrangos atnaujinimasSužinokite įrenginio modelį ir dabartinę programinės įrangos versiją:

# 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 

Matome, kad programinės aparatinės įrangos versija yra 7.45.18, datuota 01.03.2015-XNUMX-XNUMX, ir prisimename šį skaičių rinkinį: 43455 (brcmfmac43455-sdio.bin).

Atsisiųskite dabartinį Raspbian vaizdą. Tinginiai gali įrašyti vaizdą į „microSD“ ir iš ten paimti failus su programine įranga. Arba galite prijungti pagrindinį vaizdo skaidinį „Linux“ ir nukopijuoti tai, ko jums reikia iš ten:

# 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

Gauti „Wi-Fi“ adapterio programinės aparatinės įrangos failai turi būti nukopijuoti ir pakeisti „rapberry“ į katalogą /usr/lib/firmware/brcm/

Perkrauname būsimą maršrutizatorių ir patenkinti šypsomės:

# 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 

Versija: 7.45.154, 27.02.2018-XNUMX-XNUMX.

Ir žinoma 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. Tinklo konfigūracija ir laukiantys iššūkiai

Kaip susitarėme aukščiau, „avietė“ yra prijungta „laidu“ prie vietinio tinklo. Tarkime, tiekėjas suteikia prieigą prie interneto lygiai taip pat: adresą viešajame tinkle dinamiškai išduoda DHCP serveris (galbūt su MAC susiejimu). Tokiu atveju po galutinio avietės sąrankos tereikia „prijungti“ tiekėjo kabelį prie jo ir viskas. Autorizacija naudojant sisteminis tinklas - atskiro straipsnio tema ir čia nėra aptariama.

Raspberry Wi-Fi sąsaja (-os) yra vietinis tinklas, o įtaisytasis Ethernet adapteris (eth0) yra išorinis. Sunumeruokime vietinį tinklą statiškai, pavyzdžiui: 192.168.0.0/24. Raspberry adresas: 192.168.0.1. DHCP serveris veiks išoriniame tinkle (internete).

Pavadinimo nuoseklumo problema и garsus Gvatemalos programuotojas - dvi bėdos, kurios laukia visų, konfigūruojančių tinklo sąsajas ir paslaugas sisteminiuose platinimuose.

Lygiagretus chaosas (lyrinis nukrypimas)Lennart Pottering sukūrė savo programą systemd Labai gerai. Tai systemd taip greitai paleidžia kitas programas, kad jie, nespėję atsigauti po teisėjo švilpuko smūgio, starte suklumpa ir nukrenta net nepradėję kliūčių ruožo.

Bet jei rimtai, agresyvus paleistų procesų lygiagretinimas sisteminės OS pradžioje yra savotiškas „asilo tiltas“ patyrusiems nuosekliems LSB specialistams. Laimei, įvesti tvarką šiame „lygiagrečiame chaose“ pasirodo paprasta, nors ir ne visada akivaizdu.

Sukuriame dvi virtualaus tilto sąsajas su pastoviais pavadinimais: LAN и bekraujis. Prie pirmojo „prijungsime“ Wi-Fi adapterį (-ius), o prie antrojo – eth0 „rapberry“.

/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=taip pašalina poreikį pateikti užuominą branduoliui per sysctl, kad būtų įjungtas maršrutas.
MACAadresas = Komentuokime ir, jei reikia, pakeiskime.

Pirmiausia „prijungiame“ eth0. Prisimename „vienodumo problemą“ ir naudojame tik šios sąsajos MAC adresą, kurį galima sužinoti, pavyzdžiui, taip:

# cat /sys/class/net/eth0/address 

Mes kuriame /etc/systemd/network/eth.network:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Network]
Bridge=wan

Ištriname ankstesnį konfigūracijos failą eth0, iš naujo paleidžiame Raspberry ir gauname prieigą prie tinklo (tikriausiai IP adresas pasikeis):

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

5.DNSMASQ

Kuriant „Wi-Fi“ prieigos taškus, niekas nepranoksta dnsmasq + įkaitais dar nesupratau. Mano nuomone.

Jei kas pamiršo, tada...įkaitais - tai yra dalykas, kuris valdo „Wi-Fi“ adapterius (ypač pasirūpins jų prijungimu prie virtualaus LAN „avietės“), autorizuoja ir registruoja belaidžius klientus.

dnsmasq - sukonfigūruoja klientų tinklo krūvą: išduoda IP adresus, DNS serverius, numatytuosius šliuzus ir panašius malonumus.

Pradėkime nuo dnsmasq:

# yum install dnsmasq

Raštas / 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

redaguokite jį pagal savo skonį.

minimalistinis /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

„Magija“ čia slypi parametre rišamas-dinaminis, kuri liepia dnsmasq demonui palaukti, kol jis pasirodys sistemoje sąsaja=lan, ir nenualpti nuo išdidžios vienatvės priepuolio po starto.

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

6. HOSTAPD

Ir galiausiai stebuklingos hostapd konfigūracijos. Neabejoju, kad kažkas skaito šį straipsnį ieškodamas būtent šių brangių eilučių.

Prieš diegdami hostapd, turite įveikti „vienodumo problemą“. Integruotas Wi-Fi adapteris wlan0 gali lengvai pakeisti savo pavadinimą į wlan1, kai prijungiate papildomą USB Wi-Fi įrangą. Todėl sąsajų pavadinimus taisysime taip: sugalvosime unikalius (belaidžių) adapterių pavadinimus ir susiesime juos su MAC adresais.

Integruotam Wi-Fi adapteriui, kuris vis dar yra wlan0:

# cat /sys/class/net/wlan0/address 
b8:27:eb:xx:xx:xx

Mes kuriame /etc/systemd/network/wl0.link:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Link]
Name=wl0

Dabar tuo įsitikinsime wl0 - Tai įmontuotas „Wi-Fi“. Iš naujo paleidžiame Raspberry, kad tuo įsitikintume.

Diegti:

# yum install hostapd wireless-tools

Konfigūracijos failas /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

Nepamiršdamas nė akimirkos Valstybinis nepaprastųjų situacijų komitetas, pakeiskite mums reikalingus parametrus ir rankiniu būdu patikrinkite, ar veikia:

# hostapd /etc/hostapd/hostapd.conf

hostapd pradės veikti interaktyviu režimu, transliuodamas savo būseną į konsolę. Jei klaidų nėra, klientai, palaikantys kintamosios srovės režimą, galės prisijungti prie prieigos taško. Norėdami sustabdyti hostapd - Ctrl-C.

Belieka įjungti hostapd sistemos paleidimo metu. Jei atliksite standartinį dalyką (systemctl enable hostapd), tada po kito perkrovimo galite gauti demoną, kuris „įsiveržia į kraują“ su diagnoze „sąsaja wl0 nerasta“. Dėl „lygiagretaus chaoso“ hostapd įsijungė greičiau, nei branduolys rado belaidį adapterį.

Internetas yra pilnas priemonių: nuo priverstinio skirtojo laiko prieš paleidžiant demoną (kelias minutes) iki kito demono, kuris stebi sąsajos išvaizdą ir (iš naujo) paleidžia pagrindinį kompiuterį. Sprendimai gana veiksmingi, bet siaubingai negražūs. Kviečiame į pagalbą didįjį systemd su savo „tikslais“ ir „užduotimis“ bei „priklausomybėmis“.

Nukopijuokite platinimo paslaugos failą į /etc/systemd/system/hostapd.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system

ir sumažinkite jo turinį iki tokios formos:

[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

Atnaujinto paslaugos failo magija slypi dinamiškame hostapd susiejime su nauju tikslu – wl0 sąsaja. Kai atsiranda sąsaja, demonas paleidžiamas, o kai išnyksta, jis sustoja. Ir visa tai internete – neperkraunant sistemos. Ši technika bus ypač naudinga prijungiant USB Wi-Fi adapterį prie Raspberry.

Dabar gali:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Ką???" © Taip, taip! Nė vienas systemd. Nėra naujų kombainų (formoje užkarda), kurios galiausiai daro tą patį.

Naudokimės senu geru iptables, kurios paslaugos po starto įkels tinklo taisykles į branduolį ir tyliai išsijungs, nelikdamos rezidentu ir nenaudodamos resursų. systemd turi elegantišką IPMasquerade=, bet adreso vertimą (NAT) ir ugniasienę vis tiek patikėsime iptables.

Diegti:

# yum install iptables-services
# systemctl enable iptables ip6tables

Aš norėčiau išsaugoti iptables konfigūraciją kaip scenarijų (pavyzdys):

#!/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

Vykdome aukščiau pateiktą scenarijų ir prarandame galimybę užmegzti naujus laidinius SSH ryšius su Raspberry. Teisingai, mes sukūrėme „Wi-Fi“ maršrutizatorių, prie kurio prieiga „internetu“ pagal numatytuosius nustatymus draudžiama - dabar tik „belaidžiu būdu“. Prijungiame tiekėjo eterneto kabelį ir pradedame naršyti!

8. Priemoka: +2,4 GHz

Kai surinkau pirmąjį Raspberry maršrutizatorių, naudodamas aukščiau aprašytą piešinį, savo buityje aptikau daugybę programėlių, kurios dėl Wi-Fi dizaino apribojimų „avietės“ ​​visiškai nematė. Maršrutizatoriaus perkonfigūravimas, kad jis veiktų 802.11b/g/n, buvo nesportiškas, nes maksimalus greitis „per orą“ šiuo atveju neviršijo 40 Mbit, o mano mėgstamiausias interneto tiekėjas man siūlo 100 (per laidą).

Tiesą sakant, problemos sprendimas jau buvo išrastas: antroji Wi-Fi sąsaja, veikianti 2,4 GHz dažniu, ir antrasis prieigos taškas. Netoliese esančiame kioske nusipirkau ne pirmąjį, o antrąjį mano sutiktą USB Wi-Fi „švilpuką“. Pardavėją kankino klausimai apie mikroschemų rinkinį, suderinamumą su ARM Linux branduoliais ir galimybę dirbti AP režimu (jis pirmasis pradėjo).

„Švilpuką“ sukonfigūruojame pagal analogiją su įmontuotu „Wi-Fi“ adapteriu.

Pirma, pervadinkime jį į 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

Naujos „Wi-Fi“ sąsajos valdymą patikėsime atskiram „hostapd“ demonui, kuris įsijungs ir sustos priklausomai nuo to, ar sistemoje yra griežtai apibrėžtas „švilpukas“: wl1.

Konfigūracijos failas /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]

Šio failo turinys tiesiogiai priklauso nuo USB Wi-Fi adapterio modelio, todėl banalus kopijavimas/įklijavimas gali nepavykti.

Nukopijuokite platinimo paslaugos failą į /etc/systemd/system/hostapd2.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service

ir sumažinkite jo turinį iki tokios formos:

[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

Belieka įjungti naują hostapd egzempliorių:

# systemctl enable hostapd2

Tai viskas! Patraukite „švilpuką“ ir „avietę“, pažiūrėkite į aplinkinius belaidžius tinklus.

Galiausiai noriu perspėti apie USB Wi-Fi adapterio ir Raspberry maitinimo šaltinio kokybę. Prijungtas „karštas švilpukas“ kartais gali sukelti „aviečių užšalimą“ dėl trumpalaikių elektros gedimų.

Šaltinis: www.habr.com

Добавить комментарий