Raspberry Pi + CentOS = Wi-Fi Hotspot (nebo raspberry router s červeným kloboukem)

Na internetu je obrovské množství informací o vytváření přístupových bodů Wi-Fi založených na jednodeskovém počítači Raspberry. Zpravidla to znamená používat operační systém Raspbian nativní pro Raspberry.

Jako příznivec systémů na bázi RPM jsem nemohl projít kolem tohoto malého zázraku a nezkusit na něm můj milovaný CentOS.

Článek obsahuje pokyny pro vytvoření 5GHz/AC Wi-Fi routeru z Raspberry Pi 3 Model B+ založeného na operačním systému CentOS. K dispozici bude několik standardních, ale málo známých triků a jako bonus - nákres pro připojení dalšího Wi-Fi zařízení k Raspberry, což mu umožní pracovat současně v několika režimech (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (nebo raspberry router s červeným kloboukem)
(mix volně dostupných obrázků)

Poznamenejme hned, že některé kosmické rychlosti nebudou fungovat. Ze svého Raspberry vzduchem vymáčknu maximálně 100 Mbps a to pokryje rychlost mého poskytovatele internetu. Proč potřebuješ tak pomalé AC, když teoreticky můžeš dostat půl gigabitu i na N? Pokud jste si tuto otázku položili, pak si běžte do obchodu koupit skutečný router s osmi externími anténami.

0. Co budete potřebovat

  • Vlastně samotný „malinový produkt“ je kalibru: Pi 3 Model B+ (pro dosažení kýžených 5GHz rychlostí a kanálů);
  • Dobrá microSD >= 4 GB;
  • Pracovní stanice s Linuxem a čtečkou/zapisovačkou microSD;
  • Dostupnost dostatečných dovedností v Linuxu, článek je pro trénovaného Geeka;
  • Kabelová síťová konektivita (eth0) mezi Raspberry a Linuxem, běh DHCP serveru v lokální síti a přístup k internetu z obou zařízení.

Malá poznámka k poslednímu bodu. „Co bylo dřív, vejce nebo...“ jak vyrobit Wi-Fi router bez jakéhokoli zařízení pro přístup k internetu? Ponechme toto zábavné cvičení mimo rámec článku a jednoduše předpokládejme, že Raspberry je připojeno k místní síti drátem a má přístup k internetu. V tomto případě nebudeme potřebovat další televizor a manipulátor pro nastavení „maliny“.

1. Nainstalujte CentOS

Domovská stránka projektu

V době psaní tohoto článku je spuštěná verze CentOS na zařízení 32bitová. Někde na World Wide Webu jsem narazil na názory, že výkon takových OS na 64bitové architektuře ARM je snížen až o 20 %. Nechám tuto chvíli bez komentáře.

V Linuxu si stáhněte minimální obraz s jádrem "-RaspberryPI-"a zapište to na microSD:

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

Než začneme image používat, odstraníme z něj oddíl SWAP, rozšíříme kořen na celý dostupný svazek a zbavíme se SELinuxu. Algoritmus je jednoduchý: vytvořte kopii kořenového adresáře v Linuxu, odstraňte všechny oddíly z microSD kromě prvního (/boot), vytvořte nový kořenový adresář a vraťte jeho obsah z kopie.

Příklad požadovaných akcí (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 kořenového oddílu je čas provést v něm nějaké změny.

Zakázat SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Editace /mnt/etc/fstab, přičemž v něm zůstanou pouze dvě položky o oddílech: boot (/boot, žádné změny) a root (změníme hodnotu UUID, kterou lze zjistit prostudováním výstupu příkazu blkid na Linuxu):

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

Nakonec změníme parametry spouštění jádra: určíme nové umístění pro kořenový oddíl, zakážeme výstup ladicích informací a (volitelně) zakážeme jádru přidělovat adresy IPv6 na síťových rozhraních:

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

Zde je obsah /mnt/cmdline.txt do následujícího tvaru (jeden řádek bez pomlček):

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

Povrchová úprava:

# cd
# umount /mnt
# sync

Přeuspořádáme microSD do „maliny“, spustíme ji a získáme k ní síťový přístup přes ssh (root/centos).

2. Nastavení CentOS

První tři neotřesitelné pohyby: passwd, yum -y aktualizace, restart.

Darujeme správu sítě síťový:

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

Vytvořte soubor (spolu s adresáři) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Restartujeme „malinu“ a znovu k ní získáme síťový přístup přes ssh (IP adresa se může změnit). Věnujte pozornost tomu, co se používá / Etc / resolv.conf, vytvořený dříve správcem sítě. Proto v případě problémů s vyřešením upravte jeho obsah. Použití systemd-vyřešen nebudeme.

Odstraňujeme „nepotřebné“, opravujeme a urychlujeme načítání 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

Kdo potřebuje cron a kdo nestráví vestavěné systemd časovače, může zjistit, co chybí. / var / log- a prohlédněte si journalctl. Pokud potřebujete historii protokolů (ve výchozím nastavení se informace ukládají pouze od okamžiku spuštění systému):

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

Zakázat používání IPv6 základními službami (je-li vyžadováno)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Relevance času na „malinu“ je důležitá věc. Vzhledem k tomu, že po vybalení neexistuje žádná hardwarová možnost uložit aktuální stav hodin po restartu, je nutná synchronizace. Na to je velmi dobrý a rychlý démon chronika - již nainstalováno a spustí se automaticky. Servery NTP můžete změnit na nejbližší.

/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

Pro nastavení časového pásma, které použijeme trik. Vzhledem k tomu, že naším cílem je vytvořit Wi-Fi router pracující na frekvencích 5GHz, připravíme se na překvapení předem regulátor:

#mňam info crda
Shrnutí: Démon shody s předpisy pro bezdrátové sítě 802.11

Tento ďábelský design, rovněž založený na časovém pásmu, „zakazuje“ použití (v Rusku) 5GHz frekvencí a kanálů s „vysokými“ čísly. Trik je nastavit časové pásmo bez použití názvů kontinentů/měst, tedy namísto:

# timedatectl set-timezone Europe/Moscow

Tiskneme:

# 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. Doplňky CentOS

Vše, co bylo řečeno výše, lze považovat za úplné pokyny pro instalaci „vanilla“ CentOS na Raspberry Pi. Měli byste skončit s počítačem, který se (re)bootuje za méně než 10 sekund, používá méně než 15 megabajtů RAM a 1.5 gigabajtů microSD (ve skutečnosti méně než 1 gigabajt kvůli neúplnému /bootu, ale buďme upřímní).

Chcete-li na tento systém nainstalovat software přístupového bodu Wi-Fi, budete muset mírně rozšířit možnosti standardní distribuce CentOS. Nejprve upgradujme ovladač (firmware) vestavěného Wi-Fi adaptéru. Na domovské stránce projektu se píše:

Wifi na Raspberry 3B a 3B+

Soubory firmwaru Raspberry PI 3B/3B+ není povoleno projektem CentOS distribuovat. K pochopení problému, získání firmwaru a nastavení wifi můžete použít následující články.

Co je pro projekt CentOS zakázáno, není pro nás zakázáno pro osobní použití. Distribuční Wi-Fi firmware v CentOS nahrazujeme odpovídajícím od vývojářů Broadcomu (ty samé nenáviděné binární bloby...). To vám zejména umožní používat AC v režimu přístupového bodu.

Upgrade firmwaru Wi-FiZjistěte model zařízení a aktuální verzi firmwaru:

# 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 verze firmwaru je 7.45.18 ze dne 01.03.2015, a pamatujte si následující sadu čísel: 43455 (brcmfmac43455-sdio.bin).

Stáhněte si aktuální obrázek Raspbian. Líni si mohou zapsat obrázek na microSD a vzít si odtud soubory s firmwarem. Nebo můžete připojit kořenový oddíl obrazu v Linuxu a zkopírovat odtud, co potřebujete:

# 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é soubory firmwaru adaptéru Wi-Fi musí být zkopírovány a nahrazeny „malinou“ do adresáře /usr/lib/firmware/brcm/

Restartujeme budoucí router a spokojeně se usmějeme:

# 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 

Verze: 7.45.154 ze dne 27.02.2018.

A samozřejmě 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. Konfigurace sítě a budoucí výzvy

Jak jsme se shodli výše, „malina“ je připojena „drátem“ k místní síti. Předpokládejme, že poskytovatel poskytuje přístup k internetu úplně stejným způsobem: adresu ve veřejné síti přiděluje dynamicky DHCP server (možná s MAC vazbou). V tomto případě po konečném nastavení maliny do něj stačí „zapojit“ kabel poskytovatele a je hotovo. Autorizace pomocí systemd-networkd - téma na samostatný článek a není zde diskutováno.

Rozhraní Wi-Fi Raspberry je místní síť a vestavěný adaptér Ethernet (eth0) je externí. Lokální síť očíslujme staticky, například: 192.168.0.0/24. Adresa maliny: 192.168.0.1. Server DHCP bude fungovat na externí síti (Internet).

Problém konzistence pojmenování и slavný guatemalský programátor - dva problémy, které čekají každého, kdo konfiguruje síťová rozhraní a služby v distribucích systemd.

Paralelní chaos (lyrická odbočka)Lennart Pottering sestavil svůj vlastní program systemd Velmi dobře. Tento systemd spouští další programy tak rychle, že když se nestihnou vzpamatovat z píšťalky rozhodčího, zakopnou a upadnou na startu, aniž by vůbec zahájili svou překážkovou dráhu.

Ale vážně, agresivní paralelizace spuštěných procesů na začátku systemd OS je jakýmsi „oslím můstkem“ pro ostřílené specialisty na sekvenční LSB. Naštěstí se vnést řád do tohoto „paralelního chaosu“ ukazuje být jednoduché, i když ne vždy zřejmé.

Vytváříme dvě virtuální mostová rozhraní s konstantními názvy: lan и bledý. K prvnímu „připojíme“ adaptér(y) Wi-Fi a ke 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=ano eliminuje potřebu nápovědu k jádru přes sysctl, aby bylo umožněno směrování.
MACAddress= Odkomentujme a v případě potřeby změňme.

Nejprve „připojíme“ eth0. Pamatujeme si „problém s jednotností“ a používáme pouze MAC adresu tohoto rozhraní, kterou můžete zjistit například takto:

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

tvoříme /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Smažeme předchozí konfigurační soubor eth0, restartujeme Raspberry a získáme k němu síťový přístup (IP adresa se s největší pravděpodobností změní):

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

5. DNSMASQ

Pro vytváření přístupových bodů Wi-Fi není nic lepšího než pár sladkých dnsmasq + hostapd ještě jsem na to nepřišel. Dle mého názoru.

Kdyby někdo zapomněl, tak...hostapd - to je věc, která ovládá adaptéry Wi-Fi (zejména se postará o jejich připojení k virtuál lan "maliny"), autorizuje a registruje bezdrátové klienty.

dnsmasq — konfiguruje síťový zásobník klientů: vydává adresy IP, servery DNS, výchozí bránu a podobné výhody.

Začněme s dnsmasq:

# yum install dnsmasq

Vzor / 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 jej podle svého.

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

„Kouzlo“ zde spočívá v parametru vazba-dynamická, který říká démonu dnsmasq, aby počkal, až se objeví v systému rozhraní=lan, a neomdlít z návalu hrdé osamělosti po startu.

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

6. HOSTAPD

A nakonec kouzelné konfigurace hostapd. Nepochybuji o tom, že někdo čte tento článek a hledá přesně tyto cenné řádky.

Před instalací hostapd musíte překonat „problém s jednotností“. Vestavěný adaptér Wi-Fi wlan0 může snadno změnit svůj název na wlan1 při připojení dalšího zařízení USB Wi-Fi. Proto opravíme názvy rozhraní následujícím způsobem: vymyslíme jedinečné názvy pro (bezdrátové) adaptéry a navážeme je na MAC adresy.

Pro vestavěný adaptér Wi-Fi, který je stále wlan0:

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

tvoříme /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Nyní si tím budeme jisti wl0 - Toto je vestavěná Wi-Fi. Abychom se o tom ujistili, restartujeme Raspberry.

Nainstalujte:

# yum install hostapd wireless-tools

Konfigurační soubor /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

Aniž bych na chvíli zapomněl GKChP, změňte parametry, které potřebujeme, a ručně zkontrolujte funkčnost:

# hostapd /etc/hostapd/hostapd.conf

hostapd se spustí v interaktivním režimu a vysílá svůj stav do konzole. Pokud nedojde k žádným chybám, klienti, kteří podporují režim AC, se budou moci připojit k přístupovému bodu. Chcete-li zastavit hostapd - Ctrl-C.

Zbývá pouze povolit hostapd při spouštění systému. Pokud uděláte standardní věc (systemctl povolí hostapd), pak po příštím restartu můžete dostat démona „válcovaného v krvi“ s diagnózou „rozhraní wl0 nenalezeno". V důsledku „paralelního chaosu“ se hostapd spustil rychleji, než jádro našlo bezdrátový adaptér.

Internet je plný nápravných opatření: od vynuceného časového limitu před spuštěním démona (několik minut) po dalšího démona, který sleduje vzhled rozhraní a (re)spouští hostpad. Řešení jsou celkem funkční, ale strašně ošklivá. Voláme toho velkého o pomoc systemd se svými „cílemi“ a „úkoly“ a „závislostmi“.

Zkopírujte soubor distribuční služby do /etc/systemd/system/hostapd.service:

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

a zredukovat jeho obsah do následující 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

Kouzlo aktualizovaného servisního souboru spočívá v dynamické vazbě hostapd na nový cíl - rozhraní wl0. Když se objeví rozhraní, démon se spustí, když zmizí, zastaví se. A to vše online – bez restartování systému. Tato technika bude užitečná zejména při připojení USB Wi-Fi adaptéru k Raspberry.

Teď můžeš:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Co???" © Ano, ano! Žádný systemd. Žádné nové kombajny (ve formě firewalld), které nakonec dělají to samé.

Použijme ten starý dobrý iptables, jehož služby po spuštění načtou síťová pravidla do jádra a v tichosti se vypnou, aniž by zůstaly rezidentní a nespotřebovávaly zdroje. systemd má elegantní IPMasquerade=, ale překlad adres (NAT) a firewall stále svěříme iptables.

Nainstalujte:

# yum install iptables-services
# systemctl enable iptables ip6tables

Dávám přednost uložení konfigurace iptables jako skriptu (pří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 výše uvedený skript a ztratíme možnost navazovat nová kabelová připojení SSH s Raspberry. Je to tak, vytvořili jsme Wi-Fi router, ke kterému je standardně zakázán přístup „přes internet“ – nyní pouze „vzduchem“. Připojíme ethernetový kabel poskytovatele a začneme surfovat!

8. Bonus: +2,4 GHz

Když jsem sestavil první router Raspberry pomocí výše popsaného nákresu, objevil jsem ve své domácnosti řadu vychytávek, které kvůli svým omezením designu Wi-Fi nemohly „malinu“ vůbec vidět. Překonfigurovat router tak, aby fungoval v 802.11b/g/n, bylo nesportovní, protože maximální rychlost „vzduchem“ v tomto případě nepřesáhla 40 Mbit a můj oblíbený poskytovatel internetu mi nabízí 100 (přes kabel).

Ve skutečnosti již bylo vynalezeno řešení problému: druhé rozhraní Wi-Fi pracující na frekvenci 2,4 GHz a druhý přístupový bod. V nedalekém stánku jsem si nekoupil první, ale druhou USB Wi-Fi „píšťalku“, na kterou jsem narazil. Prodejce potrápily dotazy na čipset, kompatibilitu s ARM Linux kernely a možnost práce v AP módu (spustil se jako první).

„Píšťalku“ nakonfigurujeme analogicky s vestavěným adaptérem Wi-Fi.

Nejprve jej přejmenujme 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 rozhraní svěříme samostatnému hostapd démonu, který se bude spouštět a zastavovat v závislosti na přítomnosti přesně definovaného „pískání“ v systému: wl1.

Konfigurační soubor /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 tohoto souboru přímo závisí na modelu USB Wi-Fi adaptéru, takže banální kopírování/vkládání může selhat.

Zkopírujte soubor distribuční služby do /etc/systemd/system/hostapd2.service:

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

a zredukovat jeho obsah do následující 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

Zbývá pouze povolit novou instanci hostapd:

# systemctl enable hostapd2

To je vše! Zatáhněte za „píšťalku“ a samotnou „malinu“ a podívejte se na bezdrátové sítě kolem vás.

A nakonec vás chci upozornit na kvalitu USB Wi-Fi adaptéru a napájení Raspberry. Připojená „horká píšťalka“ může někdy způsobit „zamrznutí maliny“ kvůli krátkodobým elektrickým problémům.

Zdroj: www.habr.com

Přidat komentář