Raspberry Pi + CentOS = Wi-Fi Hotspot (alebo malinový router s červeným klobúkom)

Na internete je obrovské množstvo informácií o vytváraní prístupových bodov Wi-Fi na základe jednodoskového počítača Raspberry. Spravidla to znamená používanie operačného systému Raspbian natívneho pre Raspberry.

Keďže som prívrženec systémov založených na RPM, nemohol som prejsť okolo tohto malého zázraku a nevyskúšať na ňom môj milovaný CentOS.

Článok poskytuje pokyny na vytvorenie 5GHz/AC Wi-Fi routera z Raspberry Pi 3 Model B+ založeného na operačnom systéme CentOS. K dispozícii bude niekoľko štandardných, no málo známych trikov a ako bonus - nákres na pripojenie ďalšieho Wi-Fi zariadenia k Raspberry, umožňujúcemu súčasné fungovanie v niekoľkých režimoch (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (alebo malinový router s červeným klobúkom)
(mix voľne dostupných obrázkov)

Hneď si všimnime, že niektoré kozmické rýchlosti nebudú fungovať. Z Raspberry vyžmýkam vzduchom maximálne 100 Mbps a to pokrýva rýchlosť môjho poskytovateľa internetu. Načo potrebuješ také pomalé AC, ak teoreticky môžeš dostať pol gigabitu aj na N? Ak ste si položili túto otázku, choďte do obchodu a kúpte si skutočný router s ôsmimi externými anténami.

0. Čo budete potrebovať

  • Vlastne samotný „malinový produkt“ je kalibru: Pi 3 Model B+ (na dosiahnutie želaných 5GHz rýchlostí a kanálov);
  • Dobrá microSD >= 4 GB;
  • Pracovná stanica s Linuxom a čítačkou/zapisovačkou microSD;
  • Dostupnosť dostatočných zručností v Linuxe, článok je pre trénovaného Geeka;
  • Káblové sieťové pripojenie (eth0) medzi Raspberry a Linuxom, spustený DHCP server v lokálnej sieti a prístup na internet z oboch zariadení.

Malý komentár k poslednému bodu. „Čo bolo skôr, vajce alebo...“ ako vytvoriť smerovač Wi-Fi bez akéhokoľvek zariadenia na prístup na internet? Nechajme toto zábavné cvičenie mimo rámca článku a jednoducho predpokladajme, že Raspberry je pripojený k lokálnej sieti drôtom a má prístup na internet. V tomto prípade nebudeme potrebovať ďalší televízor a manipulátor na nastavenie „maliny“.

1. Nainštalujte CentOS

Domovská stránka projektu

V čase písania tohto článku bola spustená verzia CentOS na zariadení 32-bitová. Niekde na World Wide Web som narazil na názory, že výkon takýchto OS na 64-bit architektúre ARM je znížený až o 20%. Tento moment nechám bez komentára.

V systéme Linux si stiahnite minimálny obrázok s jadrom "-Malinový koláč-"a zapíšte to na microSD:

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

Pred začatím používania obrazu z neho odstránime oddiel SWAP, rozšírime root na celý dostupný zväzok a zbavíme sa SELinuxu. Algoritmus je jednoduchý: vytvorte kópiu koreňového adresára v systéme Linux, odstráňte všetky oddiely z microSD okrem prvého (/boot), vytvorte nový koreňový adresár a vráťte jeho obsah z kópie.

Príklad požadovaných akcií (závažný výstup konzoly)

# 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

Po rozbalení obsahu koreňového oddielu je čas urobiť v ňom nejaké zmeny.

Zakázať SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Úprava /mnt/etc/fstab, pričom v ňom ponechajú iba dve položky o oddieloch: boot (/boot, žiadne zmeny) a root (zmeníme hodnotu UUID, čo sa dá zistiť štúdiom výstupu príkazu blkid v systéme Linux):

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

Nakoniec zmeníme parametre zavádzania jadra: určíme nové umiestnenie pre koreňový oddiel, zakážeme výstup informácií o ladení a (voliteľne) zakážeme jadru prideľovať adresy IPv6 na sieťových rozhraniach:

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

Tu je obsah /mnt/cmdline.txt do nasledujúceho tvaru (jeden riadok bez pomlčiek):

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

Povrchová úprava:

# cd
# umount /mnt
# sync

Preusporiadame microSD na „malinu“, spustíme ju a získame k nej sieťový prístup cez ssh (root/centos).

2. Nastavenie CentOS

Prvé tri neotrasiteľné pohyby: passwd, yum -y update, reštart.

Darujeme správu siete zosieťované:

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

Vytvorte súbor (spolu s adresármi) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Reštartujeme „malinu“ a opäť k nej získame sieťový prístup cez ssh (IP adresa sa môže zmeniť). Venujte pozornosť tomu, čo sa používa / Etc / resolv.conf, vytvorený skôr správcom siete. Preto v prípade problémov s riešením upravte jeho obsah. Použite systemd-riešené nebudeme.

Odstraňujeme „nepotrebné“, opravujeme a urýchľujeme načítanie OS:

# 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

Kto potrebuje cron a kto nestrávi vstavaný systemd časovače, môže zistiť, čo chýba. / Var / log- a pozrieť sa journalctl. Ak potrebujete históriu protokolov (v predvolenom nastavení sa informácie ukladajú iba od okamihu spustenia systému):

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

Zakázať používanie IPv6 základnými službami (ak je to potrebné)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Relevantnosť času na „malinu“ je dôležitá vec. Keďže po reštarte nie je hardvérová možnosť uložiť aktuálny stav hodín, je potrebná synchronizácia. Na to je veľmi dobrý a rýchly démon CHRONO - už nainštalovaný a spustí sa automaticky. Servery NTP môžete zmeniť na najbližšie.

/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

Na nastavenie časového pásma, ktoré použijeme trik. Keďže naším cieľom je vytvoriť Wi-Fi router pracujúci na frekvenciách 5 GHz, vopred sa pripravíme na prekvapenia regulátor:

# mňam info crda
Zhrnutie: Regulačný démon pre bezdrôtové siete 802.11

Tento zlý dizajn, tiež založený na časovom pásme, „zakazuje“ používanie (v Rusku) 5GHz frekvencií a kanálov s „vysokými“ číslami. Trik je nastaviť časové pásmo bez použitia názvov kontinentov/miest, teda namiesto:

# timedatectl set-timezone Europe/Moscow

Stlačíme:

# timedatectl set-timezone Etc/GMT-3

A posledné úpravy účesu systému:

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

Všetko, čo bolo povedané vyššie, možno považovať za úplné pokyny na inštaláciu „vanilla“ CentOS na Raspberry Pi. Mali by ste skončiť s počítačom, ktorý sa (re)bootuje za menej ako 10 sekúnd, používa menej ako 15 megabajtov RAM a 1.5 gigabajtu microSD (v skutočnosti menej ako 1 gigabajt kvôli neúplnému /bootu, ale buďme úprimní).

Ak chcete do tohto systému nainštalovať softvér prístupového bodu Wi-Fi, budete musieť mierne rozšíriť možnosti štandardnej distribúcie CentOS. Najprv upgradujme ovládač (firmvér) vstavaného adaptéra Wi-Fi. Na domovskej stránke projektu sa píše:

Wifi na Raspberry 3B a 3B+

Projekt CentOS nemôže distribuovať súbory firmvéru Raspberry PI 3B/3B+. Na pochopenie problému, získanie firmvéru a nastavenie wifi môžete použiť nasledujúce články.

To, čo je zakázané pre projekt CentOS, nie je pre nás zakázané na osobné použitie. Distribučný Wi-Fi firmvér v CentOS nahrádzame zodpovedajúcim od vývojárov Broadcomu (tie isté nenávidené binárne bloby...). To vám predovšetkým umožní používať AC v režime prístupového bodu.

Aktualizácia firmvéru Wi-FiZistite model zariadenia a aktuálnu verziu firmvéru:

# 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 

Vidíme, že verzia firmvéru je 7.45.18 z 01.03.2015 a zapamätajte si nasledujúcu sadu čísel: 43455 (brcmfmac43455-sdio.bin).

Stiahnite si aktuálny obrázok Raspbian. Lenivci môžu zapísať obrázok na microSD a odtiaľ si vziať súbory s firmvérom. Alebo môžete pripojiť koreňový oddiel obrazu v systéme Linux a skopírovať odtiaľ to, čo potrebujete:

# 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

Výsledné súbory firmvéru adaptéra Wi-Fi je potrebné skopírovať a nahradiť do adresára výrazom „malina“. /usr/lib/firmware/brcm/

Reštartujeme budúci router a spokojne sa usmievame:

# 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 

Verzia: 7.45.154 zo dňa 27.02.2018.

A samozrejme 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. Konfigurácia siete a budúce výzvy

Ako sme sa zhodli vyššie, „malina“ je pripojená „káblom“ k lokálnej sieti. Predpokladajme, že poskytovateľ poskytuje prístup na internet úplne rovnakým spôsobom: adresu vo verejnej sieti dynamicky vydáva DHCP server (možno s MAC väzbou). V tomto prípade po konečnom nastavení maliny stačí do nej „zastrčiť“ kábel poskytovateľa a hotovo. Autorizácia pomocou systemd-networkd - téma na samostatný článok a nie je tu rozoberaná.

Rozhranie Wi-Fi Raspberry je lokálna sieť a vstavaný ethernetový adaptér (eth0) je externý. Lokálnu sieť očíslujme staticky, napr.: 192.168.0.0/24. Adresa malina: 192.168.0.1. Server DHCP bude fungovať na externej sieti (Internet).

Problém konzistencie pomenovania и slávny guatemalský programátor - dva problémy, ktoré čakajú každého, kto konfiguruje sieťové rozhrania a služby v distribúciách systemd.

Paralelný chaos (lyrická odbočka)Lennart Pottering zostavil svoj vlastný program systemd Veľmi dobre. Toto systemd spúšťa ďalšie programy tak rýchlo, že keď sa nestihnú spamätať z píšťalky rozhodcu, na štarte zakopnú a spadnú bez toho, aby vôbec začali prekážkovú dráhu.

Ale vážne, agresívna paralelizácia spustených procesov na začiatku systemd OS je akýmsi „oslím mostom“ pre skúsených špecialistov na sekvenčné LSB. Našťastie vniesť poriadok do tohto „paralelného chaosu“ sa ukazuje byť jednoduchým, aj keď nie vždy samozrejmým.

Vytvárame dve virtuálne mostové rozhrania s konštantnými názvami: lán и bledý. K prvému „pripojíme“ adaptér(y) Wi-Fi a k ​​druhému „malinu“ eth0.

/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=áno eliminuje potrebu odkazovať na jadro cez sysctl, aby sa umožnilo smerovanie.
MACAddress= Odkomentujme a v prípade potreby zmeňme.

Najprv „spojíme“ eth0. Pamätáme si „problém s jednotnosťou“ a používame iba MAC adresu tohto rozhrania, ktorú možno zistiť napríklad takto:

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

tvoríme /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Vymažeme predchádzajúci konfiguračný súbor eth0, reštartujeme Raspberry a získame k nemu sieťový prístup (IP adresa sa s najväčšou pravdepodobnosťou zmení):

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

5.DNMASQ

Pri vytváraní prístupových bodov Wi-Fi nie je nič lepšie ako pár sladkých dnsmasq + hostapd ešte som na to neprišiel. Podľa mňa.

Ak by niekto zabudol, tak...hostapd - to je vec, ktorá ovláda adaptéry Wi-Fi (najmä sa postará o ich pripojenie k virtuálnemu lán "maliny"), autorizuje a registruje bezdrôtových klientov.

dnsmasq — konfiguruje sieťový zásobník klientov: vydáva adresy IP, servery DNS, predvolenú bránu a podobné potešenia.

Začnime s dnsmasq:

# yum install dnsmasq

šablóna / 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

upravte si ho podľa svojich predstáv.

minimalistický /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

„Kúzlo“ tu spočíva v parametri väzba-dynamická, ktorý povie démonovi dnsmasq, aby počkal, kým sa objaví v systéme interface=lan, a neomdlievať od záchvatu hrdej osamelosti po štarte.

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

6. HOSTAPD

A nakoniec, magické konfigurácie hostapd. Nepochybujem o tom, že niekto číta tento článok a hľadá práve tieto cenné riadky.

Pred inštaláciou hostapd musíte prekonať „problém s jednotnosťou“. Vstavaný adaptér Wi-Fi wlan0 môže jednoducho zmeniť svoj názov na wlan1 pri pripojení ďalšieho zariadenia USB Wi-Fi. Preto opravíme názvy rozhraní nasledujúcim spôsobom: vymyslíme jedinečné názvy pre (bezdrôtové) adaptéry a naviažeme ich na MAC adresy.

Pre vstavaný adaptér Wi-Fi, ktorý je stále wlan0:

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

tvoríme /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Teraz si tým budeme istí wl0 - Toto je vstavané Wi-Fi. Aby sme sa o tom uistili, reštartujeme Raspberry.

Inštalácia:

# yum install hostapd wireless-tools

Konfiguračný súbor /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

Bez toho, aby som na chvíľu zabudol Štátny núdzový výbor, zmeňte parametre, ktoré potrebujeme a manuálne skontrolujte funkčnosť:

# hostapd /etc/hostapd/hostapd.conf

hostapd sa spustí v interaktívnom režime a vysiela svoj stav do konzoly. Ak sa nevyskytnú žiadne chyby, klienti, ktorí podporujú režim AC, sa budú môcť pripojiť k prístupovému bodu. Ak chcete zastaviť hostapd - Ctrl-C.

Zostáva len povoliť hostapd pri štarte systému. Ak urobíte štandardnú vec (systemctl povolí hostapd), potom po ďalšom reštarte môžete dostať démona „v krvi“ s diagnózou „rozhranie wl0 nenájdené". V dôsledku „paralelného chaosu“ sa hostapd spustil rýchlejšie, ako jadro našlo bezdrôtový adaptér.

Internet je plný nápravných opatrení: od vynúteného časového limitu pred spustením démona (niekoľko minút) po ďalšieho démona, ktorý monitoruje vzhľad rozhrania a (re)spúšťa hostpad. Riešenia sú celkom funkčné, ale strašne škaredé. O pomoc voláme toho veľkého systemd so svojimi „cieľmi“ a „úlohami“ a „závislosťami“.

Skopírujte súbor distribučnej služby do /etc/systemd/system/hostapd.service:

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

a zredukovať jeho obsah do nasledujúcej podoby:

[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

Kúzlo aktualizovaného servisného súboru spočíva v dynamickej väzbe hostapd na nový cieľ - rozhranie wl0. Keď sa objaví rozhranie, démon sa spustí, keď zmizne, zastaví sa. A to všetko online - bez reštartovania systému. Táto technika bude užitočná najmä pri pripájaní USB Wi-Fi adaptéra k Raspberry.

Teraz môžeš:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Čo???" © Áno, áno! žiadne systemd. Žiadne nové kombajny (vo forme firewalld), ktoré nakoniec urobia to isté.

Využime ten starý dobrý iptables, ktorého služby po spustení načítajú sieťové pravidlá do jadra a potichu sa vypnú bez toho, aby zostali rezidentné a bez spotreby zdrojov. systemd má elegantný IPMasquerade=, ale preklad adries (NAT) a firewall aj tak zveríme iptables.

Inštalácia:

# yum install iptables-services
# systemctl enable iptables ip6tables

Uprednostňujem uloženie konfigurácie iptables ako skript (príklad):

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

Spustíme vyššie uvedený skript a stratíme schopnosť nadviazať nové káblové pripojenia SSH s Raspberry. Je to tak, vytvorili sme smerovač Wi-Fi, ku ktorému je štandardne zakázaný prístup „cez internet“ – teraz iba „vzduchom“. Pripojíme ethernetový kábel poskytovateľa a začneme surfovať!

8. Bonus: +2,4 GHz

Keď som zostavil prvý router Raspberry pomocou vyššie opísaného nákresu, objavil som v mojej domácnosti množstvo gadgetov, ktoré kvôli obmedzeniam dizajnu Wi-Fi vôbec nevideli „malinu“. Prekonfigurovanie smerovača na prácu v 802.11b/g/n bolo nešportové, keďže maximálna rýchlosť „vzduchom“ v tomto prípade nepresiahla 40 Mbit a môj obľúbený poskytovateľ internetu mi ponúka 100 (cez kábel).

V skutočnosti už bolo vynájdené riešenie problému: druhé rozhranie Wi-Fi pracujúce na frekvencii 2,4 GHz a druhý prístupový bod. V neďalekom stánku som si kúpil nie prvú, ale druhú USB Wi-Fi „píšťalku“, na ktorú som narazil. Predajcu potrápili otázky ohľadom čipsetu, kompatibility s ARM Linux jadrami a možnosti práce v AP režime (spustil sa ako prvý).

„Píšťalku“ nakonfigurujeme analogicky so vstavaným adaptérom Wi-Fi.

Najprv ho premenujeme na 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

Správu nového Wi-Fi rozhrania zveríme samostatnému démonovi hostapd, ktorý sa spúšťa a zastavuje v závislosti od prítomnosti presne definovanej „píšťalky“ v systéme: wl1.

Konfiguračný súbor /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]

Obsah tohto súboru priamo závisí od modelu USB Wi-Fi adaptéra, takže banálne kopírovanie/vkladanie môže zlyhať.

Skopírujte súbor distribučnej služby do /etc/systemd/system/hostapd2.service:

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

a zredukovať jeho obsah do nasledujúcej podoby:

[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

Zostáva len povoliť novú inštanciu hostapd:

# systemctl enable hostapd2

To je všetko! Potiahnite „píšťalku“ a samotnú „malinu“ a pozrite sa na bezdrôtové siete okolo vás.

A na záver vás chcem upozorniť na kvalitu USB Wi-Fi adaptéra a napájania Raspberry. Pripojená „horúca píšťalka“ môže niekedy spôsobiť „malinové zamrznutie“ v dôsledku krátkodobých elektrických problémov.

Zdroj: hab.com

Pridať komentár