Interneti on tohutult teavet Wi-Fi juurdepääsupunktide loomisest Raspberry-põhise ühesilmakomplekti abil. Tüüpiliselt kasutatakse selleks «malin» jaoks mõeldud opsüsteemi — Raspbian.
RPM-põhiste süsteemide austajana ei saanud ma mööda vaadata sellest väikest imebjektist ja ei proovinud oma lemmik CentOSi selle peal.
Artiklis on juhend, kuidas valmistada 5GHz/AC Wi-Fi ruuter Raspberry Pi 3 Model B+ põhjal CentOS operatsioonisüsteemi kasutades. Oodata on mitmeid standardseid, kuid vähe tuntud nippe, boonusena — joonis, kuidas ühendada «malinaga» täiendavat Wi-Fi seadmeid, mis võimaldab tal töötada mitu režiimi korraga (2,4+5GHz).

(piltide segu vabastasest allikast)
Tuleb kohe märkida, et mingit kosmilist kiirusel ei ole võimalik saavutada. Hoolin oma «malinast» maksimaalselt 100 Mbit, ja see katab minu Interneti-teenuse pakkuja kiirus. Miks on vaja nii igavat AC-d, kui isegi N-teoorias oleks võimalik saada poolgigabitit? Kui te küsite endalt sellist küsimust, siis minge poodi ja ostke tõeline ruuter kaheksa välist antenniga.
0. Mida on vaja
- Nohikultuur on "muraihase toode" kaliibriga: Pi 3 Model B+ (et saavutada soovitud 5GHz kiirus ja kanalid);
- Kvaliteetne microSD > = 4GB;
- Tööstusjaam Linuxiga ja microSD lugemise/kirjutamise seadmega;
- Piisavad oskused Linuxis, artikkel on mõeldud ettevalmistatud hobile;
- Kaabliga võrguside (eth0) Raspberry ja Linuxi vahel, töötav DHCP-server kohalikus võrgus ja juurdepääs Internetile mõlemalt seadmelt.
Väike kommentaar viimase punkti kohta. "Mis tekkis esimesena, muna või…" kuidas teha Wi-Fi ruuterit, kui mingit Interneti-ühenduse seadmeid ei ole? Jätame selle huvitava harjutuse artikli piiridest välja ja eeldame lihtsalt, et Raspberry on kaabliga kohaliku võrgu külge ühendatud ja omab juurdepääsu Internetile. Sellisel juhul ei ole meile vaja täiendavat telerit ega hiirt, et "malinki" seadistada.
1. CentOSi paigaldamine
Artikli kirjutamise hetkel on seadmes töötav CentOS versioon 32-bitine. Kusagil internetiavarustes olen näinud arvamusi, et 64-bitise ARM arhitektuuriga selliste operatsioonisüsteemide jõudlus väheneb koguni 20%. Jätan selle punkti ilma kommentaarita.
Linuxil allalaadime minimaalse pildi koos kerneli «-RaspberryPI-» ja kirjutame selle microSD-kaardile:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Enne pildi kasutamist eemaldame sellest SWAP jagamise, laiendame juure kogu saadaval oleva ruumiga ja vabastame SELinuxist. Algoritm on lihtne: teeme Linuxis juure koopia, eemaldame microSD-l kõik jagamised peale esimese (/boot), loome uue juure ja taastame selle sisu koopia abil.
Näide vajalike toimingute (toore konsooli väljund)
# 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
Pärast juure jaotise sisu lahtipakkimist on õige aeg teha sinna mõned muudatused.
Kehitame SELinuxi välja /mnt/etc/selinux/config:
SELINUX=disabled
Redigeerime /mnt/etc/fstab, jättes sinna ainult kaks jaotise kirjet: boot (/boot, muutmata) ja juure (muudame UUID väärtust, mille saame teada, uurides käsku blkid Linuxis):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Lõpuks muudame kerneli laadimise parameetreid: määrame uue juure jaotise asukoha, keelame tõrvikut teabe väljundi ja (valikuliselt) keelame kernelil määrata IPv6 aadresse võrguliidestes:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Seonime sisu /mnt/cmdline.txt järgnevaks kujuks (üks rida ilma murranguteta):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Valmis:
# cd
# umount /mnt
# sync
Sisestame microSD «малинка»-le, käivitame selle ja saame sellele võrguühenduse ssh kaudu (root/centos).
2. CentOS seadistamine
Esimesed kolm kindlat sammu: passwd, yum -y update, taaskäivita.
Andmevõrgu haldamine anname networkd:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Loome faili (koos kataloogidega) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Käivitage «малинка» ja saame sellele uuesti võrguühenduse ssh kaudu (IP-aadress võib muutuda). Pange tähele, et kasutatakse /etc/resolv.conf, varasemalt loodud Network Manager-iga. Seetõttu, probleemide korral resolve-iga, muutke selle sisu. Kasutada systemd-resolved me ei plaani.
Kustutame «ülemäärase», parandame ja kiirendame OS-i käivitamist:
# 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
Kellele on vajalik cron ja kes ei talu sisseehitatud , saavad paigaldada puuduoleva. /var/log-ja vaatame läbi journalctl. Kui ajaloos on vaja ajalugu (vaikimisi hoitakse andmeid ainult alates süsteemi käivitamisest):
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Keelame IPv6 kasutamise peamistes teenustes (kui vajalik)/etc/ssh/sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Aegade täpsus „malinil“ on oluline asi. Kuna „karbist välja“ puudub riistvara võimalus salvestada kellade praegust seisundit taaskäivitamisel, on vajalik sünkroniseerimine. Selle jaoks on suurepärane ja kiire demon — chrony — juba installitud ja käivitub automaatselt. NTP-servereid saab vahetada lähimaks.
/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
Aja tsooni seadmiseks kasutame trikki. Kuna meie eesmärk on luua Wi-Fi ruuter, mis töötab 5GHz sagedustel, valmistame end ette üllatuste jaoks regulaator:
# yum info crda
Kokkuvõte: Reguleerimise vastavuse demon 802.11 traadita võrgustikule
See kaval konstruktsioon, arvestades ka ajavahet, „keelab“ (Venemaal) 5GHz sageduste ja „suuremate“ numbritega kanalite kasutamise. Trikk seisneb ajavööndi seadmisel ilma kontinente/linna nimedeta, st selle asemel:
# timedatectl set-timezone Europe/Moscow
Surume sisse:
# timedatectl set-timezone Etc/GMT-3
Ja süsteemi juukselõikuse viimased nüansid:
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# Kasutaja spetsiifiline keskkond ja käivitamisprogrammid
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. CentOS lisandused
Kõik, mida eespool öeldi, võib pidada lõpetatud juhiseks 'toore' CentOS-i installimiseks Raspberry Pi-le. Teil peaks olema arvuti, mis (taaskäivitub) vähem kui 10 sekundiga, kasutab vähem kui 15 megabaidi RAM-i ja 1,5 gigabaidi microSD kaarti (tegelikult vähem kui 1 gigabaid, kuna /boot ei ole täielik, aga oleme ausad kuni lõpuni).
Wi-Fi juurdepääsupunkti tarkvara installimiseks sellele süsteemile peab me standardse CentOS-i distributsiooni võimekust veidi laiendama. Esiteks 'värskendame' sisseehitatud Wi-Fi-adapteri draiverit (firmware). Projekti kodu lehelt on öeldud:
Wifi Raspberry 3B ja 3B+
Raspberry PI 3B/3B+ firmware faile ei tohi CentOS projekti poolt levitada. Te võite kasutada järgmisi artikleid, et mõista probleemi, hankida firmware'i ja seadistada wifi.
Mida CentOS projektile ei tohi, seda ei ole meile isiklikuks kasutamiseks keelatud. Asendame CentOS-i distributsiooni Wi-Fi firmware Broadcomi arendajate omaga (need samad vihatud binaarsed blobid…). See võimaldab kasutada AC režiimis juurdepääsupunktina.
Wi-Fi firmware'i uuendusSelgitame seadme mudeli ja praeguse firmware versiooni välja:
# 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
Näeme, et firmware versioon 7.45.18 alates 01.03.2015, ja mäletame järgmist numbrite kogumit: 43455 (brcmfmac43455-sdio.bin).
. Laiskade jaoks on võimalik üles kirjutada pilt microSD-le ja sealt faile tarkvara jaoks välja võtta. Samuti on võimalus montaažida pildi juurepartitsioon Linuxis ja vajalikud failid sealt kopeerida:
# 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
Saadud Wi-Fi adapteri tarkvarafailid tuleb kopeerida, asendades need «maaluka» kataloogis. /usr/lib/firmware/brcm/
Taaskäivitame tulevase ruuteri ja naeratame rahulolevalt:
# 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
Versioon: 7.45.154, 27.02.2018.
Ja muidugi 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. Võrgukonfiguratsioon ja eesootavad raskused.
Kuna me kokku leppisime, on «maalukas» ühendatud «kaabli» kaudu kohaliku võrgu külge. Oletame, et ka teenusepakkuja pakub juurdepääsu internetile täpselt sama meetodi kaudu: avaliku võrgu aadress antakse dünaamiliselt DHCP serveri poolt (võib-olla MAC-aadressiga seotud). Sellisel juhul, pärast «maaluka» lõplikku seadistamist, piisab, kui «pistate» teenusepakkuja kaabli teda ning kõik on valmis. Autoriseerimine systemd-networkd on eraldi teema ning siin ei käsitleta.
Raspberry Wi-Fi liidesed on kohaliku võrgu jaoks, sisseehitatud Ethernet adapter (eth0) on väliste ühenduste jaoks. Kohalik võrk numereeritakse staatiliselt, näiteks: 192.168.0.0/24. «Maaluka» aadress: 192.168.0.1. Välises võrgus (internetis) töötab DHCP server.
ja — kaks ebamugavust, mis kummitavad igaüht, kes tegeleb võrgu liideste ja teenuste seadistamisega systemd jaotustes.
Paralleelne kaos (lühiülevaade)Lennart Poettering koostas oma programmi systemd väga hästi. See systemd käivitab teisi programme nii kiiresti, et need, ei jõua kohtuniku vile tõttu šokeeritud olekusse, komistavad ja kukuvad stardijoonele, enne kui nende takistusjooks isegi algab.
Aga kui tõsiselt rääkida, siis süsteemi sitkuse praegune protsesside agressiivne paralleliseerimine on omamoodi 'eesli sild' kogenud järjestikuste LSB-fännide jaoks. Õnneks on selle 'paralleelse kaose' korrastamine lihtne, ehkki mitte alati ilmne.
Loome kaks virtuaalset silda (bridge) püsivate nimedega: lan ja wan. Esimesele 'ühendame' Wi-Fi adapter(i), teisele — eth0 'malinile'.
/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 välistab vajaduse sysctl kaudu tuumale vihjata suunamise võimaldamiseks.
MACAddress= kommenteerime ja vajadusel muutame.
Esiteks "ühendame" eth0. Peame meeles "ühtsuse probleemi" ning kasutame ainult selle liidese MAC-aadressi, mille saab näiteks sel viisil:
# cat /sys/class/net/eth0/address
Loome /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Kustutame eelmise eth0 конфигура файл, taaskäivitame "mälukaarti" ja saame sellele võrguühenduse (IP-aadress tõenäoliselt muutub):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5. DNSMASQ
Wi-Fi ligipääsupunktide loomiseks pole paremat paari kui dnsmasq + hostapd ei ole veel välja mõeldud. Minu arvates.
Kes unustas, see… — see on seade, mis haldab Wi-Fi adaptereid (konkreetselt, võtab enda kanda töö virtuaalse lan "mälukaardi" ühendamise), autoriseerib ja registreerib traadita kliente.
— konfigureerib klientide võrgu staki: jagab IP-aadresse, DNS-servereid, vaikimisi lüüsi ja muid sarnaseid hüvesid.
Alustame dnsmasq-st:
# yum install dnsmasq
Malli /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
redigeerime seda oma maitse järgi.
Minimalistlik /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
"Kummifetš" siin seisneb parameetris bind-dynamic, mis näitab dnsmasq demonile, et oodata süsteemi ilmumist interface=lan, mitte minema uhkesse üksildusse pärast käivitamist.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Ja lõpuks, imelised hostapd konfiguratsioonid. Olen kindel, et keegi loeb seda artiklit just nende püha lõiguga.
Enne hostapd installimist tuleb lahendada „ühtsuse probleem“. Sisseehitatud Wi-Fi adapter wlan0 võib kergesti muuta oma nime wlan1, kui lisate täiendava USB Wi-Fi seadme. Seetõttu kinnitame liidese nimed järgmiselt: anname (traadita) adapteritele unikaalsed nimed ja seome need MAC-aadressidega.
Sisseehitatud Wi-Fi adapteri jaoks, mis on veel wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Loome /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Nüüd oleme kindlad, et wl0 — see on sisseehitatud Wi-Fi. Taaskäivita „malinik“, et veenduda selles.
Installime:
# yum install hostapd wireless-tools
Konfiguratsioonifail /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
Mitte mitte unustamata , muudame vajalikud parameetrid ja kontrollime käsitsi töökindlust:
# hostapd /etc/hostapd/hostapd.conf
hostapd käivitub interaktiivses režiimis, edastades oma oleku konsoolile. Kui vigu ei esine, saavad AC-režiimi toetavad kliendid juba ühenduda ligipääsupunktiga. Hostapd peatamiseks vajutage Ctrl-C.
Jäänud on hostapd süsteemi automaatkäivitusse lisamine. Kui tegutseda tavapäraselt (systemctl enable hostapd), võib järgmisel taaskäivitamisel juhtuda, et demon on "veres lamamas" diagnoosiga "liidest wl0 ei leitud". Tulemuseks oli, et "paralleelne kaos" pani hostapd tööle kiiremini, kui tuum leidis traadita adapteri.
Internetis on palju lahendusi: sundida demonit enne käivitamist mõneks minutiks ootama, kuni kõige muu, mis jälgib liidese ilmumist ja (taas)käivitab hostapdi, on ka üks demon. Lahendused on täiesti toimivad, kuid kohutavalt inetud. Kutsume appi suure systemd oma "eesmärkidega" ja "ülesannetega" "sõltuvustega".
Kopeerime distributiivse teenuse faili /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
ja viime selle sisu järgmisele kujule:
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authorizer
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
Uuendatud teenuse faili maagia seisneb hostapd dünaamilises sidumises uue sihtmärgiga — liidesega wl0. Kui liides ilmub, käivitatakse demon, kui see kaob, peatatakse see. Ja see toimub kõik otse — ilma süsteemi taaskäivitamata. See tehnika on eriti kasulik USB Wi-Fi adapteri ühendamisel 'malinkaga'.
Nüüd saab:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Mida???" © Jah-jah! Ei mingit systemd. Ei mingeid moodsaid kombaine (nagu firewalld), mis lõpuks teevad üks ja sama.
Kasutame ikka vanakoolset iptables, mille teenus pärast käivitumist laadib tuuma võrgu reeglid ja lõpetab rahulikult töö, jäämata residentuuks ja mitte ressursse tarbima. Systemd-l on elegantne IPMasquerade=, kuid aadresside maskeerimist (NAT) ja tulemüüri usaldame siiski iptables'i.
Installime:
# yum install iptables-services
# systemctl enable iptables ip6tables
Eelistän hoida iptables'i konfiguratsiooni skripti kujul (näide):
#!/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
Käivitame ülaltoodud skripti ja kaotame võimaluse luua uusi kaabliga SSH-ühendusi «malinikuga». Just nii, me oleme valmistanud Wi-Fi ruuteri, millel on vaikimisi «Internet» kaudu juurdepääs keelatud — nüüd ainult «õhu kaudu». Ühendame teenusepakkuja kaabli Ethernetisse ja alustame surfamist!
8. Boonus: +2,4GHz
Kui ma kogusin esimese Raspberry ruuteri ülaltoodud joonise järgi, avastasin, et mul on mitmeid seadmeid, mis oma konstruktsiooniliste piirangute tõttu ei suutnud Wi-Fi'd «maliniku» näha. Ruuteri seadistamine töötama 802.11b/g/n süsteemis oleks olnud sportlikult ebasoodne, kuna maksimaalne «õhu kaudu» kiirus ei ületa 40 Mbit, samas kui minu lemmik Interneti teenusepakkuja pakub mulle 100 (kaabli kaudu).
Tegelikult oli probleemi lahendus juba välja mõeldud: teine Wi-Fi liides, mis töötab sagedusel 2,4GHz, ja teine juurdepääsupunkt. Lähimast poest ostsin mitte esimese, vaid teise USB Wi-Fi «sviistiku», mis mulle ette jäi. Müüja oli segaduses küsimustest kiipkomplekti, ühilduvuse kohta ARM Linuxi tuumadega ja võimaluse üle töötada AP-režiimis (ta alustas esimesena).
Konfigureerime „wi-fi dongli“ nagu sisse ehitatud Wi-Fi adapterit.
Esiteks - nimetame selle ümber 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
Uue Wi-Fi liidese haldamise usaldame eraldi daemonile hostapd, mis käivitub ja peatub sõltuvalt süsteemis olemasoleva kindla „dongli“ olemasolust: wl1.
Konfiguratsioonifail /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]
Selle faili sisu sõltub otseselt USB Wi-Fi adapteri mudelist, seega võib lihtne copy/paste teid petta.
Kopeerime distributiivse teenuse faili /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
ja viime selle sisu järgmisele kujule:
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS autentifikaator
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
Jääb üle käivitada uus hostapd eksemplar:
# systemctl enable hostapd2
Ja kõik! Tõukake „donglit“ ja ise „malin“, vaadake ümbritsevaid traadita võrke.
Ja sooviksin viimasena hoiatada USB Wi-Fi adapteri ja Raspberry toite kvaliteedi eest. Kuuma ühendamise korral võib see mõnikord põhjustada väikese „malina“ hangumist lühiajaliste elektrihäirete tõttu.
Allikas: habr.com
