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).
(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
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ý
# 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).
# 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).
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...
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
# 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