Raspberry Pi + CentOS = Wi-Fi Hotspot (vagy málna router piros kalapban)

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.

Raspberry Pi + CentOS = Wi-Fi Hotspot (vagy málna router piros kalapban)
(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 projekt kezdőlapja

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 systemd időzítőket,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).

Töltse le a Raspbian aktuális képét. 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.

A névhasználat egységesítése és ismert guatemalai programozó — 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…hostapd — 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.

dnsmasq — 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 GKChP-t, 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster