Raspberry Pi + CentOS = Wi-Fi Hotspot (of raspberry router mei in reade hoed)

D'r is in enoarme hoemannichte ynformaasje op it ynternet oer it meitsjen fan Wi-Fi-tagongspunten basearre op in Raspberry single-board PC. As regel betsjuttet dit it brûken fan it Raspbian-bestjoeringssysteem native to the Raspberry.

As oanhinger fan RPM-basearre systemen, koe ik dit lytse wûnder net passe en myn leafste CentOS derop net besykje.

It artikel jout ynstruksjes foar it meitsjen fan in 5GHz / AC Wi-Fi-router fan in Raspberry Pi 3 Model B+ basearre op it CentOS-bestjoeringssysteem. D'r sille ferskate standert, mar min bekende trúkjes wêze, en as bonus - in tekening foar it ferbinen fan ekstra Wi-Fi-apparatuer oan 'e Raspberry, wêrtroch it tagelyk kin operearje yn ferskate modi (2,4 + 5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (of raspberry router mei in reade hoed)
(miks fan frij beskikbere ôfbyldings)

Lit ús daliks opmerke dat guon kosmyske snelheden net wurkje. Ik squeeze maksimaal 100 Mbps út myn Raspberry oer de loft, en dit beslacht de snelheid fan myn ynternetprovider. Wêrom hawwe jo sa'n trage AC nedich, as jo yn teory in heale gigabit sels op N krije kinne? As jo ​​hawwe frege dysels dizze fraach, gean dan nei de winkel te keapjen in echte router mei acht eksterne antennes.

0. Wat jo nedich hawwe

  • Eigentlik is it "framboosprodukt" sels fan kaliber: Pi 3 Model B+ (om de begeerde 5GHz-snelheden en kanalen te berikken);
  • Goede microSD>= 4GB;
  • Wurkstasjon mei Linux en microSD lêzer / skriuwer;
  • Beskikberens fan genôch feardichheden yn Linux, it artikel is foar in trained Geek;
  • Wired netwurk (eth0) ferbining tusken Raspberry en Linux, running DHCP tsjinner op it lokale netwurk en Ynternet tagong fan beide apparaten.

In lytse opmerking oer it lêste punt. "Wat kaam earst, it aai of ..." hoe kinne jo in Wi-Fi-router meitsje by it ûntbrekken fan apparatuer foar ynternet tagong? Litte wy dizze fermaaklike oefening bûten it berik fan it artikel litte en gewoan oannimme dat de Raspberry is ferbûn mei it lokale netwurk fia draad en hat tagong ta it ynternet. Yn dit gefal sille wy gjin ekstra tv en in manipulator nedich hawwe om de "raspberry" yn te stellen.

1. Ynstallearje CentOS

Projekt thússide

Op it momint fan it skriuwen fan dit artikel is de rinnende ferzje fan CentOS op it apparaat 32-bit. Earne op it World Wide Web kaam ik mieningen tsjin dat de prestaasjes fan sokke OS's op 64-bit ARM-arsjitektuer mei safolle as 20% fermindere wurde. Ik sil ferlitte dit momint sûnder kommentaar.

Download op Linux de minimale ôfbylding mei de kernel "-RaspberryPI-"en skriuw it nei microSD:

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

Foardat jo de ôfbylding begjinne te brûken, sille wy de SWAP-partysje derút fuortsmite, de root útwreidzje nei it heule beskikbere folume en SELinux kwytreitsje. It algoritme is ienfâldich: meitsje in kopy fan 'e root op Linux, wiskje alle partysjes fan' e microSD útsein de earste (/boot), meitsje in nije root en bring de ynhâld werom fan 'e kopy.

Foarbyld fan fereaske aksjes (swiere konsole-útfier)

# 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

Nei it útpakke fan 'e ynhâld fan' e root-partysje, is it tiid om wat feroaringen oan te meitsjen.

Skeakelje SELinux yn /mnt/etc/selinux/config:

SELINUX=disabled

Bewurkje /mnt/etc/fstab, wêryn mar twa yngongen oer de partysjes litte: boot (/boot, gjin feroaringen) en root (wy feroarje de UUID-wearde, dy't fûn wurde kin troch de útfier fan it kommando blkid op Linux te bestudearjen):

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

Uteinlik feroarje wy de kernel-bootparameters: wy spesifisearje in nije lokaasje foar de root-partysje, skeakelje de útfier fan debuggenynformaasje út en (opsjoneel) ferbiede de kernel om IPv6-adressen op netwurkynterfaces ta te jaan:

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

Hjir is de ynhâld /mnt/cmdline.txt nei de folgjende foarm (ien rigel sûnder koppeltekens):

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

Done:

# cd
# umount /mnt
# sync

Wy feroarje de microSD yn 'e "raspberry", lansearje it en krije netwurk tagong ta it fia ssh (root / centos).

2. CentOS ynstelle

De earste trije unshakable bewegingen: passwd, yum -y update, lit herstarten.

Wy jouwe netwurkbehear fuort netwurkd:

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

Meitsje in triem (tegearre mei mappen) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Wy herstarte de "raspberry" en krije opnij netwurk tagong ta it fia ssh (it IP-adres kin feroarje). Jou omtinken oan wat brûkt wurdt /etc/resolv.conf, earder makke troch Network Manager. Dêrom, yn gefal fan problemen mei oplossing, bewurkje de ynhâld. Brûke systemd-oplost Wy sille net.

Wy ferwiderje de "ûnnedige", reparearje en fersnelle it laden fan it 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

Wa moat Cron en wa't it ynboude net fertart systemd timers, kin fêststelle wat der mist. / var / log- en sjoch troch journalctl. As jo ​​loghistoarje nedich binne (standert wurdt ynformaasje allinich opslein fanôf it momint dat it systeem begjint):

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

Skeakelje it gebrûk fan IPv6 út troch basistsjinsten (as nedich)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

De relevânsje fan tiid op 'e "raspberry" is in wichtich ding. Sûnt út 'e doaze d'r gjin hardware-mooglikheid is om de aktuele steat fan' e klok te bewarjen by it opnij opstarten, is syngronisaasje nedich. In hiel goede en snelle daemon foar dit is chrony - al ynstallearre en begjint automatysk. Jo kinne NTP-tsjinners feroarje nei de tichtste.

/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

Om de tiidsône yn te stellen sille wy brûke trick. Om't ús doel is om in Wi-Fi-router te meitsjen dy't wurket op 5GHz-frekwinsjes, sille wy ús foarôf tariede op ferrassingen regulator:

# yum info crda
Gearfetting: Daemon foar neilibjen fan regeljouwing foar 802.11 draadloze netwurken

Dit kweade ûntwerp, ek basearre op 'e tiidsône, "ferbiedt" it gebrûk (yn Ruslân) fan 5GHz-frekwinsjes en kanalen mei "hege" nûmers. De trúk is om in tiidsône yn te stellen sûnder de nammen fan kontininten/stêden te brûken, dat is ynstee fan:

# timedatectl set-timezone Europe/Moscow

Wy drukke op:

# timedatectl set-timezone Etc/GMT-3

En de lêste touch oan it kapsel fan it systeem:

# 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 Add-ons

Alles dat hjirboppe waard sein kin wurde beskôge as folsleine ynstruksjes foar it ynstallearjen fan "vanilla" CentOS op 'e Raspberry Pi. Jo moatte einigje mei in PC dy't (opnij) opstart yn minder as 10 sekonden, brûkt minder as 15 Megabyte RAM en 1.5 Gigabyte fan microSD (eins minder as 1 Gigabyte fanwege in ûnfolsleine /boot, mar litte wy earlik wêze).

Om Wi-Fi-tagongspuntsoftware op dit systeem te ynstallearjen, moatte jo de mooglikheden fan 'e standert CentOS-distribúsje wat útwreidzje. Litte wy earst de bestjoerder (firmware) fan 'e ynboude Wi-Fi-adapter opwurdearje. De thússide fan it projekt seit:

Wifi op de Raspberry 3B en 3B+

De Raspberry PI 3B/3B+ firmware-bestannen binne net tastien te fersprieden troch it CentOS Project. Jo kinne de folgjende artikels brûke om it probleem te begripen, de firmware te krijen en de wifi yn te stellen.

Wat is ferbean foar it CentOS-projekt is net ferbean foar ús foar persoanlik gebrûk. Wy ferfange de distribúsje Wi-Fi-firmware yn CentOS mei de oerienkommende fan 'e Broadcom-ûntwikkelders (dy deselde hate binêre blobs ...). Dit, benammen, lit jo AC brûke yn tagongspuntmodus.

Wi-Fi firmware upgradeFyn it apparaatmodel en aktuele firmwareferzje út:

# 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 

Wy sjogge dat de firmware ferzje is 7.45.18 datearre 01.03.2015/XNUMX/XNUMX, en ûnthâlde de folgjende set fan nûmers: 43455 (brcmfmac43455-sdio.bin).

Download de hjoeddeistige Raspbian-ôfbylding. Lazy minsken kinne skriuwe de ôfbylding nei microSD en nimme de triemmen mei de firmware fan dêr. Of jo kinne de root-partysje fan 'e ôfbylding yn Linux montearje en kopiearje wat jo nedich binne:

# 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

De resultearjende firmware-bestannen fan 'e Wi-Fi-adapter moatte wurde kopieare en ferfongen troch "raspberry" yn 'e map /usr/lib/firmware/brcm/

Wy starte de takomstige router opnij en glimkje tefreden:

# 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 

Ferzje: 7.45.154 datearre 27.02.2018/XNUMX/XNUMX.

En fansels 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. Netwurk konfiguraasje en útdagings foarút

As wy hjirboppe ôfpraat hawwe, is de "raspberry" ferbûn troch "wire" oan it lokale netwurk. Lit ús der fan út dat de provider jout ynternet tagong op krekt deselde wize: it adres op it iepenbiere netwurk wurdt útjûn dynamysk troch de DHCP tsjinner (miskien mei MAC bining). Yn dit gefal, nei de definitive opset fan 'e raspberry, moatte jo gewoan de kabel fan' e provider yn 'e plug sette en jo binne dien. Autorisaasje mei help fan systemd-netwurk - it ûnderwerp fan in apart artikel en wurdt hjir net besprutsen.

Raspberry's Wi-Fi-ynterface (s) is in lokaal netwurk, en de ynboude Ethernet-adapter (eth0) is ekstern. Litte wy it lokale netwurk statysk nûmerje, bygelyks: 192.168.0.0/24. Raspberry adres: 192.168.0.1. In DHCP-tsjinner sil wurkje op it eksterne netwurk (ynternet).

Namme konsistinsjeprobleem и ferneamde Guatemalan programmeur - twa problemen dy't wachtsje op elkenien dy't netwurkynterfaces en tsjinsten yn systemd distribúsjes konfigurearret.

Parallelle chaos (lyryske digression)Lennart Pottering hat in eigen programma gearstald systemd Heul goed. Dit systemd lanseart oare programma's sa fluch dat se, net hawwende tiid om te herstellen fan 'e slach fan' e skiedsrjochter, stroffelje en falle by it begjin sûnder sels har obstakelbaan te begjinnen.

Mar serieus, de agressive parallelisaasje fan lansearre prosessen oan it begjin fan it systemd OS is in soarte fan "ezelbrêge" foar erfarne opfolgjende LSB-spesjalisten. Gelokkich blykt it bringen fan oarder yn dizze "parallelle gaos" ienfâldich te wêzen, hoewol net altyd fanselssprekkend.

Wy meitsje twa firtuele brêge-ynterfaces mei konstante nammen: lan и wan. Wy sille de Wi-Fi-adapter(s) "ferbine" mei de earste, en de eth0 "raspberry" mei de twadde.

/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=ja elimineert de needsaak om te hingjen nei de kernel fia sysctl om routing yn te skeakeljen.
MACAadres= Litte wy kommentaar jaan en feroarje as it nedich is.

Earst wy "ferbine" eth0. Wy ûnthâlde it "uniformiteitsprobleem" en brûke allinich it MAC-adres fan dizze ynterface, dat kin wurde fûn, bygelyks, sa:

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

Wy meitsje /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Wy wiskje it foarige konfiguraasjetriem eth0, start de Raspberry opnij en krije tagong ta it netwurk (it IP-adres sil nei alle gedachten feroarje):

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

5.DNSMASQ

Foar it meitsjen fan Wi-Fi tagongspunten, neat slacht in swiete pear dnsmaq + hostapd haw it noch net útfûn. Nei myn miening.

As immen it fergetten hat, dan...hostapd - dit is it ding dat Wi-Fi-adapters kontrolearret (yn it bysûnder sil it soargje foar it ferbinen mei de firtuele lan "frambozen"), autorisearret en registrearret draadloze kliïnten.

dnsmaq - konfigurearret de netwurkstapel fan kliïnten: jout IP-adressen, DNS-tsjinners, standert gateway en ferlykbere wille út.

Litte wy begjinne mei dnsmasq:

# yum install dnsmasq

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

bewurkje it nei jo smaak.

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

De "magy" hjir leit yn 'e parameter binde-dynamyske, dy't de dnsmasq-daemon fertelt om te wachtsjen oant it op it systeem ferskynt ynterface=lan, en net flau fan in fit fan grutske iensumens nei it begjin.

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

6. HOSTAPD

En as lêste, de magyske hostapd-konfiguraasjes. Ik haw gjin twifel dat immen dit artikel lêst op syk nei krekt dizze dierbere rigels.

Foardat jo hostapd ynstallearje, moatte jo it "uniformiteitsprobleem" oerwinne. De ynboude Wi-Fi-adapter wlan0 kin syn namme maklik feroarje yn wlan1 by it ferbinen fan ekstra USB Wi-Fi-apparatuer. Dêrom sille wy de ynterface-nammen op 'e folgjende manier reparearje: wy komme mei unike nammen foar de (draadloze) adapters en bine se oan MAC-adressen.

Foar de ynboude Wi-Fi-adapter, dy't noch wlan0 is:

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

Wy meitsje /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

No sille wy der wis fan wêze wl0 - Dit is ynboude Wi-Fi. Wy rebootje de Raspberry om der wis fan te wêzen.

Ynstallearje:

# yum install hostapd wireless-tools

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

Sûnder in momint te ferjitten State Emergency Komitee, feroarje de parameters dy't wy nedich binne en kontrolearje manuell op funksjonaliteit:

# hostapd /etc/hostapd/hostapd.conf

hostapd sil begjinne yn ynteraktive modus, en syn steat útstjoere nei de konsole. As d'r gjin flaters binne, dan kinne kliïnten dy't AC-modus stypje kinne ferbine mei it tagongspunt. Om hostapd te stopjen - Ctrl-C.

Alles wat oerbliuwt is om hostapd yn te skeakeljen yn it opstarten fan it systeem. As jo ​​​​it standert ding dogge (systemctl ynskeakelje hostapd), dan kinne jo nei de folgjende herstart in demon krije "yn bloed rôlje" mei de diagnoaze "ynterface wl0 net fûn". As gefolch fan "parallelle gaos" begon hostapd rapper dan de kernel de draadloze adapter fûn.

It ynternet is fol mei remedies: fan in twongen time-out foar it starten fan de daemon (ferskate minuten), nei in oare daemon dy't it uterlik fan 'e ynterface kontrolearret en it hostpad (opnij) start. De oplossingen binne frij wurkber, mar ferskriklik ûnsjoch. Wy roppe de grutte om help systemd mei syn "doelen" en "taken" en "ôfhinklikens".

Kopiearje it distribúsjetsjinstbestân nei /etc/systemd/system/hostapd.service:

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

en ferminderje de ynhâld nei de folgjende foarm:

[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

De magy fan it bywurke tsjinstbestân leit yn 'e dynamyske bining fan hostapd oan it nije doel - de wl0-ynterface. As de ynterface ferskynt, begjint de daemon; as it ferdwynt, stopt it. En dit is allegear online - sûnder it systeem opnij te starten. Dizze technyk sil benammen nuttich wêze as jo in USB Wi-Fi-adapter ferbine mei in Raspberry.

No kinsto:

# systemctl enable hostapd
# reboot

7. IPTABELS

"Wa???" © Ja, jo! Gjin systemd. Gjin newfangled kombinearret (yn 'e foarm firewalld), dy't úteinlik itselde ding dogge.

Lit ús de goede âlde brûke iptables, waans tsjinsten, nei it starten, netwurkregels yn 'e kernel sille laden en rêstich ôfslute sûnder bewenner te bliuwen en sûnder boarnen te konsumearjen. systemd hat in elegante IPMasquerade=, mar wy sille de adresoersetting (NAT) en firewall noch tafertrouwe oan iptables.

Ynstallearje:

# yum install iptables-services
# systemctl enable iptables ip6tables

Ik leaver de iptables-konfiguraasje op te slaan as in skript (foarbyld):

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

Wy fiere it boppesteande skript út en ferlieze de mooglikheid om nije bedrade SSH-ferbiningen te meitsjen mei de Raspberry. Dat is krekt, wy hawwe in Wi-Fi-router makke, tagong dêr't "fia it ynternet" standert ferbean is - no allinich "oer de loft". Wy ferbine de Ethernet-kabel fan 'e provider en begjinne te surfen!

8. bonus: +2,4GHz

Doe't ik de earste Raspberry-router gearstalde mei de hjirboppe beskreaune tekening, ûntduts ik in oantal gadgets yn myn húshâlding dy't, fanwegen har Wi-Fi-ûntwerpbeperkingen, de "raspberry" hielendal net koene sjen. De router opnij konfigurearje om te wurkjen yn 802.11b/g/n wie unsporting, om't de maksimale snelheid "oer de loft" yn dit gefal net mear as 40 Mbit wie, en myn favorite ynternetprovider biedt my 100 (fia kabel).

Yn feite is in oplossing foar it probleem al útfûn: in twadde Wi-Fi-ynterface dy't wurket op in frekwinsje fan 2,4 GHz, en in twadde tagongspunt. By in tichtby stall kocht ik net de earste, mar de twadde USB Wi-Fi "fluit" kaam ik tsjin. De ferkeaper waard pleage troch fragen oer de chipset, kompatibiliteit mei ARM Linux-kernels en de mooglikheid om te wurkjen yn AP-modus (hy wie de earste om te begjinnen).

Wy konfigurearje de "fluit" yn analogy mei de ynboude Wi-Fi-adapter.

Litte wy it earst omneame nei 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

Wy sille it behear fan 'e nije Wi-Fi-ynterface tafertrouwe oan in aparte hostapd-daemon, dy't sil begjinne en stopje ôfhinklik fan de oanwêzigens fan in strikt definieare "fluit" yn it systeem: wl1.

Konfiguraasjetriem /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]

De ynhâld fan dit bestân is direkt ôfhinklik fan it model fan 'e USB Wi-Fi-adapter, dus in banale kopiearje / plakke kin jo mislearje.

Kopiearje it distribúsjetsjinstbestân nei /etc/systemd/system/hostapd2.service:

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

en ferminderje de ynhâld nei de folgjende foarm:

[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

Alles wat oerbliuwt is in nij eksimplaar fan hostapd ynskeakelje:

# systemctl enable hostapd2

Da's alles! Lûk de "fluit" en de "raspberry" sels, sjoch nei de draadloze netwurken om jo hinne.

En as lêste wol ik jo warskôgje oer de kwaliteit fan 'e USB Wi-Fi-adapter en stroomfoarsjenning fan' e Raspberry. Ferbûn "hot whistle" kin soms "framboos befriezen" feroarsaakje fanwege koarte termyn elektryske problemen.

Boarne: www.habr.com

Add a comment