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

Az interneten rengeteg információ található a Raspberry egylapos PC-n alapuló Wi-Fi hozzáférési pontok létrehozásáról. Ez általában a Raspberryben natív Raspbian operációs rendszer használatát jelenti.

Az RPM-alapú rendszerek híve lévén, nem hagyhattam el ezt a kis csodát, és nem próbálhattam ki rajta szeretett CentOS-emet.

A cikk útmutatást ad 5 GHz/AC Wi-Fi router készítéséhez egy Raspberry Pi 3 Model B+ modellből, CentOS operációs rendszeren. Számos szabványos, de kevéssé ismert trükk lesz, és bónuszként egy rajz további Wi-Fi-berendezések csatlakoztatásához a Raspberry-hez, amely lehetővé teszi, hogy egyidejűleg több üzemmódban (2,4 + 5 GHz) működjön.

Raspberry Pi + CentOS = Wi-Fi Hotspot (vagy málna router piros kalappal)
(szabadon elérhető képek keveréke)

Rögtön megjegyezzük, hogy bizonyos kozmikus sebességek nem működnek. Maximum 100 Mbps-ot préselek ki a Raspberry-mből az éteren keresztül, és ez lefedi az internetszolgáltatóm sebességét. Miért kell ilyen lomha AC, ha elméletileg N-en is lehet fél gigabitet kapni? Ha feltetted magadnak ezt a kérdést, akkor menj el a boltba, és vásárolj egy igazi routert nyolc külső antennával.

0. Amire szüksége lesz

  • Tulajdonképpen maga a „málna termék” a következő kaliberű: Pi 3 Model B+ (a hőn áhított 5 GHz-es sebesség és csatornák eléréséhez);
  • Jó microSD >= 4 GB;
  • Munkaállomás Linux-szal és microSD-olvasóval/íróval;
  • Megfelelő Linux-készségek rendelkezésre állása, a cikk képzett strébereknek szól;
  • Vezetékes hálózati (eth0) kapcsolat a Raspberry és a Linux között, DHCP-kiszolgáló futtatása a helyi hálózaton és internet-hozzáférés mindkét eszközről.

Egy kis megjegyzés az utolsó ponthoz. „Melyik volt előbb, a tojás vagy...” hogyan készítsünk Wi-Fi-routert internetes hozzáférési eszközök hiányában? Hagyjuk ezt a szórakoztató gyakorlatot a cikk keretein kívül, és egyszerűen tételezzük fel, hogy a Raspberry vezetéken keresztül csatlakozik a helyi hálózathoz, és hozzáfér az internethez. Ebben az esetben nem lesz szükségünk további tévére és manipulátorra a „málna” beállításához.

1. Telepítse a CentOS-t

Projekt honlapja

A cikk írásakor a CentOS futó verziója az eszközön 32 bites. Valahol a világhálón olyan véleményekkel találkoztam, hogy az ilyen operációs rendszerek teljesítménye 64 bites ARM architektúrán akár 20%-kal is csökken. Kommentár nélkül hagyom ezt a pillanatot.

Linuxon töltse le a minimális képet a kernellel"-Raspberry Pi-"és írd ki 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 eltávolítjuk a SWAP partíciót, kiterjesztjük a gyökérkönyvtárat a teljes elérhető kötetre, és megszabadulunk a SELinuxtól. Az algoritmus egyszerű: készítsen másolatot a gyökérről Linuxon, törölje az összes partíciót a microSD-ről az első kivételével (/boot), hozzon létre egy új gyökérkönyvtárat, és adja vissza annak tartalmát a másolatból.

Példa a szükséges műveletekre (súlyos konzolkimenet)

# 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 ideje néhány változtatást végrehajtani rajta.

A SELinux letiltása /mnt/etc/selinux/config:

SELINUX=disabled

Szerkesztés /mnt/etc/fstab, csak két bejegyzést hagyunk benne a partíciókról: a boot (/boot, nincs változás) és a root (változtatjuk az UUID értéket, amit a blkid parancs kimenetének tanulmányozásával találhatunk meg Linuxon):

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

Végül megváltoztatjuk a kernel rendszerindítási paramétereit: új helyet adunk meg a gyökérpartíciónak, letiltjuk a hibakeresési információk kimenetét, és (opcionálisan) megtiltjuk, hogy a kernel IPv6-címeket rendeljen hozzá a hálózati interfészeken:

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

Itt van a tartalom /mnt/cmdline.txt a következő űrlapra (egy sor kötőjel nélkül):

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

Kész:

# cd
# umount /mnt
# sync

A microSD-t átrendezzük „málnává”, elindítjuk és ssh-n (root/centos) keresztül kapunk hálózati hozzáférést.

2. A CentOS beállítása

Az első három rendíthetetlen mozdulat: passwd, yum-frissítés, újraindítás.

Hálózatkezelést adunk networkd:

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

Fájl létrehozása (a könyvtárakkal együtt) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Újraindítjuk a „raspberry”-t, és ismét hálózati hozzáférést kapunk az ssh-n keresztül (az IP-cím változhat). Ügyeljen arra, hogy mit használ / Etc / resolv.conf, amelyet korábban a Network Manager hozott létre. Ezért a megoldással kapcsolatos problémák esetén szerkessze a tartalmát. Használat systemd-megoldott mi nem.

Eltávolítjuk a „feleslegeseket”, javítjuk és felgyorsítjuk az operációs rendszer betölté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 kell cron és aki nem emészti meg a beépített rendszeres időzítők, megállapíthatja, mi hiányzik. / Var / log- és nézd át Journalctl. Ha szüksége van naplózási előzményekre (alapértelmezés szerint az információkat csak a rendszer indulásától kezdve tárolja):

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

Az alapszolgáltatások IPv6 használatának letiltása (ha szükséges)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Az idő relevanciája a „málnán” fontos dolog. Mivel a dobozból nincs hardver az óra aktuális állapotának újraindításkor mentésére, szinkronizálásra van szükség. Egy nagyon jó és gyors démon ehhez chrony - már telepítve van, és automatikusan elindul. Az NTP-kiszolgálókat a legközelebbire cserélheti.

/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 általunk használt időzóna beállításához trükk. Mivel célunk egy 5 GHz-es frekvencián működő Wi-Fi router létrehozása, ezért előre készülünk a meglepetésekre szabályozó:

# yum info crda
Összegzés: Szabályozási megfelelőségi démon a 802.11 vezeték nélküli hálózatokhoz

Ez a szintén az időzónára épülő gonosz tervezés „tiltja” (Oroszországban) az 5 GHz-es frekvenciák és „magas” számmal rendelkező csatornák használatát. A trükk az, hogy időzónát állítunk be a kontinensek/városok nevének használata nélkül, vagyis ahelyett, hogy:

# timedatectl set-timezone Europe/Moscow

Nyomjuk:

# timedatectl set-timezone Etc/GMT-3

És az utolsó simítások a rendszer frizuráján:

# 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 kiegészítők

A fent elmondottak teljes utasításnak tekinthetők a „vanilla” CentOS Raspberry Pi-re történő telepítéséhez. Olyan számítógépet kell készítenie, amely kevesebb, mint 10 másodperc alatt (újra) indul el, kevesebb mint 15 megabájt RAM-ot és 1.5 gigabájt microSD-t használ (valójában kevesebb, mint 1 gigabájt a hiányos /indítás miatt, de legyünk őszinték).

Ha Wi-Fi hozzáférési pont szoftvert szeretne telepíteni erre a rendszerre, kissé ki kell bővítenie a szabványos CentOS disztribúció képességeit. Először is frissítsük a beépített Wi-Fi adapter illesztőprogramját (firmware-ét). A projekt honlapja ezt írja:

Wifi a Raspberry 3B és 3B+ készülékeken

A Raspberry PI 3B/3B+ firmware-fájlokat a CentOS Project nem terjesztheti. A következő cikkek segítségével megértheti a problémát, beszerezheti a firmware-t és beállíthatja a wifit.

Ami a CentOS projekt számára tilos, az nem tilos számunkra személyes használatra. Lecseréljük a terjesztési Wi-Fi firmware-t a CentOS-ben a Broadcom fejlesztőitől származó megfelelőre (ugyanazok az utált bináris blobok...). Ez különösen lehetővé teszi az AC használatát hozzáférési pont módban.

Wi-Fi firmware frissítésIsmerje meg az eszköz modelljét és a firmware aktuális 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ó 7.45.18, 01.03.2015., és emlékezzünk a következő számokra: 43455 (brcmfmac43455-sdio.bin).

Töltse le az aktuális Raspbian képet. A lusta emberek microSD-re írhatják a képet, és onnan vihetik át a fájlokat a firmware-rel. Vagy csatlakoztathatja a kép gyökér partícióját Linux alatt, és onnan másolja ki, amire szüksége van:

# 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 létrejövő Wi-Fi adapter firmware fájljait át kell másolni, és le kell cserélni a „raspberry”-re a könyvtárba /usr/lib/firmware/brcm/

Újraindítjuk a leendő routert, és elégedetten mosolyogunk:

# 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, 27.02.2018.

És persze 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 az előttünk álló kihívások

Ahogy fentebb megállapodtunk, a „málna” „vezetéken” csatlakozik a helyi hálózathoz. Tételezzük fel, hogy a szolgáltató pontosan ugyanúgy biztosítja az Internet hozzáférést: a nyilvános hálózaton a címet dinamikusan adja ki a DHCP szerver (talán MAC-kötéssel). Ebben az esetben a málna végleges beállítása után csak „be kell dugni” a szolgáltató kábelét, és kész. Engedélyezés segítségével systemd-networkd - egy külön cikk témája, és itt nem tárgyaljuk.

A Raspberry Wi-Fi interfésze(i) helyi hálózat, a beépített Ethernet adapter (eth0) pedig külső. Számoljuk statikusan a helyi hálózatot, például: 192.168.0.0/24. Málna cím: 192.168.0.1. A külső hálózaton (Internet) egy DHCP szerver fog működni.

Elnevezési konzisztencia probléma и híres guatemalai programozó - két probléma, amely mindenkire vár, aki hálózati interfészeket és szolgáltatásokat konfigurál a systemd disztribúciókban.

Párhuzamos káosz (lírai kitérő)Lennart Pottering saját programot állított össze systemd Nagyon jó. Ez systemd olyan gyorsan indít más programokat, hogy nem marad idejük kiheverni a játékvezető sípját, az elején megbotlik és elesik anélkül, hogy az akadálypályájukat megkezdenék.

De komolyan, az elindított folyamatok agresszív párhuzamosítása a rendszeres operációs rendszer kezdetén egyfajta „szamárhíd” a tapasztalt szekvenciális LSB-specialisták számára. Szerencsére rendet teremteni ebben a „párhuzamos káoszban” egyszerűnek bizonyul, bár nem mindig nyilvánvaló.

Két virtuális híd interfészt hozunk létre állandó névvel: lan и halvány. Az elsőhöz „csatlakoztatjuk” a Wi-Fi adapter(eke)t, a másodikhoz pedig az eth0 „raspberry”-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=igen kiküszöböli a rendszermagnak a sysctl-n keresztüli utalását az útválasztás engedélyezéséhez.
MACAddress= Szüntessük meg a megjegyzéseket, és változtassunk, ha szükséges.

Először „csatlakoztassuk” az eth0-t. Emlékezzünk az „egyenletességi problémára”, és csak ennek az interfésznek a MAC-címét használjuk, amely például így tudható meg:

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

Mi alkotunk /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Töröljük az előző eth0 konfigurációs fájlt, újraindítjuk a Raspberry-t, és hálózati hozzáférést kapunk hozzá (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 semmi sem jobb, mint egy édes pár dnsmasq + hostapd még nem jött rá. Szerintem.

Ha valaki elfelejtette, akkor...hostapd - ez az, ami vezérli a Wi-Fi adaptereket (különösen gondoskodik a virtuálishoz való csatlakoztatásukról lan "málna") engedélyezi és regisztrálja a vezeték nélküli klienseket.

dnsmasq — konfigurálja a kliensek hálózati veremét: IP-címeket, DNS-kiszolgálókat, alapértelmezett átjárót és hasonló örömöket ad ki.

Kezdjük a dnsmasq-val:

# 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

szerkessze tetszés 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 paraméterben rejlik kötés-dinamikus, amely azt mondja a dnsmasq démonnak, hogy várja meg, amíg megjelenik a rendszeren interface=lan, és ne ájuljon el a kezdés utáni büszke magány rohama.

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

6. HOSTAPD

És végül a varázslatos hostapd konfigurációk. Nincs kétségem afelől, hogy valaki éppen ezeket a becses sorokat keresve olvassa ezt a cikket.

A hostapd telepítése előtt le kell küzdenie az „egységességi problémát”. A beépített Wi-Fi adapter wlan0 könnyen megváltoztathatja a nevét wlan1-re, ha további USB Wi-Fi eszközöket csatlakoztat. Ezért az interfészneveket a következő módon javítjuk: egyedi neveket találunk ki a (vezeték nélküli) adaptereknek, és azokat MAC-címekhez kötjük.

A beépített Wi-Fi adapter esetében, amely továbbra is wlan0:

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

Mi alkotunk /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Most biztosak leszünk ebben wl0 - Ez a beépített Wi-Fi. Újraindítjuk a Raspberry-t, hogy megbizonyosodjunk erről.

Telepítés:

# yum install hostapd wireless-tools

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 pillanatra sem feledve GKChP, módosítsa a szükséges paramétereket, és manuálisan ellenőrizze a működőképességet:

# hostapd /etc/hostapd/hostapd.conf

A hostapd interaktív módban indul, és közvetíti állapotát a konzolnak. Ha nincs hiba, akkor az AC módot támogató kliensek csatlakozhatnak a hozzáférési ponthoz. A hostapd leállításához - Ctrl-C.

Nincs más hátra, mint a hostapd engedélyezése a rendszer indításakor. Ha a szokásos dolgot csinálja (systemctl enable hostapd), akkor a következő újraindítás után egy démon „vérben gurul” a következő diagnózissal.A wl0 interfész nem található". A „párhuzamos káosz” eredményeként a hostapd gyorsabban indult el, mint ahogy a kernel megtalálta a vezeték nélküli adaptert.

Az internet tele van orvosságokkal: a démon indítása előtti kényszerített időtúllépéstől (néhány percig) egy másik démonig, amely figyeli a felület megjelenését és (újra)indítja a hostpadot. A megoldások egészen működőképesek, de rettentően rondák. A nagyot hívjuk segítségül systemd „céljaival” és „feladataival” és „függőségeivel”.

Másolja a terjesztési szolgáltatás fájlját ide /etc/systemd/system/hostapd.service:

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

és csökkentse a tartalmát a következő formára:

[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

A frissített szolgáltatásfájl varázsa a hostapd dinamikus összekapcsolásában rejlik az új célhoz - a wl0 interfészhez. Amikor megjelenik az interfész, a démon elindul, ha eltűnik, leáll. És mindez online – a rendszer újraindítása nélkül. Ez a technika különösen akkor lesz hasznos, ha USB Wi-Fi adaptert csatlakoztat egy Raspberryhez.

Most már tudod:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Mi???" © Igen, igen! Egyik sem systemd. Nincsenek újszerű kombájnok (a formában firewalld), amelyek végül ugyanazt teszik.

Használjuk a régi jót iptables, amelynek szolgáltatásai az indítás után hálózati szabályokat töltenek be a kernelbe, és csendesen leállnak anélkül, hogy rezidensek maradnának és erőforrások fogyasztása nélkül. systemd rendelkezik egy elegáns IPMasquerade=, de a címfordítást (NAT) és a tűzfalat továbbra is az iptables-ra bízzuk.

Telepítés:

# yum install iptables-services
# systemctl enable iptables ip6tables

Inkább szkriptként tárolom az iptables konfigurációt (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

Végrehajtjuk a fenti szkriptet, és elveszítjük az új vezetékes SSH-kapcsolatok létrehozását a Raspberry-vel. Így van, készítettünk egy Wi-Fi routert, amelyhez alapértelmezés szerint tilos az „interneten keresztül” hozzáférni – most már csak „éteren keresztül”. Csatlakoztatjuk a szolgáltató Ethernet kábelét és elkezdjük a szörfözést!

8. Bónusz: +2,4 GHz

Amikor a fent leírt rajz alapján összeállítottam az első Raspberry routert, számos olyan kütyüt fedeztem fel a háztartásomban, amelyek Wi-Fi tervezési korlátai miatt egyáltalán nem látták a „málnát”. A router újrakonfigurálása 802.11b/g/n-ben való működésre sportszerűtlen volt, mivel a maximális sebesség „átvetőn” ebben az esetben nem haladta meg a 40 Mbit-et, kedvenc internetszolgáltatóm pedig 100-at kínál (kábelen keresztül).

Valójában a probléma megoldását már feltalálták: egy második, 2,4 GHz-es frekvencián működő Wi-Fi interfészt és egy második hozzáférési pontot. Egy közeli bódéban megvettem nem az első, hanem a második USB Wi-Fi „sípot”, amivel találkoztam. Az eladót a lapkakészlettel, az ARM Linux kernelekkel való kompatibilitással és az AP módban való munkavégzés lehetőségével kapcsolatos kérdések gyötörték (ő indult el először).

A „sípot” a beépített Wi-Fi adapterrel analóg módon konfiguráljuk.

Először nevezzük át erre 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 kezelését egy külön hostapd démonra bízzuk, amely egy szigorúan meghatározott „fütty” rendszerben való meglététől függően indul és áll le: wl1.

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 típusától, így előfordulhat, hogy a banális másolás/beillesztés sikertelen lesz.

Másolja a terjesztési szolgáltatás fájlját ide /etc/systemd/system/hostapd2.service:

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

és csökkentse a tartalmát a következő formára:

[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

Már csak a hostapd új példányának engedélyezése van hátra:

# systemctl enable hostapd2

Ez minden! Húzza meg a „sípot” és magát a „málnát”, nézze meg a körülöttünk lévő vezeték nélküli hálózatokat.

És végül szeretném figyelmeztetni az USB Wi-Fi adapter és a Raspberry tápegységének minőségére. A csatlakoztatott „forró síp” időnként „málnafagyást” okozhat rövid távú elektromos problémák miatt.

Forrás: will.com

Hozzászólás