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

Na Internetu postoji ogromna količina informacija o kreiranju Wi-Fi pristupnih tačaka na bazi Raspberry PC računara sa jednom pločicom. Po pravilu, to znači korištenje Raspbian operativnog sistema koji je izvorni za Raspberry.

Budući da sam pristaša RPM sistema, nisam mogao proći pored ovog malog čuda i ne isprobati moj voljeni CentOS na njemu.

Članak pruža uputstva za pravljenje 5GHz/AC Wi-Fi rutera od Raspberry Pi 3 Model B+ baziranog na CentOS operativnom sistemu. Biće nekoliko standardnih, ali malo poznatih trikova, a kao bonus - crtež za povezivanje dodatne Wi-Fi opreme na Raspberry, omogućavajući mu da istovremeno radi u nekoliko režima (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (ili raspberry ruter sa crvenim šeširom)
(miks slobodno dostupnih slika)

Odmah da primijetimo da neke kosmičke brzine neće raditi. Iz svog Raspberryja cijedim maksimalno 100 Mbps preko zraka, i to pokriva brzinu mog Internet provajdera. Zašto vam treba tako trom AC, ako u teoriji možete dobiti pola gigabita čak i na N? Ako ste sebi postavili ovo pitanje, onda idite u prodavnicu da kupite pravi ruter sa osam vanjskih antena.

0. Šta će vam trebati

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

Mali komentar na poslednju tačku. “Šta je bilo prvo, jaje ili...” kako napraviti Wi-Fi ruter u nedostatku opreme za pristup internetu? Ostavimo ovu zabavnu vježbu van okvira članka i jednostavno pretpostavimo da je Raspberry žicom povezan na lokalnu mrežu i ima pristup internetu. U ovom slučaju neće nam trebati dodatni televizor 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 Web-u sam naišao 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 na microSD:

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

Prije nego što počnemo koristiti sliku, iz nje ćemo ukloniti 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 sa microSD-a osim prve (/boot), kreirajte novi root i vratite njegov sadržaj iz kopije.

Primjer potrebnih radnji (teški 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 što raspakujete sadržaj root particije, vrijeme je da napravite neke promjene na njoj.

Onemogućite SELinux in /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 blkid naredbe 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 kernela: specificiramo novu lokaciju za root particiju, onemogućujemo izlaz informacija za otklanjanje grešaka i (opcionalno) zabranjujemo kernelu 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 obrazac (jedan red bez crtica):

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

Gotovo:

# cd
# umount /mnt
# sync

Preuređivamo microSD u “raspberry”, pokrećemo ga i dobijamo pristup mreži preko ssh-a (root/centos).

2. Postavljanje CentOS-a

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

Poklanjamo upravljanje mrežom umreženo:

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

Kreirajte fajl (zajedno sa direktorijumima) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Ponovo pokrećemo “raspberry” i ponovo dobijamo pristup mreži preko ssh-a (IP adresa se može promijeniti). Obratite pažnju na ono što se koristi /etc/resolv.conf, koju je ranije kreirao Network Manager. Stoga, u slučaju problema s rješavanjem, uredite njegov sadržaj. Koristi sistemski riješeno 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 ko ne svari ugrađeno systemd tajmeri, može utvrditi šta nedostaje. / var / log- i pogledaj kroz njega journalctl. Ako vam je potrebna istorija dnevnika (podrazumevano, informacije se pohranjuju samo od trenutka kada se sistem pokrene):

# 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 nema hardverske mogućnosti za spremanje trenutnog stanja sata nakon ponovnog pokretanja, potrebna je sinhronizacija. Vrlo dobar i brz demon za ovo je hronija - već instaliran i automatski se pokreće. NTP servere možete promijeniti na 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 ćemo koristiti trik. Budući da nam je cilj stvoriti Wi-Fi ruter koji radi na 5GHz frekvencijama, pripremit ćemo se za iznenađenja unaprijed regulator:

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

Ovaj zli dizajn, takođe zasnovan na vremenskoj zoni, "zabranjuje" upotrebu (u Rusiji) frekvencija od 5 GHz i kanala sa "visokim" brojevima. Trik je u postavljanju vremenske zone bez korištenja naziva kontinenata/gradova, odnosno umjesto:

# timedatectl set-timezone Europe/Moscow

pritisnemo:

# timedatectl set-timezone Etc/GMT-3

I završni detalji frizure sistema:

# 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 kompletnim uputama za instaliranje “vanilije” CentOS-a na Raspberry Pi. Trebalo bi da dobijete računar koji se (ponovno) pokreć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 tačke na ovaj sistem, moraćete malo da proširite mogućnosti standardne CentOS distribucije. Prije svega, nadogradimo drajver (firmver) ugrađenog Wi-Fi adaptera. Početna stranica projekta kaže:

Wifi na Raspberry 3B i 3B+

Raspberry PI 3B/3B+ fajlove firmvera nije dozvoljeno distribuirati od strane CentOS projekta. Možete koristiti sljedeće članke da biste razumjeli problem, nabavili firmver i podesili WiFi.

Ono što je zabranjeno za CentOS projekat nije nam zabranjeno za ličnu upotrebu. Distribucijski Wi-Fi firmver u CentOS-u zamjenjujemo odgovarajućim od Broadcom programera (one iste omražene binarne mrlje...). Ovo će vam, posebno, omogućiti da koristite AC u režimu pristupne tačke.

Nadogradnja Wi-Fi firmveraSaznajte 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 od 01.03.2015/XNUMX/XNUMX, i zapamtite sljedeći skup brojeva: 43455 (brcmfmac43455-sdio.bin).

Preuzmite trenutnu Raspbian sliku. Lijeni ljudi mogu zapisati sliku na microSD i odatle preuzeti datoteke sa firmverom. Ili možete montirati root particiju slike u Linux i kopirati ono što vam je potrebno odatle:

# 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 sa "raspberry" u direktorij /usr/lib/firmware/brcm/

Ponovo 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. Mrežna konfiguracija i predstojeći izazovi

Kao što smo gore dogovorili, „malina“ je „žicom“ povezana na lokalnu mrežu. Pretpostavimo da provajder pruža pristup Internetu na potpuno isti način: adresu na javnoj mreži dinamički izdaje DHCP server (možda sa MAC vezanjem). U ovom slučaju, nakon konačnog podešavanja maline, potrebno je samo da "uključite" kabl provajdera u njega i gotovi ste. Korištenje autorizacije systemd-networkd - tema je posebnog članka i ovdje se ne raspravlja.

Raspberry Wi-Fi interfejs(i) je lokalna mreža, a ugrađeni Ethernet adapter (eth0) je eksterni. Označimo lokalnu mrežu statički, na primjer: 192.168.0.0/24. Raspberry adresa: 192.168.0.1. DHCP server će raditi na vanjskoj mreži (Internet).

Problem konzistentnosti imenovanja и poznati gvatemalski programer - dvije nevolje koje čekaju svakoga ko konfiguriše mrežna sučelja i servise u systemd distribucijama.

Paralelni haos (lirska digresija)Lennart Pottering je sastavio vlastiti program systemd Veoma dobro. Ovo systemd tako brzo pokreće druge programe da se oni, nemajući vremena da se oporave od sudijskog zvižduka, spotaknu i padaju na startu, a da nisu ni krenuli na stazu s preprekama.

Ali ozbiljno, agresivna paralelizacija pokrenutih procesa na početku systemd OS-a je neka vrsta “magarećeg mosta” za iskusne sekvencijalne LSB stručnjake. Na sreću, uvođenje reda u ovaj “paralelni haos” se pokazalo jednostavnim, iako ne uvijek očiglednim.

Kreiramo dva virtuelna bridge interfejsa sa konstantnim imenima: lan и wan. Wi-Fi adapter(e) ćemo “spojiti” na prvi, a eth0 “raspberry” na drugi.

/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 eliminiše potrebu da se nagoveštava kernelu preko sysctl-a da bi se omogućilo rutiranje.
MACAAddress= Poništimo komentare i promijenimo ako je potrebno.

Prvo “povezujemo” eth0. Sjećamo se „problema ujednačenosti“ i koristimo samo MAC adresu ovog interfejsa, što 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

Izbrišemo prethodni konfiguracioni fajl eth0, ponovo pokrećemo Raspberry i dobijamo pristup mreži (IP adresa će se najverovatnije promeniti):

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

5.DNSMASQ

Za pravljenje Wi-Fi pristupnih tačaka, ništa nije bolje od slatkog dnsmasq + hostapd još nisam shvatio. Po mom mišljenju.

U slučaju da je neko zaboravio, onda...hostapd - ovo je stvar koja kontroliše Wi-Fi adaptere (posebno će se pobrinuti za njihovo povezivanje sa virtuelnim lan "maline"), ovlašćuje i registruje bežične klijente.

dnsmasq — konfiguriše mrežni stog klijenata: izdaje IP adrese, DNS servere, podrazumevani gateway i slične užitke.

Počnimo sa dnsmasq-om:

# yum install dnsmasq

Uzorak /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

“Magija” ovdje leži u parametru bind-dynamic, koji govori dnsmasq demonu da pričeka dok se ne pojavi na sistemu interfejs=lan, a ne onesvijestiti se od napadaja ponosne usamljenosti nakon starta.

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

6. HOSTAPD

I konačno, čarobne hostapd konfiguracije. Ne sumnjam da neko čita ovaj članak u potrazi za upravo ovim dragocjenim redovima.

Prije instaliranja hostapd-a, morate prevladati “problem ujednačenosti”. Ugrađeni Wi-Fi adapter wlan0 može lako promijeniti ime u wlan1 kada poveže dodatnu USB Wi-Fi opremu. Stoga ćemo popraviti imena interfejsa na sledeći način: smislić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

Sada ćemo biti sigurni u to wl0 - Ovo je ugrađeni Wi-Fi. Ponovo pokrećemo Raspberry da bismo se uvjerili u ovo.

Instaliraj:

# yum install hostapd wireless-tools

Konfiguracioni fajl /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žavni komitet za vanredne situacije, promijenite parametre koji su nam potrebni i ručno provjerite funkcionalnost:

# hostapd /etc/hostapd/hostapd.conf

hostapd će se pokrenuti u interaktivnom režimu, prenoseći svoje stanje na konzolu. Ako nema grešaka, klijenti koji podržavaju AC način rada će moći da se povežu na pristupnu tačku. Za zaustavljanje hostapd-a - Ctrl-C.

Sve što ostaje je da omogućite hostapd pri pokretanju sistema. Ako uradite standardnu ​​stvar (systemctl omogući hostapd), onda nakon sljedećeg ponovnog pokretanja možete dobiti demona koji se "valja u krvi" s dijagnozom "interfejs wl0 nije pronađen". Kao rezultat "paralelnog haosa", hostapd se pokrenuo brže nego što je kernel pronašao bežični adapter.

Internet je pun lijekova: od prinudnog vremenskog ograničenja prije pokretanja demona (nekoliko minuta), do drugog demona koji prati izgled interfejsa i (ponovno) pokreće hostpad. Rješenja su prilično izvodljiva, ali užasno ružna. Pozivamo velikog u pomoć systemd sa svojim “ciljevima” i “zadacima” i “zavisnostima”.

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

Magija ažurirane servisne datoteke leži u dinamičkom vezivanju hostapd-a za novi cilj - wl0 interfejs. Kada se pojavi interfejs, demon se pokreće; kada nestane, prestaje. I to je sve na mreži - bez ponovnog pokretanja sistema. Ova tehnika će biti posebno korisna kada povezujete USB Wi-Fi adapter na Raspberry.

Sada možete:

# systemctl enable hostapd
# reboot

7. IPTABLES

“Stha???” © Da, da! Nema systemd. Nema novonastalih kombajna (u obliku firewalld), koji na kraju rade istu stvar.

Koristimo stari dobri iptables, čije će usluge, nakon pokretanja, učitavati mrežna pravila u kernel i tiho se gasiti bez zadržavanja rezidentnosti i bez trošenja resursa. systemd ima elegantan IPMasquerade=, ali ćemo i dalje povjeriti prevod adrese (NAT) i firewall iptables-u.

Instaliraj:

# yum install iptables-services
# systemctl enable iptables ip6tables

Više volim da pohranim iptables konfiguraciju 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čanih SSH veza sa Raspberry-jem. Tako je, napravili smo Wi-Fi ruter, pristup kojem je „preko Interneta“ podrazumevano zabranjen - sada samo „preko zraka“. Povezujemo Ethernet kabel provajdera i počinjemo surfati!

8. Bonus: +2,4GHz

Kada sam sastavio prvi Raspberry ruter koristeći gore opisani crtež, otkrio sam brojne sprave u svom domaćinstvu koje, zbog ograničenja Wi-Fi dizajna, uopće nisu mogle vidjeti "malinu". Rekonfigurisanje rutera da radi u 802.11b/g/n bilo je nesportsko, jer maksimalna brzina “preko zraka” u ovom slučaju nije prelazila 40 Mbita, a moj omiljeni Internet provajder mi nudi 100 (putem kabla).

U stvari, rješenje problema je već izmišljeno: drugi Wi-Fi interfejs koji radi na frekvenciji od 2,4 GHz i druga pristupna tačka. Na obližnjoj tezgi kupio sam ne prvu, već drugu USB Wi-Fi “zviždaljku” na koju sam naišla. Prodavca su mučila pitanja o čipsetu, kompatibilnosti sa 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 interfejsom poverićemo zasebnom hostapd demonu, koji će se pokretati i zaustavljati u zavisnosti od prisustva striktno definisanog „zvižduka“ u sistemu: wl1.

Konfiguracioni fajl /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 direktno ovisi o modelu USB Wi-Fi adaptera, tako da vam banalno kopiranje/paste može propasti.

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 ostaje 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 da vas upozorim na kvalitet USB Wi-Fi adaptera i napajanja Raspberryja. Povezana "vruća zviždaljka" ponekad može uzrokovati "smrzavanje malina" zbog kratkotrajnih električnih problema.

izvor: www.habr.com

Dodajte komentar