Raspberry Pi + CentOS = Wi-Fi Hotspot (aŭ frambo-enkursigilo kun ruĝa ĉapelo)

Estas grandega kvanto da informoj en la Interreto pri kreado de Wi-Fi-alirpunktoj bazitaj sur Raspberry unu-estrara komputilo. Kiel regulo, ĉi tio signifas uzi la Raspbian operaciumon indiĝenan al la Raspberry.

Estante adepto de RPM-bazitaj sistemoj, mi ne povis preterpasi ĉi tiun eta miraklon kaj ne provi mian amatan CentOS pri ĝi.

La artikolo provizas instrukciojn por fari 5GHz/AC Wi-Fi-enkursigilon de Raspberry Pi 3 Model B+ bazita sur la mastruma sistemo CentOS. Estos pluraj normaj sed malmulte konataj lertaĵoj, kaj kiel gratifiko - desegnaĵo por konekti aldonan Wifi-ekipaĵon al Raspberry, permesante al ĝi funkcii samtempe en pluraj reĝimoj (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (aŭ frambo-enkursigilo kun ruĝa ĉapelo)
(miksaĵo de libere haveblaj bildoj)

Ni tuj rimarku, ke iuj kosmaj rapidoj ne funkcios. Mi elpremas maksimume 100 Mbps el mia Raspberry super la aero, kaj ĉi tio kovras la rapidecon de mia interreta provizanto. Kial vi bezonas tiel malviglan AC, se teorie oni povas ricevi duonan gigabiton eĉ ĉe N? Se vi faris al vi ĉi tiun demandon, tiam iru al la vendejo por aĉeti veran enkursigilon kun ok eksteraj antenoj.

0. Kion vi bezonos

  • Efektive, la "framboprodukto" mem estas de kalibro: Pi 3 Model B+ (por atingi la aviditajn 5GHz-rapidecojn kaj kanalojn);
  • Bona microSD >= 4GB;
  • Laborstacio kun Linukso kaj microSD leganto/verkisto;
  • Havebleco de sufiĉaj kapabloj en Linukso, la artikolo estas por trejnita Geek;
  • Kablita reto (eth0) konektebleco inter Raspberry kaj Linukso, funkcianta DHCP-servilon sur la loka reto kaj interreta aliro de ambaŭ aparatoj.

Eta komento pri la lasta punkto. "Kiu unue venis, la ovo aŭ..." kiel fari Wi-Fi-enkursigilon sen iu ajn interreta alira ekipaĵo? Ni lasu ĉi tiun amuzan ekzercon ekster la amplekso de la artikolo kaj simple supozu, ke la Frambo estas konektita al la loka reto per drato kaj havas aliron al la Interreto. En ĉi tiu kazo, ni ne bezonos plian televidilon kaj manipulanton por agordi la "frambon".

1. Instalu CentOS

Hejmpaĝo de la projekto

En la momento de verkado de ĉi tiu artikolo, la funkcianta versio de CentOS sur la aparato estas 32-bita. Ie en la Tutmonda Reto mi renkontis opiniojn, ke la agado de tiaj OS-oj sur 64-bita ARM-arkitekturo estas reduktita eĉ je 20%. Mi lasos ĉi tiun momenton sen komento.

En Linukso, elŝutu la minimuman bildon kun la kerno "-RaspberryPI-"kaj skribu ĝin al microSD:

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

Antaŭ ol komenci uzi la bildon, ni forigos la SWAP-diskon de ĝi, vastigos la radikon al la tuta disponebla volumeno kaj forigos SELinux. La algoritmo estas simpla: faru kopion de la radiko en Linukso, forigu ĉiujn subdiskojn de la mikroSD krom la unua (/boot), kreu novan radikon kaj redonu ĝian enhavon el la kopio.

Ekzemplo de postulataj agoj (severa konzola eligo)

# 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

Post malpakado de la enhavo de la radika sekcio, estas tempo fari kelkajn ŝanĝojn al ĝi.

Malebligu SELinux en /mnt/etc/selinux/config:

SELINUX=disabled

Redaktado /mnt/etc/fstab, lasante en ĝi nur du enskribojn pri la subdiskoj: boot (/boot, neniu ŝanĝoj) kaj root (ni ŝanĝas la UUID-valoron, kiun oni povas ekscii studante la eligon de la blkid komando en Linukso):

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

Fine, ni ŝanĝas la kernaj lanĉaj parametroj: ni specifas novan lokon por la radika subdisko, malŝaltas la eligon de sencimigaj informoj kaj (laŭvole) malpermesas al la kerno atribui IPv6-adresojn sur retaj interfacoj:

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

Jen la enhavo /mnt/cmdline.txt al la sekva formo (unu linio sen streketoj):

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

Farita:

# cd
# umount /mnt
# sync

Ni rearanĝas la microSD en la "frambon", lanĉas ĝin kaj ricevas retan aliron al ĝi per ssh (radiko/centos).

2. Agordi CentOS

La unuaj tri neskueblaj movadoj: pasvorto, yum-kaj ĝisdatigo, reboot.

Ni fordonas retan administradon enretaj:

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

Krei dosieron (kune kun dosierujoj) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Ni rekomencas la "frambon" kaj denove ricevas retan aliron al ĝi per ssh (la IP-adreso povas ŝanĝiĝi). Atentu tion, kio estas uzata /etc/resolv.conf, kreita pli frue fare de Network Manager. Tial, en kazo de problemoj kun solvado, redaktu ĝian enhavon. Uzu sistemo-solvita ni ne faros.

Ni forigas la "nenecesan", riparas kaj akcelas la ŝarĝon de la 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

Kiu bezonas cron kaj kiu ne digestas la enkonstruitan sistemaj tempigiloj, povas establi kio mankas. / var / log— kaj trarigardu journalctl. Se vi bezonas protokolhistorion (defaŭlte, informoj estas konservitaj nur de la momento, kiam la sistemo komenciĝas):

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

Malebligu la uzon de IPv6 per bazaj servoj (se necese)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

La graveco de tempo sur la "frambo" estas grava afero. Ĉar el la skatolo ne ekzistas aparataro kapablo konservi la nunan staton de la horloĝo post rekomenco, sinkronigo estas necesa. Tre bona kaj rapida demono por ĉi tio estas kroniko - jam instalita kaj komenciĝas aŭtomate. Vi povas ŝanĝi NTP-servilojn al la plej proksimaj.

/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

Por agordi la horzonon ni uzos ruzo. Ĉar nia celo estas krei Wifi-enkursigilon funkciantan je 5GHz-frekvencoj, ni prepariĝos por surprizoj anticipe. reguligisto:

# yum info crda
Resumo: Reguliga plenuma demono por 802.11 sendrata retoj

Ĉi tiu malbona dezajno, ankaŭ bazita sur la horzono, "malpermesas" la uzon (en Rusio) de 5GHz-frekvencoj kaj kanaloj kun "altaj" nombroj. La lertaĵo estas agordi horzonon sen uzi la nomojn de kontinentoj/urboj, tio estas, anstataŭ:

# timedatectl set-timezone Europe/Moscow

Ni premas:

# timedatectl set-timezone Etc/GMT-3

Kaj la finaj tuŝoj al la kombitaĵo de la sistemo:

# 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 Aldonaĵoj

Ĉio, kio estis dirita supre, povas esti konsiderata kompletaj instrukcioj por instali "vanilon" CentOS sur la Raspberry Pi. Vi devus fini kun komputilo, kiu (re)ŝargas en malpli ol 10 sekundoj, uzas malpli ol 15 Megabajtojn da RAM kaj 1.5 Gigabajtojn da microSD (fakte malpli ol 1 Gigabajton pro nekompleta /boot, sed ni estu honestaj).

Por instali programon pri WiFi-alirpunkto en ĉi tiu sistemo, vi devos iomete pligrandigi la kapablojn de la norma distribuo CentOS. Antaŭ ĉio, ni ĝisdatigu la ŝoforon (firmware) de la enkonstruita WiFi-adaptilo. La hejmpaĝo de la projekto diras:

Wifi sur la Raspberry 3B kaj 3B+

La firmware-dosieroj de Raspberry PI 3B/3B+ ne rajtas esti distribuitaj de la Projekto CentOS. Vi povas uzi la sekvajn artikolojn por kompreni la problemon, akiri la firmware kaj agordi la wifi.

Kio estas malpermesita por la projekto CentOS, ne estas malpermesita por ni por persona uzo. Ni anstataŭigas la distribuan Wi-Fi-firmvaro en CentOS per la responda de la Broadcom-programistoj (tiuj samaj malamataj binaraj blobs...). Ĉi tio, precipe, permesos al vi uzi AC en alirpunktoreĝimo.

Ĝisdatigo de firmware de Wi-FiEksciu la modelon de la aparato kaj la nunan firmware-version:

# 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 

Ni vidas, ke la firmware-versio estas 7.45.18 datita 01.03.2015/XNUMX/XNUMX, kaj memoras la sekvan aron da nombroj: 43455 (brcmfmac43455-sdio.bin).

Elŝutu la nunan Raspbian-bildon. Maldiligentaj homoj povas skribi la bildon al microSD kaj preni la dosierojn kun la firmvaro de tie. Aŭ vi povas munti la radikan sekcion de la bildo en Linukso kaj kopii tion, kion vi bezonas de tie:

# 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

La rezultaj dosieroj de firmware de Wi-Fi-adaptilo devas esti kopiitaj kaj anstataŭigitaj per "frambo" en la dosierujon /usr/lib/firmware/brcm/

Ni rekomencas la estontan enkursigilon kaj ridetas kontente:

# 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 

Versio: 7.45.154 de la 27.02.2018/XNUMX/XNUMX.

Kaj kompreneble 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. Reta agordo kaj defioj antaŭen

Kiel ni konsentis supre, la "frambo" estas konektita per "drato" al la loka reto. Ni supozu, ke la provizanto provizas interretan aliron precize sammaniere: la adreso en la publika reto estas elsendita dinamike de la DHCP-servilo (eble kun MAC-ligado). En ĉi tiu kazo, post la fina aranĝo de la frambo, vi nur bezonas "konekti" la kablon de la provizanto en ĝin kaj vi finis. Rajtigo uzante systemd-networkd - la temo de aparta artikolo kaj ne estas diskutata ĉi tie.

La Vifi-interfaco(j) de Raspberry estas loka reto, kaj la enkonstruita Ethernet-adaptilo (eth0) estas ekstera. Ni numeru la lokan reton statike, ekzemple: 192.168.0.0/24. Frambo adreso: 192.168.0.1. DHCP-servilo funkcios en la ekstera reto (Interreto).

Problemo de Konsistenco de Nomado и fama gvatemala programisto - du problemoj, kiuj atendas ĉiun, kiu agordas retajn interfacojn kaj servojn en sistemaj distribuoj.

Paralela kaoso (lirika digreso)Lennart Pottering kompilis sian propran programon sistemo Tre bona. Ĉi tio sistemo lanĉas aliajn programojn tiel rapide, ke ili, ne havante tempon por resaniĝi post la fajfilo de la arbitraciisto, stumblas kaj falas ĉe la komenco sen eĉ komenci sian obstaklokurejon.

Sed serioze, la agresema paraleligo de lanĉitaj procezoj ĉe la komenco de la systemd OS estas speco de "azena ponto" por spertaj sinsekvaj LSB-specialistoj. Feliĉe, alporti ordon al ĉi tiu "paralela kaoso" montriĝas simpla, kvankam ne ĉiam evidenta.

Ni kreas du virtualajn pontinterfacojn kun konstantaj nomoj: lan и wan. Ni "konektos" la Wi-Fi-adaptilon(j)n al la unua, kaj la eth0 "frambo" al la dua.

/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=jes forigas la bezonon sugesti al la kerno per sysctl por ebligi vojigon.
MACAdreso= Ni malkomento kaj ŝanĝu se necese.

Unue ni "konektas" eth0. Ni memoras la "unuformecan problemon" kaj uzas nur la MAC-adreson de ĉi tiu interfaco, kiu povas esti trovita, ekzemple, jene:

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

Ni kreas /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Ni forigas la antaŭan agordan dosieron eth0, rekomencas la Raspberry kaj ricevas retan aliron al ĝi (la IP-adreso plej verŝajne ŝanĝos):

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

5.DNSMASQ

Por krei Wifi-alirpunktojn, nenio superas dolĉan paron da dnsmasq + hostapd ankoraŭ ne eltrovis ĝin. Miaopinie.

Se iu forgesus, tiam...hostapd - ĉi tio estas la afero, kiu kontrolas Wi-Fi-adaptilojn (precipe, ĝi zorgos pri konekti ilin al la virtuala lan "framboj"), rajtigas kaj registras sendratajn klientojn.

dnsmasq — agordas la retan stakon de klientoj: eldonas IP-adresojn, DNS-servilojn, defaŭltan enirejon kaj similajn ĝojojn.

Ni komencu per dnsmasq:

# yum install dnsmasq

Ŝablona /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

redakti ĝin laŭ via plaĉo.

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

La "magio" ĉi tie kuŝas en la parametro bind-dinamika, kiu diras al la dnsmasq-demono atendi ĝis ĝi aperos en la sistemo interface=lan, kaj ne svenas pro atako de fiera soleco post la komenco.

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

6. HOSTAPD

Kaj finfine, la magiaj hostapd-agordoj. Mi ne dubas, ke iu legas ĉi tiun artikolon serĉante ĝuste ĉi tiujn trezorajn liniojn.

Antaŭ ol instali hostapd, vi devas venki la "unuformecproblemon". La enkonstruita Wi-Fi-adaptilo wlan0 povas facile ŝanĝi sian nomon al wlan1 kiam li konektas aldonan USB-Wi-Fian ekipaĵon. Tial ni riparos la interfacajn nomojn jene: ni elpensos unikajn nomojn por la (sendrataj) adaptiloj kaj ligos ilin al MAC-adresoj.

Por la enkonstruita WiFi-adaptilo, kiu ankoraŭ estas wlan0:

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

Ni kreas /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Nun ni estos certaj tion wl0 - Ĉi tio estas enkonstruita Wi-Fi. Ni rekomencas la Raspberry por certigi ĉi tion.

Instali:

# yum install hostapd wireless-tools

Agorda dosiero /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

Sen forgesi por momento Ŝtata Krizkomisiono, ŝanĝu la parametrojn, kiujn ni bezonas kaj permane kontrolu la funkciojn:

# hostapd /etc/hostapd/hostapd.conf

hostapd komenciĝos en interaga reĝimo, elsendante sian staton al la konzolo. Se ne estas eraroj, tiam klientoj, kiuj subtenas AC-reĝimon, povos konektiĝi al la alirpunkto. Por haltigi hostapd - Ctrl-C.

Restas nur ebligi hostapd en la starto de la sistemo. Se vi faras la norman aferon (systemctl enable hostapd), tiam post la sekva rekomenco vi povas ricevi demonon "ruliĝantan en sango" kun la diagnozo "interfaco wl0 ne trovita". Kiel rezulto de "paralela kaoso", hostapd ekis pli rapide ol la kerno trovis la sendratan adaptilon.

La Interreto estas plena de rimedoj: de malvola tempo-tempo antaŭ komenci la demonon (kelkaj minutoj), ĝis alia demono, kiu kontrolas la aspekton de la interfaco kaj (re)starigas la hostpad. La solvoj estas sufiĉe realigeblaj, sed terure malbelaj. Ni vokas la grandan por helpo sistemo kun ĝiaj "celoj" kaj "taskoj" kaj "dependecoj".

Kopiu la dissendoservodosieron al /etc/systemd/system/hostapd.service:

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

kaj redukti ĝian enhavon al la sekva formo:

[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

La magio de la ĝisdatigita servodosiero kuŝas en la dinamika ligado de hostapd al la nova celo - la wl0-interfaco. Kiam la interfaco aperas, la demono komenciĝas; kiam ĝi malaperas, ĝi ĉesas. Kaj ĉi tio estas enreta - sen rekomenci la sistemon. Ĉi tiu tekniko estos speciale utila kiam vi konektas USB-Wi-Fi-adaptilon al Raspberry.

Nun vi povas:

# systemctl enable hostapd
# reboot

7. IPTABLOJ

"Kio???" © Jes, jes! Neniu sistemo. Neniuj novmodaj kombinaĵoj (en la formo fajroŝirmilo), kiuj finas farante la samon.

Ni uzu la bonan malnovan iptables, kies servoj, post komenciĝo, ŝarĝos retajn regulojn en la kernon kaj trankvile malŝaltos sen resti loĝanto kaj sen konsumi rimedojn. systemd havas eleganta IPMasquerade=, sed ni tamen konfidos la adrestradukon (NAT) kaj fajroŝirmilon al iptables.

Instali:

# yum install iptables-services
# systemctl enable iptables ip6tables

Mi preferas stoki la iptables-agordon kiel skripton (ekzemplo):

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

Ni plenumas la ĉi-supran skripton kaj perdas la kapablon establi novajn kabligitajn SSH-konektojn kun la Frambo. Ĝuste, ni faris Wi-Fi-enkursigilon, al kiu aliro "per Interreto" estas malpermesita defaŭlte - nun nur "super la aero". Ni konektas la Ethernet-kablon de la provizanto kaj komencas navigi!

8. Gratifiko: +2,4GHz

Kiam mi kunvenis la unuan Raspberry-enkursigilon uzante la supre priskribitan desegnon, mi malkovris kelkajn aparatojn en mia hejmo, kiuj, pro siaj Wifi-dezajnaj limigoj, tute ne povis vidi la "frambon". Reagordi la enkursigilon por labori en 802.11b/g/n estis malsporta, ĉar la maksimuma rapido "super la aero" ĉi-kaze ne superis 40 Mbit, kaj mia plej ŝatata retprovizanto ofertas al mi 100 (per kablo).

Fakte, solvo de la problemo jam estis elpensita: dua Wi-Fi-interfaco funkcianta je ofteco de 2,4 GHz, kaj dua alirpunkto. Ĉe proksima budo mi aĉetis ne la unuan, sed la duan USB Wi-Fi "fajfilo" mi renkontis. La vendisto estis turmentita de demandoj pri la pecetaro, kongruo kun ARM Linukso-kernoj kaj la ebleco labori en AP-reĝimo (li estis la unua komenci).

Ni agordas la "fajfilon" analoge kun la enkonstruita WiFi-adaptilo.

Unue, ni renomu ĝin al 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

Ni konfidos la administradon de la nova WiFi-interfaco al aparta hostapd-demono, kiu komenciĝos kaj ĉesos depende de la ĉeesto de strikte difinita "fajfilo" en la sistemo: wl1.

Agorda dosiero /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]

La enhavo de ĉi tiu dosiero rekte dependas de la modelo de la USB Wi-Fi-adaptilo, do banala kopio/gluo eble malsukcesas vin.

Kopiu la dissendoservodosieron al /etc/systemd/system/hostapd2.service:

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

kaj redukti ĝian enhavon al la sekva formo:

[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

Restas nur ebligi novan ekzemplon de hostapd:

# systemctl enable hostapd2

Tio estas ĉio! Tiru la "fajfilon" kaj la "frambon" mem, rigardu la sendratajn retojn ĉirkaŭ vi.

Kaj finfine, mi volas averti vin pri la kvalito de la USB Wi-Fi-adaptilo kaj nutrado de la Raspberry. Konektita "varma fajfilo" foje povas kaŭzi "frambofrostigo" pro mallongperspektivaj elektraj problemoj.

fonto: www.habr.com

Aldoni komenton