Raspberry Pi + CentOS = Wi-Fi Hotspot (ili raspberry router s crvenim šeširom)

Na internetu postoji ogromna količina informacija o stvaranju Wi-Fi pristupnih točaka na temelju jednopločnog računala Raspberry. U pravilu, to znači korištenje operativnog sustava Raspbian izvornog za Raspberry.

Budući da sam pristaša sustava temeljenih na RPM-u, nisam mogao proći pored ovog malog čuda i ne isprobati svoj voljeni CentOS na njemu.

Članak sadrži upute za izradu 5GHz/AC Wi-Fi usmjerivača od Raspberry Pi 3 Model B+ temeljenog na CentOS operativnom sustavu. Bit će tu nekoliko standardnih, ali malo poznatih trikova, a kao bonus - crtež za povezivanje dodatne Wi-Fi opreme na Raspberry, omogućujući mu da istovremeno radi u nekoliko načina (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (ili raspberry router s crvenim šeširom)
(mješavina slobodno dostupnih slika)

Napomenimo odmah da neke kozmičke brzine neće raditi. Iscijedim maksimalno 100 Mbps iz svog Raspberryja putem zraka, a to pokriva brzinu mog internetskog davatelja. Zašto vam treba tako tromi AC, ako u teoriji možete dobiti pola gigabita čak i na N? Ako ste si postavili ovo pitanje, onda idite u trgovinu kupiti pravi router s osam vanjskih antena.

0. Što će vam trebati

  • Zapravo, sam “proizvod od maline” je kalibra: Pi 3 Model B+ (za postizanje priželjkivanih brzina i kanala od 5 GHz);
  • Dobar microSD >= 4 GB;
  • Radna stanica s Linuxom i microSD čitačem/pisačem;
  • Dostupnost dovoljnih vještina u Linuxu, članak je za obučenog Geeka;
  • Žičana mrežna (eth0) povezanost između Raspberry i Linuxa, pokretanje DHCP poslužitelja na lokalnoj mreži i pristup Internetu s oba uređaja.

Mali komentar na posljednju točku. “Što je bilo prije, jaje ili...” kako napraviti Wi-Fi usmjerivač bez ikakve opreme za pristup internetu? Ostavimo ovu zabavnu vježbu izvan okvira članka i jednostavno pretpostavimo da je Raspberry žicom spojen na lokalnu mrežu i ima pristup Internetu. U ovom slučaju nećemo trebati dodatni TV i manipulator za postavljanje "maline".

1. Instalirajte CentOS

Početna stranica projekta

U vrijeme pisanja ovog članka, pokrenuta verzija CentOS-a na uređaju je 32-bitna. Negdje na World Wide Webu naišao sam na mišljenja da su performanse takvih OS-a na 64-bitnoj ARM arhitekturi smanjene za čak 20%. Ostaviću ovaj trenutak bez komentara.

Na Linuxu preuzmite minimalnu sliku s kernelom "-RaspberryPI-"i zapišite ga na microSD:

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

Prije početka korištenja slike, uklonit ćemo s nje SWAP particiju, proširiti root na cijeli dostupni volumen i riješiti se SELinuxa. Algoritam je jednostavan: napravite kopiju root-a na Linuxu, izbrišite sve particije s microSD-a osim prve (/boot), napravite novi root i vratite njegov sadržaj iz kopije.

Primjer potrebnih radnji (ozbiljan izlaz konzole)

# 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

Nakon raspakiranja sadržaja root particije, vrijeme je da napravite neke promjene na njemu.

Onemogući SELinux u /mnt/etc/selinux/config:

SELINUX=disabled

Uređivanje /mnt/etc/fstab, ostavljajući u njemu samo dva unosa o particijama: boot (/boot, bez promjena) i root (mijenjamo UUID vrijednost, što se može saznati proučavanjem izlaza naredbe blkid na Linuxu):

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

Konačno, mijenjamo parametre pokretanja jezgre: specificiramo novu lokaciju za korijensku particiju, onemogućujemo izlaz informacija o ispravljanju pogrešaka i (po izboru) zabranjujemo jezgri da dodjeljuje IPv6 adrese na mrežnim sučeljima:

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

Evo sadržaja /mnt/cmdline.txt na sljedeći oblik (jedan redak bez crtica):

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

preciznosti:

# cd
# umount /mnt
# sync

Preuređujemo microSD u "malinu", pokrećemo ga i dobivamo mrežni pristup preko ssh-a (root/centos).

2. Postavljanje CentOS-a

Prva tri nepokolebljiva pokreta: passwd, yum -y ažuriranje, ponovno.

Poklanjamo upravljanje mrežom networkd:

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

Stvorite datoteku (zajedno s direktorijima) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Ponovno pokrećemo "malinu" i ponovno dobivamo pristup mreži putem ssh-a (IP adresa se može promijeniti). Obratite pozornost na ono što se koristi / Etc / resolv.conf, koju je ranije stvorio Network Manager. Stoga, u slučaju problema s rješenjem, uredite njegov sadržaj. Koristiti riješeno u sustavu nećemo.

Uklanjamo "nepotrebno", popravljamo i ubrzavamo učitavanje OS-a:

# 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

Kome treba cron a tko ne probavlja ugrađeni systemd mjerači vremena, može utvrditi što nedostaje. / Var / log- i progledajte journalctl. Ako vam je potrebna povijest dnevnika (prema zadanim postavkama informacije se pohranjuju samo od trenutka pokretanja sustava):

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

Onemogućite korištenje IPv6 od strane osnovnih usluga (ako je potrebno)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Relevantnost vremena na "malini" je važna stvar. Budući da izvan kutije ne postoji hardverska mogućnost spremanja trenutnog stanja sata nakon ponovnog pokretanja, potrebna je sinkronizacija. Vrlo dobar i brz demon za ovo je nijom - već je instaliran i pokreće se automatski. NTP poslužitelje možete promijeniti na one najbliže.

/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

Za postavljanje vremenske zone koju ćemo koristiti trik. Budući da nam je cilj stvoriti Wi-Fi router koji radi na frekvencijama od 5GHz, pripremit ćemo se za iznenađenja unaprijed regulator:

# yum info crda
Sažetak: Demon usklađenosti s propisima za 802.11 bežično umrežavanje

Ovaj zli dizajn, također temeljen na vremenskoj zoni, "zabranjuje" korištenje (u Rusiji) frekvencija od 5 GHz i kanala s "visokim" brojevima. Trik je postaviti vremensku zonu bez korištenja imena kontinenata/gradova, odnosno umjesto:

# timedatectl set-timezone Europe/Moscow

Pritišćemo:

# timedatectl set-timezone Etc/GMT-3

I završni detalji frizure sustava:

# 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 dodaci

Sve što je gore rečeno može se smatrati potpunim uputama za instaliranje "vanilinog" CentOS-a na Raspberry Pi. Trebali biste završiti s računalom koje se (ponovno) podiže za manje od 10 sekundi, koristi manje od 15 megabajta RAM-a i 1.5 gigabajta microSD (zapravo manje od 1 gigabajta zbog nepotpunog /boot-a, ali budimo iskreni).

Da biste instalirali softver Wi-Fi pristupne točke na ovaj sustav, morat ćete malo proširiti mogućnosti standardne distribucije CentOS-a. Prije svega, nadogradimo upravljački program (firmware) ugrađenog Wi-Fi adaptera. Na početnoj stranici projekta piše:

Wifi na Raspberry 3B i 3B+

Projekt CentOS ne smije distribuirati Raspberry PI 3B/3B+ firmware datoteke. Možete koristiti sljedeće članke da biste razumjeli problem, nabavili firmware i postavili wifi.

Ono što je zabranjeno za CentOS projekt nama nije zabranjeno za osobnu upotrebu. Distribucijski Wi-Fi firmware u CentOS-u zamjenjujemo odgovarajućim od Broadcom programera (te iste omražene binarne mrlje...). To će vam posebice omogućiti korištenje AC-a u načinu rada pristupne točke.

Wi-Fi firmware nadogradnjaSaznajte model uređaja i trenutnu verziju firmvera:

# 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 

Vidimo da je verzija firmvera 7.45.18 s datumom 01.03.2015. i zapamtite sljedeći niz brojeva: 43455 (brcmfmac43455-sdio.bin).

Preuzmite trenutnu Raspbian sliku. Lijeni ljudi mogu zapisati sliku na microSD i od tamo preuzeti datoteke s firmwareom. Ili možete montirati korijensku particiju slike u Linuxu i odatle kopirati što vam treba:

# 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

Rezultirajuće datoteke firmvera Wi-Fi adaptera moraju se kopirati i zamijeniti s "malina" u direktoriju /usr/lib/firmware/brcm/

Ponovno pokrećemo budući ruter i zadovoljno se smiješimo:

# 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 

Verzija: 7.45.154 od 27.02.2018.

I naravno 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. Konfiguracija mreže i predstojeći izazovi

Kao što smo se gore dogovorili, "malina" je povezana "žicom" s lokalnom mrežom. Pretpostavimo da pružatelj pruža pristup Internetu na potpuno isti način: adresu na javnoj mreži dinamički izdaje DHCP poslužitelj (možda s MAC vezanjem). U ovom slučaju, nakon završnog podešavanja maline, samo trebate "utaknuti" kabel provajdera u nju i gotovi ste. Korištenje autorizacije systemd-mreža - tema je zasebnog članka i ovdje se ne raspravlja.

Raspberryjevo Wi-Fi sučelje je lokalna mreža, a ugrađeni Ethernet adapter (eth0) je vanjski. Označimo lokalnu mrežu statički, na primjer: 192.168.0.0/24. Adresa maline: 192.168.0.1. DHCP poslužitelj radit će na vanjskoj mreži (Internet).

Problem dosljednosti naziva и poznati gvatemalski programer - dvije nevolje koje čekaju svakoga tko konfigurira mrežna sučelja i usluge u systemd distribucijama.

Paralelni kaos (lirska digresija)Lennart Pottering sastavio je vlastiti program systemd Vrlo dobro. Ovaj systemd druge programe pokreće tako brzo da se oni, ne stigavši ​​se oporaviti od sučevog zvižduka, spotaknu i padnu na startu, a da nisu ni započeli svoju stazu s preprekama.

Ali ozbiljno, agresivna paralelizacija pokrenutih procesa na početku systemd OS-a svojevrsni je "magareći most" za iskusne sekvencijalne LSB stručnjake. Srećom, uvođenje reda u ovaj "paralelni kaos" pokazalo se jednostavnim, iako ne uvijek očitim.

Stvaramo dva virtualna sučelja mosta s konstantnim imenima: lan и blijed. Na prvi ćemo “spojiti” Wi-Fi adapter(e), a na drugi eth0 “raspberry”.

/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=da eliminira potrebu za nagovještajem jezgre putem sysctl-a za omogućavanje usmjeravanja.
MACAadresa= Odkomentirajmo i promijenimo ako je potrebno.

Prvo "spojimo" eth0. Sjećamo se "problema uniformnosti" i koristimo samo MAC adresu ovog sučelja, koja se može saznati, na primjer, ovako:

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

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

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

[Network]
Bridge=wan

Brišemo prethodnu konfiguracijsku datoteku eth0, ponovno pokrećemo Raspberry i dobivamo pristup mreži (IP adresa će se najvjerojatnije promijeniti):

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

5.DNSMASQ

Za izradu Wi-Fi pristupnih točaka ništa nije bolje od par slatkih dnsmasq + hostapd još nisam shvatio. Po mom mišljenju.

Ako je netko zaboravio, onda...hostapd - ovo je stvar koja kontrolira Wi-Fi adaptere (konkretno, pobrinut će se za njihovo povezivanje s virtualnim lan "maline"), autorizira i registrira bežične klijente.

dnsmasq — konfigurira mrežni skup klijenata: izdaje IP adrese, DNS poslužitelje, zadani pristupnik i slične užitke.

Počnimo s dnsmasq:

# yum install dnsmasq

predložak / 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

uredite po svom ukusu.

minimalistički /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

“Čarolija” ovdje leži u parametru vezano-dinamički, koji govori dnsmasq demonu da pričeka dok se ne pojavi na sustavu sučelje=lan, a ne pasti u nesvijest od napadaja ponosne usamljenosti nakon starta.

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

6. HOSTAPD

I na kraju, čarobne hostapd konfiguracije. Ne sumnjam da netko čita ovaj članak u potrazi upravo za ovim dragocjenim stihovima.

Prije instaliranja hostapd-a morate prevladati "problem uniformnosti". Ugrađeni Wi-Fi adapter wlan0 može jednostavno promijeniti svoje ime u wlan1 pri povezivanju dodatne USB Wi-Fi opreme. Stoga ćemo popraviti nazive sučelja na sljedeći način: smislit ćemo jedinstvena imena za (bežične) adaptere i vezati ih za MAC adrese.

Za ugrađeni Wi-Fi adapter, koji je još uvijek wlan0:

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

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

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

[Link]
Name=wl0

Sad ćemo se u to uvjeriti wl0 - Ovo je ugrađeni Wi-Fi. Ponovno pokrećemo Raspberry kako bismo se uvjerili u to.

Instalirati:

# yum install hostapd wireless-tools

Konfiguracijska datoteka /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

Ne zaboravljajući ni na trenutak Državno povjerenstvo za izvanredna stanja, promijenite potrebne parametre i ručno provjerite funkcionalnost:

# hostapd /etc/hostapd/hostapd.conf

hostapd će se pokrenuti u interaktivnom načinu rada, emitirajući svoje stanje konzoli. Ako nema grešaka, tada će se klijenti koji podržavaju AC mod moći spojiti na pristupnu točku. Za zaustavljanje hostapda - Ctrl-C.

Sve što preostaje je omogućiti hostapd u pokretanju sustava. Ako napravite standardnu ​​stvar (systemctl enable hostapd), tada nakon sljedećeg ponovnog pokretanja možete dobiti demona koji se "valja u krvi" s dijagnozom "sučelje wl0 nije pronađeno". Kao rezultat "paralelnog kaosa", hostapd se pokrenuo brže nego što je kernel pronašao bežični adapter.

Internet je pun lijekova: od prisilnog timeouta prije pokretanja daemona (nekoliko minuta), do drugog daemona koji prati izgled sučelja i (ponovno) pokreće hostpad. Rješenja su dosta izvediva, ali užasno ružna. Veliku zovemo u pomoć systemd sa svojim “ciljevima” i “zadacima” i “ovisnostima”.

Kopirajte datoteku usluge distribucije u /etc/systemd/system/hostapd.service:

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

i svesti njegov sadržaj na sljedeći oblik:

[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

Čarolija ažurirane servisne datoteke leži u dinamičkom povezivanju hostapd-a s novom metom - sučeljem wl0. Kada se sučelje pojavi, demon se pokreće; kada nestane, zaustavlja se. I sve je to online - bez ponovnog pokretanja sustava. Ova će tehnika biti posebno korisna pri spajanju USB Wi-Fi adaptera na Raspberry.

Sada možeš:

# systemctl enable hostapd
# reboot

7. IPTABLES

“Što???” © Da, da! Nijedan systemd. Nema novonastalih kombinacija (u obliku firewalld), koji na kraju čine istu stvar.

Iskoristimo onu dobru staru iptables, čiji će servisi nakon pokretanja učitati mrežna pravila u kernel i tiho se ugasiti bez ostanka rezidentnog i bez trošenja resursa. systemd ima elegantan IPMasquerade=, no ipak ćemo prijevod adrese (NAT) i firewall povjeriti iptablesu.

Instalirati:

# yum install iptables-services
# systemctl enable iptables ip6tables

Više volim pohraniti konfiguraciju iptables kao skriptu (primjer):

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

Izvršavamo gornju skriptu i gubimo mogućnost uspostavljanja novih žičnih SSH veza s Raspberryjem. Tako je, napravili smo Wi-Fi usmjerivač, kojemu je pristup "putem interneta" prema zadanim postavkama zabranjen - sada samo "bežično". Spajamo Ethernet kabel provajdera i počinjemo surfati!

8. Bonus: +2,4 GHz

Kada sam sastavljao prvi Raspberry router prema gore opisanom crtežu, otkrio sam brojne gadgete u svom kućanstvu koji, zbog svojih ograničenja Wi-Fi dizajna, uopće nisu mogli vidjeti "malinu". Rekonfiguracija rutera za rad u 802.11b/g/n bila je nesportska, budući da maksimalna brzina “bez zraka” u ovom slučaju nije prelazila 40 Mbita, a moj omiljeni internetski provajder nudi mi 100 (kabelom).

Zapravo, rješenje problema već je izmišljeno: drugo Wi-Fi sučelje koje radi na frekvenciji od 2,4 GHz i druga pristupna točka. Na obližnjem štandu kupio sam ne prvu, već drugu USB Wi-Fi “zviždaljku” na koju sam naišao. Prodavatelja su mučila pitanja o čipsetu, kompatibilnosti s ARM Linux kernelima i mogućnosti rada u AP modu (on je prvi počeo).

Konfiguriramo "zviždaljku" po analogiji s ugrađenim Wi-Fi adapterom.

Prvo, preimenujmo ga u 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

Upravljanje novim Wi-Fi sučeljem povjerit ćemo zasebnom hostapd daemonu, koji će se pokretati i zaustavljati ovisno o prisutnosti strogo definirane "zviždaljke" u sustavu: wl1.

Konfiguracijska datoteka /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]

Sadržaj ove datoteke izravno ovisi o modelu USB Wi-Fi adaptera, tako da vam banalno kopiranje / lijepljenje može uspjeti.

Kopirajte datoteku usluge distribucije u /etc/systemd/system/hostapd2.service:

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

i svesti njegov sadržaj na sljedeći oblik:

[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

Sve što preostaje je omogućiti novu instancu hostapd-a:

# systemctl enable hostapd2

To je sve! Povucite "zviždaljku" i samu "malinu", pogledajte bežične mreže oko sebe.

I na kraju, želim vas upozoriti na kvalitetu USB Wi-Fi adaptera i napajanja Raspberry-a. Povezana "vruća zviždaljka" ponekad može uzrokovati "smrzavanje malina" zbog kratkotrajnih električnih problema.

Izvor: www.habr.com

Dodajte komentar