Raspberry Pi + CentOS = Wi-Fi Hotspot (ali malinasti usmerjevalnik z rdečim klobukom)

Na internetu je ogromno informacij o ustvarjanju dostopnih točk Wi-Fi na osnovi računalnika z eno ploščo Raspberry. Praviloma to pomeni uporabo operacijskega sistema Raspbian, ki je izviren za Raspberry.

Ker sem pristaš sistemov, ki temeljijo na RPM, nisem mogel mimo tega malega čudeža in na njem ne preizkusim svojega ljubljenega CentOS-a.

Članek vsebuje navodila za izdelavo 5GHz/AC Wi-Fi usmerjevalnika iz Raspberry Pi 3 Model B+, ki temelji na operacijskem sistemu CentOS. Na voljo bo več standardnih, a malo znanih trikov, in kot bonus - risba za priključitev dodatne opreme Wi-Fi na Raspberry, ki ji omogoča hkratno delovanje v več načinih (2,4 + 5 GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (ali malinasti usmerjevalnik z rdečim klobukom)
(mešanica prosto dostopnih slik)

Naj takoj opozorimo, da nekatere kozmične hitrosti ne bodo delovale. Iz svojega Raspberryja po zraku iztisnem največ 100 Mbps in to pokrije hitrost mojega internetnega ponudnika. Zakaj rabiš tako počasen AC, če teoretično dobiš pol gigabita tudi na N? Če ste si zastavili to vprašanje, potem pojdite v trgovino in kupite pravi usmerjevalnik z osmimi zunanjimi antenami.

0. Kaj boste potrebovali

  • Pravzaprav je sam "malin izdelek" kalibra: Pi 3 Model B+ (za doseganje želenih 5 GHz hitrosti in kanalov);
  • Dober microSD >= 4 GB;
  • Delovna postaja z Linuxom in bralnikom/zapisovalcem microSD;
  • Razpoložljivost zadostnega znanja v Linuxu, članek je za usposobljenega Geeka;
  • Žična omrežna (eth0) povezljivost med Raspberry in Linuxom, delovanje strežnika DHCP v lokalnem omrežju in dostop do interneta iz obeh naprav.

Majhen komentar na zadnjo točko. "Kaj je bilo prej, jajce ali ..." kako narediti Wi-Fi usmerjevalnik brez opreme za dostop do interneta? Pustimo to zabavno vajo izven obsega članka in preprosto predpostavimo, da je Raspberry žično povezan z lokalnim omrežjem in ima dostop do interneta. V tem primeru za postavitev "maline" ne bomo potrebovali dodatnega televizorja in manipulatorja.

1. Namestite CentOS

Domača stran projekta

V času pisanja tega članka je različica CentOS v napravi 32-bitna. Nekje na svetovnem spletu sem zasledil mnenja, da se zmogljivost tovrstnih operacijskih sistemov na 64-bitni arhitekturi ARM zmanjša za kar 20%. Ta trenutek bom pustil brez komentarja.

V sistemu Linux prenesite minimalno sliko z jedrom "-RaspberryPI-"in ga zapišite na microSD:

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

Preden začnemo uporabljati sliko, bomo iz nje odstranili particijo SWAP, koren razširili na celoten razpoložljivi volumen in se znebili SELinuxa. Algoritem je preprost: naredite kopijo korena v Linuxu, izbrišite vse particije iz microSD razen prve (/boot), ustvarite nov koren in vrnite njegovo vsebino iz kopije.

Primer zahtevanih dejanj (hudi izhod 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

Ko razpakirate vsebino korenske particije, je čas, da na njej naredite nekaj sprememb.

Onemogoči SELinux v /mnt/etc/selinux/config:

SELINUX=disabled

Urejanje /mnt/etc/fstab, pri čemer pustimo v njem samo dva vnosa o particijah: boot (/boot, brez sprememb) in root (spremenimo vrednost UUID, ki jo lahko ugotovimo s preučevanjem izhoda ukaza blkid v Linuxu):

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

Nazadnje spremenimo zagonske parametre jedra: določimo novo lokacijo za korensko particijo, onemogočimo izhod informacij o odpravljanju napak in (izbirno) jedru prepovemo dodeljevanje naslovov IPv6 na omrežnih vmesnikih:

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

Tukaj je vsebina /mnt/cmdline.txt v naslednji obliki (ena vrstica brez vezajev):

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

Končano:

# cd
# umount /mnt
# sync

MicroSD preuredimo v "malino", jo zaženemo in do nje dobimo omrežni dostop prek ssh (root/centos).

2. Nastavitev CentOS

Prva tri neomajna gibanja: passwd, yum -y posodobitev, odmevajoč.

Podarimo upravljanje omrežja networkd:

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

Ustvarite datoteko (skupaj z imeniki) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Ponovno zaženemo "malino" in znova dobimo omrežni dostop do nje prek ssh (naslov IP se lahko spremeni). Bodite pozorni na to, kaj se uporablja / Etc / resolv.conf, ki ga je prej ustvaril upravitelj omrežja. Zato v primeru težav z razrešitvijo uredite njeno vsebino. Uporaba sistemsko razrešen ne bomo.

Odstranimo "nepotrebno", popravimo in pospešimo nalaganje 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 potrebuje cron in ki ne prebavlja vgrajenega sistemski časovniki, lahko ugotovi, kaj manjka. / var / log- in poglej skozi revija. Če potrebujete zgodovino dnevnika (privzeto so informacije shranjene samo od trenutka, ko se sistem zažene):

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

Onemogočite uporabo IPv6 za osnovne storitve (če je potrebno)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Relevantnost časa na "malinah" je pomembna stvar. Ker takoj po ponovnem zagonu ni strojne zmožnosti shranjevanja trenutnega stanja ure, je potrebna sinhronizacija. Zelo dober in hiter demon za to je kronija - že nameščen in se samodejno zažene. Strežnike NTP lahko zamenjate z najbližjimi.

/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 nastavitev časovnega pasu, ki ga bomo uporabili trik. Ker je naš cilj ustvariti Wi-Fi usmerjevalnik, ki deluje na frekvencah 5 GHz, se bomo vnaprej pripravili na presenečenja regulator:

# yum info crda
Povzetek: demon za skladnost s predpisi za brezžično omrežje 802.11

Ta zlobna zasnova, ki prav tako temelji na časovnem pasu, "prepoveduje" uporabo (v Rusiji) frekvenc 5 GHz in kanalov z "visokimi" številkami. Trik je v tem, da nastavite časovni pas brez uporabe imen celin/mest, to je namesto:

# timedatectl set-timezone Europe/Moscow

Pritisnemo:

# timedatectl set-timezone Etc/GMT-3

In končni dotiki pričeske 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. Dodatki za CentOS

Vse, kar je bilo povedano zgoraj, se lahko šteje za popolna navodila za namestitev "vanilije" CentOS na Raspberry Pi. Na koncu bi morali imeti računalnik, ki se (ponovno) zažene v manj kot 10 sekundah, uporablja manj kot 15 megabajtov RAM-a in 1.5 gigabajta microSD (pravzaprav manj kot 1 gigabajt zaradi nepopolnega zagona /boot, a bodimo iskreni).

Če želite v ta sistem namestiti programsko opremo za dostopno točko Wi-Fi, boste morali nekoliko razširiti zmogljivosti standardne distribucije CentOS. Najprej nadgradimo gonilnik (firmware) vgrajenega adapterja Wi-Fi. Domača stran projekta pravi:

Wifi na Raspberry 3B in 3B+

Datotek vdelane programske opreme Raspberry PI 3B/3B+ projekt CentOS ne sme distribuirati. Če želite razumeti težavo, pridobiti vdelano programsko opremo in nastaviti wifi, lahko uporabite naslednje članke.

Kar je prepovedano za projekt CentOS, za nas ni prepovedano za osebno uporabo. Zamenjamo distribucijsko vdelano programsko opremo Wi-Fi v CentOS z ustrezno programsko opremo razvijalcev Broadcom (te iste osovražene binarne blobove ...). To vam bo zlasti omogočilo uporabo AC v načinu dostopne točke.

Nadgradnja vdelane programske opreme Wi-FiUgotovite model naprave in trenutno različico vdelane programske opreme:

# 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 različica vdelane programske opreme 7.45.18 z dne 01.03.2015. januarja XNUMX, in zapomnite si naslednji niz številk: 43455 (brcmfmac43455-sdio.bin).

Prenesite trenutno sliko Raspbian. Lenuhi lahko zapišejo sliko na microSD in od tam vzamejo datoteke z firmwareom. Lahko pa namestite korensko particijo slike v Linuxu in od tam kopirate, kar potrebujete:

# wget https://downloads.raspberrypi.org/raspbian_lite_latest
# unzip -p raspbian_lite_latest > raspbian.img
# fdisk -l raspbian.img
Disk raspbian.img: 2 GiB, 2197815296 bytes, 4292608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x17869b7d

Device        Boot  Start     End Sectors  Size Id Type
raspbian.img1        8192  532480  524289  256M  c W95 FAT32 (LBA)
raspbian.img2      540672 4292607 3751936  1.8G 83 Linux

# mount -t ext4 -o loop,offset=$((540672 * 512)) raspbian.img /mnt
# cp -fv /mnt/lib/firmware/brcm/*43455* ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.bin' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.txt' -> ...
# umount /mnt

Nastale datoteke vdelane programske opreme adapterja Wi-Fi je treba kopirati in zamenjati z »malinami« v imenik /usr/lib/firmware/brcm/

Ponovno zaženemo bodoči usmerjevalnik in se zadovoljno nasmehnemo:

# 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 

Različica: 7.45.154 z dne 27.02.2018.

In seveda 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 omrežja in prihodnji izzivi

Kot smo se dogovorili zgoraj, je "malina" povezana z "žico" v lokalno omrežje. Predpostavimo, da ponudnik omogoča dostop do interneta na povsem enak način: naslov v javnem omrežju izda strežnik DHCP dinamično (lahko z vezavo MAC). V tem primeru morate po dokončni nastavitvi maline vanj le še "vtakniti" kabel ponudnika in končali ste. Uporaba avtorizacije systemd-networkd - tema ločenega članka in tukaj ni obravnavana.

Raspberryjev Wi-Fi vmesnik(-i) je lokalno omrežje, vgrajeni Ethernet adapter (eth0) pa zunanji. Oštevilčimo lokalno omrežje statično, na primer: 192.168.0.0/24. Naslov Raspberry: 192.168.0.1. Strežnik DHCP bo deloval v zunanjem omrežju (Internet).

Problem doslednosti poimenovanja и slavni gvatemalski programer - dve težavi, ki čakata vsakogar, ki konfigurira omrežne vmesnike in storitve v distribucijah systemd.

Vzporedni kaos (lirična digresija)Lennart Pottering je sestavil svoj program sistemd Zelo dobro. to sistemd zažene druge programe tako hitro, da se ti, ker nimajo časa, da si opomorejo od sodnikovega žvižga, spotaknejo in padejo na začetku, ne da bi sploh začeli tek z ovirami.

Toda resno, agresivna vzporednost sproženih procesov na začetku operacijskega sistema systemd je neke vrste "oslovski most" za izkušene sekvenčne strokovnjake za LSB. Na srečo se izkaže, da je uvajanje reda v ta »vzporedni kaos« preprosto, čeprav ne vedno očitno.

Ustvarimo dva virtualna mostna vmesnika s stalnimi imeni: lan и wan. Na prvega bomo “povezali” Wi-Fi adapter(e), na drugega pa 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 odpravlja potrebo po namigu jedru prek sysctl za omogočanje usmerjanja.
MACAslov= Odkomentirajmo in po potrebi spremenimo.

Najprej "povežemo" eth0. Zapomnimo si "problem enotnosti" in uporabimo samo naslov MAC tega vmesnika, ki ga lahko na primer ugotovimo takole:

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

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

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

[Network]
Bridge=wan

Izbrišemo prejšnjo konfiguracijsko datoteko eth0, znova zaženemo Raspberry in dobimo omrežni dostop do nje (naslov IP se bo najverjetneje spremenil):

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

5.DNSMASQ

Za ustvarjanje dostopnih točk Wi-Fi ni nič boljšega od sladkega para dnsmasq + hostapd še nisem ugotovil. Po mojem mnenju.

Če je kdo pozabil, potem...hostapd - to je stvar, ki nadzoruje adapterje Wi-Fi (predvsem bo skrbel za njihovo povezavo z virtualnim lan "maline"), avtorizira in registrira brezžične odjemalce.

dnsmasq — konfigurira omrežni sklad odjemalcev: izda naslove IP, strežnike DNS, privzeti prehod in podobne užitke.

Začnimo z dnsmasq:

# yum install dnsmasq

Vzorec / 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 svojih željah.

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

"Čarobnost" tukaj je v parametru dinamično vezavo, ki demonu dnsmasq pove, naj počaka, dokler se ne prikaže v sistemu vmesnik=lan, in ne omedleti od napada ponosne osamljenosti po začetku.

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

6. HOSTAPD

In končno, čarobne konfiguracije hostapd. Ne dvomim, da nekdo bere ta članek v iskanju prav teh dragocenih vrstic.

Preden namestite hostapd, morate premagati "problem enotnosti". Vgrajeni Wi-Fi adapter wlan0 lahko preprosto spremeni svoje ime v wlan1, ko priključite dodatno USB Wi-Fi opremo. Zato bomo imena vmesnikov popravili na naslednji način: izmislili bomo edinstvena imena za (brezžične) adapterje in jih povezali z MAC naslovi.

Za vgrajeni adapter Wi-Fi, ki je še vedno wlan0:

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

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

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

[Link]
Name=wl0

Zdaj bomo prepričani, da wl0 - To je vgrajen Wi-Fi. Znova zaženemo Raspberry, da se prepričamo o tem.

Namesti:

# 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 da bi pozabili za trenutek Državni odbor za izredne razmere, spremenimo parametre, ki jih potrebujemo, in ročno preverimo funkcionalnost:

# hostapd /etc/hostapd/hostapd.conf

hostapd se bo zagnal v interaktivnem načinu in oddajal svoje stanje na konzolo. Če ni napak, se bodo odjemalci, ki podpirajo način AC, lahko povezali z dostopno točko. Če želite zaustaviti hostapd - Ctrl-C.

Vse, kar ostane, je omogočiti hostapd pri zagonu sistema. Če naredite standardno stvar (systemctl omogoči hostapd), lahko po naslednjem ponovnem zagonu dobite demona, ki se "valja v krvi" z diagnozo "vmesnika wl0 ni mogoče najti". Zaradi "vzporednega kaosa" se je hostapd zagnal hitreje, kot je jedro našlo brezžični adapter.

Internet je poln rešitev: od prisilne časovne omejitve pred zagonom demona (nekaj minut) do drugega demona, ki spremlja videz vmesnika in (ponovno) zažene hostpad. Rešitve so precej uporabne, a strašno grde. Na pomoč kličemo velikega sistemd s svojimi »cilji«, »nalogami« in »odvisnostmi«.

Kopirajte datoteko distribucijske storitve v /etc/systemd/system/hostapd.service:

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

in zmanjšajte njegovo vsebino na naslednjo obliko:

[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

Čarobnost posodobljene storitvene datoteke je v dinamičnem povezovanju hostapd z novim ciljem – vmesnikom wl0. Ko se pojavi vmesnik, se demon zažene; ko izgine, se ustavi. In vse to je na spletu – brez ponovnega zagona sistema. Ta tehnika bo še posebej uporabna pri povezovanju USB Wi-Fi adapterja z Raspberry.

Zdaj lahko:

# systemctl enable hostapd
# reboot

7. IPTABLES

“Kaj???” © Da, da! Noben sistemd. Brez novodobnih kombinacij (v obliki požarni zid), ki na koncu naredijo isto stvar.

Uporabimo staro dobro iptables, katerega storitve bodo po zagonu naložile omrežna pravila v jedro in se tiho zaustavile, ne da bi ostale rezidenčne in brez porabe virov. systemd ima eleganten IPMasquerade=, vseeno pa bomo prevajanje naslovov (NAT) in požarni zid zaupali iptables.

Namesti:

# yum install iptables-services
# systemctl enable iptables ip6tables

Raje shranim konfiguracijo iptables kot skript (primer):

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

Izvedemo zgornji skript in izgubimo možnost vzpostavitve novih žičnih SSH povezav z Raspberry. Tako je, naredili smo usmerjevalnik Wi-Fi, dostop do katerega je privzeto prepovedan "prek interneta" - zdaj samo "po zraku". Priklopimo ethernet kabel ponudnika in začnemo surfati!

8. Bonus: +2,4 GHz

Ko sem po zgoraj opisani risbi sestavil prvi usmerjevalnik Raspberry, sem v svojem gospodinjstvu odkril številne pripomočke, ki zaradi omejitev zasnove Wi-Fi sploh niso videli "maline". Prenastavljanje usmerjevalnika za delo v 802.11b/g/n je bilo nešportno, saj največja hitrost »po zraku« v tem primeru ni presegla 40 Mbit, moj najljubši internetni ponudnik pa mi ponuja 100 (po kablu).

Pravzaprav je rešitev problema že izumljena: drugi vmesnik Wi-Fi, ki deluje na frekvenci 2,4 GHz, in druga dostopna točka. Na bližnji stojnici sem kupil ne prvo, ampak drugo USB Wi-Fi "piščalko", ki mi je naletela. Prodajalca so mučila vprašanja o naboru čipov, združljivosti z jedri ARM Linux in možnosti dela v načinu AP (prvi je začel).

Konfiguriramo "piščalko" po analogiji z vgrajenim adapterjem Wi-Fi.

Najprej ga preimenujmo v 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 novega vmesnika Wi-Fi bomo zaupali ločenemu demonu hostapd, ki se bo zagnal in ustavil glede na prisotnost strogo določene "piščalke" v sistemu: 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]

Vsebina te datoteke je neposredno odvisna od modela adapterja USB Wi-Fi, zato vam banalno kopiranje / lepljenje morda ne bo uspelo.

Kopirajte datoteko distribucijske storitve v /etc/systemd/system/hostapd2.service:

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

in zmanjšajte njegovo vsebino na naslednjo obliko:

[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

Vse kar ostane je omogočiti nov primerek hostapd:

# systemctl enable hostapd2

To je vse! Povlecite "piščalko" in samo "malino", poglejte brezžična omrežja okoli sebe.

In na koncu vas želim opozoriti na kakovost USB Wi-Fi adapterja in napajalnika Raspberry. Priključena "vroča piščalka" lahko včasih povzroči "zmrzovanje malin" zaradi kratkotrajnih električnih težav.

Vir: www.habr.com

Dodaj komentar