Az interneten hatalmas mennyiségű információ található a Raspberry alapú Wi-Fi hozzáférési pontok létrehozásáról. Általában a "malinához" készült operációs rendszer, a Raspbian használata javasolt.
RPM-alapú rendszerek híveként nem tudtam elmenni amellett a kis csoda mellett, és meg kellett próbálnom rajta a kedvenc CentOS-omat.
A cikk egy útmutatót kínál 5GHz/AC Wi-Fi router készítésére Raspberry Pi 3 Model B+ használatával, a CentOS operációs rendszer alapjaira. Lesz néhány standard, de kevésbé ismert trükk, és bónuszként egy rajz a kiegészítő Wi-Fi berendezés csatlakoztatásáról a "malinához", amely lehetővé teszi, hogy egyszerre több üzemmódban (2,4+5GHz) dolgozzon.

(képek keveréke a szabad hozzáférésből)
Kezdjük azzal, hogy nem fogunk űrbéli sebességeket elérni. A "malinámból" maximálisan 100 Mbitet hozok ki légies módon, és ez fedezi az internetszolgáltatóm sebességét. Miért lenne szükség egy ilyen lassú AC-re, ha még az N-elmélet szerint is lehetne fél gigabitot elérni? Ha megkérdezed ezt, akkor irány a bolt egy valódi routerért nyolc külső antennával.
0. Mire lesz szükség
- Tehát a "malinás termék" kaliber: Pi 3 Model B+ (az áhított 5GHz sebességek és csatornák eléréséhez);
- Jó minőségű microSD >= 4GB;
- Egy munkastáció Linuxszal és microSD olvasóval/íróval;
- Megfelelő Linux-ismeretek szükségesek, a cikk a felkészült geekek számára szól;
- Vezetékes hálózati (eth0) kapcsolódás a Raspberry és a Linux között, működő DHCP-szerver a helyi hálózaton, és internet-hozzáférés mindkét eszközön.
Egy kis megjegyzés az utolsó ponthoz. "Mi volt előbb, a tojás vagy..." hogyan lehet Wi-Fi routert készíteni internet-hozzáférés nélkül? Ezt az érdekes feladatot hagyjuk a cikk keretein kívül, és egyszerűen feltételezzük, hogy a Raspberry kábellel csatlakozik a helyi hálózathoz, és van internet-hozzáférése. Ebben az esetben nem lesz szükségünk további tévére és manipulátorra a "malina" beállításához.
1. CentOS telepítése
A cikk írásának idején, a működő CentOS verzió az eszközön 32-bites. Valahol a világ hálózatain találkoztam véleményekkel a 64 bites ARM architektúrákra való teljesítménycsökkenésről, ami akár 20%-os is lehet. Ezt a kérdést kommentár nélkül hagyom.
Linuxon letöltjük a minimális képet a "-RaspberryPI-» és rögzítjük microSD-re:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
A kép használatának megkezdése előtt távolítsuk el a SWAP.partíciót, bővítsük a gyökérpartíciót a rendelkezésre álló teljes méretre, és megszabadulunk a SELinux-tól. Az algoritmus egyszerű: készítünk egy másolatot a gyökérpartícióról Linuxon, eltávolítjuk a microSD-ről az összes partíciót, kivéve az elsőt (\/boot), létrehozunk egy új gyökérpartíciót, és visszaállítjuk a tartalmát a másolatból.
Szükséges lépések példája (durva konzolos kimenet)
# 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
A gyökérpartíció tartalmának kicsomagolása után itt az idő néhány változtatás végrehajtására.
Kikapcsoljuk a SELinux-t a /mnt/etc/selinux/config:
SELINUX=disabled
Szerkeszti /mnt/etc/fstab, hagyva benne csak két bejegyzést a partíciókról: a rendszerindító (\/boot, változatlan) és a gyökérpartíció (megváltoztatjuk az UUID értékét, amelyet a blkid parancs kimenetéből tudunk meg Linux alatt):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 \/ ext4 alapértelmezett, noatime 0 0
UUID=6938-F4F2 \/boot vfat alapértelmezett, noatime 0 0
Végül módosítjuk a kernel indítási paramétereit: megadjuk az új gyökérpartíció helyét, kikapcsoljuk a hibakeresési információk megjelenítését, és (opcionálisan) megakadályozzuk, hogy a kernel IPv6 címeket rendeljen a hálózati interfészekhez:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
A tartalmát /mnt/cmdline.txt a következőképpen alakítjuk át (egy sorban, sortörés nélkül):
root=\/dev\/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Kész:
# cd
# umount /mnt
# sync
Áthelyezzük a microSD-t a „malinkába”, elindítjuk, és SSH-n keresztül hozzáférést szerzünk (root\/centos).
2. CentOS konfigurálása
Az első három változtatás elengedhetetlen: passwd, yum -y frissítés, újraindítás.
A hálózat kezelését átadjuk a networkd-nek.:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Létrehozunk egy fájlt (a könyvtárakkal együtt) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Újraindítjuk a „malinkát”, és ismét SSH-n keresztül hozzáférést kapunk (az IP-cím megváltozhat). Vegyük észre, hogy /etc/resolv.conf, amelyet korábban a Network Manager hozott létre, használatban van. Ha problémák merülnek fel a névfeloldással, módosítsuk annak tartalmát. Nem fogunk használni systemd-resolved , mivel nem szükséges.
Eltávolítjuk a „felesleges” elemeket, javítjuk és felgyorsítjuk az operációs rendszer indítását:
# 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
Kinek szükséges a cron és aki nem tudja elviselni a beépített azok telepíthetik a hiányzókat. /var/log- és nézzük meg a journalctl. Ha szükség van a naplózás előzményeire (alapértelmezés szerint csak a rendszer indítása óta tároljuk az adatokat):
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Kikapcsoljuk az IPv6 használatát a fő szolgáltatásoknál (ha szükséges)/etc/ssh/sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Az időszinkronizálás a „malinkában” fontos dolog. Mivel „dobozból” hiányzik a hardveres lehetőség az órák állapotának megőrzésére újraindításkor, szükséges a szinkronizálás. Erre egy nagyon jó és gyors démon a chrony — már telepítve van és automatikusan indul. A legközelebbi NTP-szerverek megváltoztathatók.
/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
Az időzóna beállításához trükk. Mivel a célunk egy 5GHz frekvencián működő Wi-Fi router létrehozása, előre felkészülünk a meglepetésekre szabályozó:
# yum info crda
Összefoglaló: Szabályozói megfelelőségi daemonnak 802.11 vezeték nélküli hálózathoz
Ez a gonosz konstrukció, többek között az időzónára támaszkodva, 'tiltja' az (Oroszországban) a 5GHz frekvenciák és a 'nagy' számú csatornák használatát. A trükk az, hogy az időzónát kontinensek/városok nevének használata nélkül állítjuk be, vagyis nem ezt használva:
# timedatectl set-timezone Europe/Moscow
Nyomjuk bele:
# timedatectl set-timezone Etc/GMT-3
És a rendszer frizurájának végső simításai:
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# Felhasználó-specifikus környezet és indítóprogramok
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. CentOS kiegészítések
Mindezek, amikről eddig beszéltünk, egy 'tisztán' CentOS telepítési útmutatónak tekinthetők Raspberry Pi-re. Olyan PC-t kell kapnia, amely (újra)indul kevesebb mint 10 másodperc alatt, kevesebb mint 15 megabájt RAM-ot használ, és 1,5 gigabájt microSD-t (valójában kevesebb mint 1 gigabájt miatt a nem teljes /boot, de legyünk őszinték).
A Wi-Fi hozzáférési pont szoftver telepítéséhez ennek a rendszernek kissé bővítenünk kell a CentOS alap disztribúcióját. Először is, 'feljebb rakjuk' a beépített Wi-Fi adapter illesztőprogramját (firmware). A projekt honlapján ez áll:
Wifi a Raspberry 3B és 3B+
A Raspberry PI 3B/3B+ firmware fájlokat a CentOS Projekt nem engedélyezi terjeszteni. Az alábbi cikkek segítségével megértheti a problémát, beszerezheti a firmware-t és beállíthatja a wifi-t.
Ami a CentOS-nak nem megengedett, az nekünk, személyes használatra nem tiltható. Kicseréljük a CentOS disztribúciós Wi-Fi firmware-jét a Broadcom fejlesztőinek megfelelő firmware-re (azok az utált bináris blobok…). Ez lehetővé teszi, hogy az AC-t hozzáférési pont módjában használhassuk.
Wi-Fi firmware frissítésMegállapítjuk az eszköz modelljét és a jelenlegi firmware verzióját:
# 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
Látjuk, hogy a firmware verziója 7.45.18 2015.03.01-től, és megjegyezzük a következő számkészletet: 43455 (brcmfmac43455-sdio.bin).
. A lusták feljegyezhetik a képet a microSD-re, és onnan kivehetik a firmware fájlokat. Alternatív megoldásként a Linuxban csatolhatja a kép gyökér particióját, és onnan másolhatja a szükséges fájlokat:
# 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
A Wi-Fi adapter firmware fájlokat le kell másolni a 'malinára', felülírva a megfelelő könyvtárba /usr/lib/firmware/brcm/
Újraindítjuk a jövő routert, miközben elégedetten mosolygunk:
# 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
Verzió: 7.45.154, 2018.02.27.
Nos, természetesen 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. Hálózati konfiguráció és a bekövetkező nehézségek
Ahogy korábban megállapodtunk, a "malinka" kábellel csatlakozik a helyi hálózathoz. Tegyük fel, hogy az internetszolgáltató is pontosan így biztosítja a hozzáférést az Internethez: a közkörű hálózaton található cím dinamikusan, DHCP szerveren keresztül kerül kiosztásra (lehet, hogy a MAC címhez kötve). Ebben az esetben, miután véglegesen beállítottuk a "malinkát", elegendő csak "beledugni" a szolgáltató kábelt, és minden kész. Az azonosítás systemd-networkd — külön cikk témája, és itt nem tárgyaljuk.
A Raspberry Wi-Fi interfészei helyi hálózatot, míg a beépített Ethernet adapter (eth0) külső hálózatot jelent. A helyi hálózatot statikusan számozzuk, például: 192.168.0.0/24. A "malinka" címe: 192.168.0.1. A külső hálózaton (Internet) DHCP szerver fog működni.
és — két problémát jelent, amelyek mindenkire leselkednek, aki hálózati interfészek és szolgáltatások beállításával foglalkozik systemd disztribúciókban.
Párhuzamos káosz (lírai kitérő)Lennart Poettering elkészítette a programját systemd nagyon jól. Ez systemd más programokat olyan gyorsan indít el, hogy azok nem is ébredeznek fel a bírói síp puffanásából, megbillennek és megbotlanak az indításkor, még a gátfutásra való készülődés előtt.
De ha komolyan vesszük, akkor a folyamatok agresszív párhuzamosítása a systemd operációs rendszer indításakor egyfajta "szamárhíd" a tapasztalt soros LSB-sek számára. Szerencsére ennek a "párhuzamos káosznak" a rendezése viszonylag egyszerű, bár nem mindig nyilvánvaló feladat.
Két virtuális híd (bridge) interfészt hozunk létre állandó nevekkel: lan és wan. Az elsőhöz csatlakoztatjuk a Wi-Fi adapter(ek)et, a másodikhoz az eth0 "malinkát".
/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 megszünteti a szükségességét, hogy a sysctl-en keresztül jelezzük a kernelnek a routing engedélyezését.
MACAddress= eltávolítjuk a megjegyzést, és szükség esetén módosítjuk.
Először "csatlakoztatjuk" az eth0-t. Ne feledjük a "névhasználat egységesítése" problémáját, és csak ennek az interfésznek a MAC címét használjuk, amit például így lehet megtudni:
# cat /sys/class/net/eth0/address
Létrehozunk /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Eltávolítjuk az előző eth0 konfigurációs fájlt, újraindítjuk a Raspberry Pi-t és hálózati hozzáférést kapunk (az IP-cím valószínűleg megváltozik):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5. DNSMASQ
A Wi-Fi hozzáférési pontok létrehozásához nincs jobb páros, mint a dnsmasq + hostapd még nem találták ki. Véleményem szerint.
Ha valaki elfelejtette, akkor… — ez a dolog, ami kezeli a Wi-Fi adaptereket (különösen, hogy csatlakoztatja őket a virtuális lan Raspberry Pi-ra), hitelesíti és regisztrálja a vezeték nélküli klienseket.
— beállítja a kliensek hálózati veremét: IP-címeket, DNS-szervereket, alapértelmezett átjárót és hasonló finomságokat biztosít.
Kezdjük a dnsmasq-zal:
# yum install dnsmasq
Sablon /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
szerkesztjük saját ízlésünk szerint.
Minimalista /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
A "varázslat" itt a bind-dynamic, ami megmondja a dnsmasq démonnak, hogy várja meg a megjelenését a rendszerben interface=lan, ahelyett, hogy a büszke magány megrémítené a start után.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
És végül, a varázslatos hostapd konfigurációk. Nem kétséges, hogy valaki ezt a cikket éppen ezekért a titkos sorokért olvassa.
A hostapd telepítése előtt meg kell küzdeni az „egységesség problémájával”. A beépített Wi-Fi adapter wlan0 könnyen megváltoztathatja nevét wlan1, ha további USB Wi-Fi eszközöket csatlakoztatunk. Ezért rögzítjük az interfészek neveit a következő módon: egyedi neveket adunk a (vezeték nélküli) adaptereknek és hozzárendeljük őket a MAC-címekhez.
A beépített Wi-Fi adapterhez, amely még mindig wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Létrehozunk /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Most biztosak lehetünk benne, hogy wl0 — ez a beépített Wi-Fi. Újraindítjuk a Raspberry Pi-t, hogy megbizonyosodjunk róla.
Telepítjük:
# yum install hostapd wireless-tools
A konfigurációs fájl /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
Egy percig sem feledve a , módosítjuk a szükséges paramétereket és manuálisan ellenőrizzük a működést:
# hostapd /etc/hostapd/hostapd.conf
A hostapd interaktív üzemmódban indul el, és a konzolra kiírja az állapotát. Ha hiba nem lép fel, akkor a hozzáférési ponthoz már csatlakozhatnak az AC üzemmódot támogató kliensek. A hostapd leállításához — Ctrl-C.
Most már csak annyit kell tennünk, hogy a hostapd-t a rendszer automatikus indításába beillesztjük. Ha a szokásos módon járunk el (systemctl enable hostapd), akkor a következő újraindítás után egy „vérben fetrengő” démon vár ránk, a diagnózissal:az wl0 interfész nem található„. A „párhuzamos káosz” eredményeként a hostapd gyorsabban indult el, mint ahogy az operációs rendszer rátalált a vezeték nélküli adapterre.
Az internet tele van megoldásokkal: a démon indítása előtt egy kötelező időtúllépéssel (több percig) egészen addig, hogy egy másik démon figyeli az interfész megjelenését és (újra)indítja a hostapd-t. Ezek a megoldások teljesen működőképesek, de borzasztóan csúnyák. Hívjuk segítségül a nagyot systemd az „céljaival” és „feladataival” „függőségeivel”.
Másoljuk a disztribúciós service fájlt a /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
és állítsuk be a tartalmát a következőképpen:
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS authentikátor
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
A frissített szolgáltatás fájl varázsa a hostapd dinamikus kapcsolódása az új célhoz — wl0 interfészhez. Az interfész megjelenésekor a démon elindul, amikor eltűnik, leáll. És mindez online történik — a rendszer újraindítása nélkül. Különösen hasznos lesz ez a módszer, amikor USB Wi-Fi adaptert csatlakoztatunk a „malinához”.
Most már lehet:
# systemctl enable hostapd
# reboot
7. IPTABLES
„Mi a fenét???” © Igen-igen! Nincs itt semmiféle systemd. Nincs új divatos kombájn (mint a firewalld), ami végül pont ugyanazt csinálja.
Használjuk a régi, jó iptables, amelynek szolgáltatásai a startup után betöltik a hálózati szabályokat az operációs rendszerbe, és nyugodtan befejezik a működést, nem maradnak resident módba, és nem használnak erőforrást. A systemd-nek van elegáns IPMasquerade=, de az IP-címek (NAT) átalakítását és a tűzfalat inkább az iptables-re bízzuk.
Telepítjük:
# yum install iptables-services
# systemctl enable iptables ip6tables
Az iptables konfigurációt előnyben részesítem a begépelt szkript formájában (példa):
#!/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
Futtassuk a fenti szkriptet, és ezzel elveszítjük a lehetőséget, hogy új vezetékes SSH kapcsolatok jöjjenek létre a „malinához”. Mindent jól csináltunk, Wi-Fi routert alkottunk, amelyhez az interneten keresztül alapértelmezetten meg van tiltva a hozzáférés — mostantól csak „a levegőben”. Csatlakoztassuk a szolgáltató kábelt az Ethernethez, és kezdjünk el böngészni!
8. Bónusz: +2,4GHz
Amikor az előbb leírt rajz szerint összeszereltem az első Raspberry routert, felfedeztem, hogy van néhány eszközöm, amelyek a konstrukciós korlátaik miatt nem tudták érzékelni a "malinát" a Wi-Fi-n. Átállítani a routert az 802.11b/g/n működésre nem volt elegáns, mivel így a "légi" sebesség maximum 40 Mbit lett volna, míg a kedvenc internet szolgáltatóm 100-at kínál (kábelen).
Valójában a probléma megoldása már meg volt: egy második Wi-Fi interfész, amely 2,4GHz frekvencián működik, és egy második hozzáférési pont. A legközelebbi boltban megvettem a második USB Wi-Fi "dongle-t", amelyet találtam. Az eladó tele volt kérdésekkel a chipkészletről, az ARM Linux kernel kompatibilitásáról és az AP üzemmódról (ő kezdte).
A "dongle" konfigurálása a beépített Wi-Fi adapterhez hasonlóan történik.
Először is - nevezzük át 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
Az új Wi-Fi interfész irányítását egy külön démonra, a hostapd-re bízzuk, amely elindul és leáll a rendszerben lévő megfelelő "dongle" (wl1) jelenlététől függően.
A konfigurációs fájl /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]
Ennek a fájlnak a tartalma közvetlenül függ az USB Wi-Fi adapter modelljétől, ezért a sima másolás/beillesztés csalóka lehet.
Másoljuk a disztribúciós service fájlt a /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
és állítsuk be a tartalmát a következőképpen:
[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
Most már csak el kell indítani az új hostapd példányt:
# systemctl enable hostapd2
Itt van minden! Rángassátok a "dongle-t" és magát a "malinát", nézzétek meg a körüli vezeték nélküli hálózatokat.
Végül szeretném figyelmeztetni a USB Wi-Fi adapter és a Raspberry tápellátásának minőségére. A "dongle" meleg csatlakoztatása néha a "malina" felfüggesztéséhez vezethet rövid villamos problémák miatt.
Forrás: habr.com
