Raspberry Pi + CentOS = Wi-Fi Hotspot (eller hindbærrouter med en rød hat)

Der er en enorm mængde information på internettet om oprettelse af Wi-Fi-adgangspunkter baseret på en Raspberry single-board pc. Som regel betyder det, at du bruger Raspbian-operativsystemet, der er hjemmehørende i Raspberry.

Da jeg er en tilhænger af RPM-baserede systemer, kunne jeg ikke gå forbi dette lille mirakel og ikke prøve mit elskede CentOS på det.

Artiklen giver instruktioner til at lave en 5GHz/AC Wi-Fi-router fra en Raspberry Pi 3 Model B+ baseret på CentOS-operativsystemet. Der vil være flere standard, men lidet kendte tricks, og som en bonus - en tegning til tilslutning af yderligere Wi-Fi-udstyr til Raspberry, så det kan fungere på samme tid i flere tilstande (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (eller hindbærrouter med en rød hat)
(blanding af frit tilgængelige billeder)

Lad os med det samme bemærke, at nogle kosmiske hastigheder ikke vil fungere. Jeg presser maks. 100 Mbps ud af min Raspberry over luften, og det dækker min internetudbyders hastighed. Hvorfor har du brug for sådan en træg AC, hvis du i teorien kan få en halv gigabit selv på N? Hvis du har stillet dig selv dette spørgsmål, så gå til butikken for at købe en rigtig router med otte eksterne antenner.

0. Hvad du skal bruge

  • Faktisk er selve "hindbærproduktet" af kaliber: Pi 3 Model B+ (for at opnå de eftertragtede 5GHz hastigheder og kanaler);
  • God microSD >= 4GB;
  • Arbejdsstation med Linux og microSD-læser/skriver;
  • Tilgængelighed af tilstrækkelige færdigheder i Linux, artiklen er for en trænet nørd;
  • Kablet netværksforbindelse (eth0) mellem Raspberry og Linux, kører DHCP-server på det lokale netværk og internetadgang fra begge enheder.

En lille kommentar til det sidste punkt. "Hvad kom først, ægget eller..." hvordan laver man en Wi-Fi-router i mangel af noget internetadgangsudstyr? Lad os lade denne underholdende øvelse ligge uden for artiklens rammer og blot antage, at Raspberry er forbundet til det lokale netværk via ledning og har adgang til internettet. I dette tilfælde har vi ikke brug for et ekstra tv og en manipulator for at konfigurere "hindbær".

1. Installer CentOS

Projektets hjemmeside

På tidspunktet for skrivning af denne artikel er den kørende version af CentOS på enheden 32-bit. Et eller andet sted på World Wide Web stødte jeg på meninger om, at ydeevnen af ​​sådanne OS'er på 64-bit ARM-arkitektur er reduceret med så meget som 20%. Jeg vil forlade dette øjeblik uden kommentarer.

På Linux, download det minimale billede med kernen "-RaspberryPI-"og skriv det til microSD:

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

Før vi begynder at bruge billedet, fjerner vi SWAP-partitionen fra det, udvider roden til hele det tilgængelige volumen og slipper af med SELinux. Algoritmen er enkel: lav en kopi af root på Linux, slet alle partitioner fra microSD undtagen den første (/boot), opret en ny root og returner dens indhold fra kopien.

Eksempel på nødvendige handlinger (alvorlig konsoludgang)

# 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

Efter at have pakket indholdet af rodpartitionen ud, er det tid til at foretage nogle ændringer i den.

Deaktiver SELinux i /mnt/etc/selinux/config:

SELINUX=disabled

Redigering /mnt/etc/fstab, der kun efterlader to indgange om partitionerne: boot (/boot, ingen ændringer) og root (vi ændrer UUID-værdien, som kan findes ud af ved at studere outputtet af blkid-kommandoen på Linux):

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

Til sidst ændrer vi kernestartparametrene: vi angiver en ny placering for rodpartitionen, deaktiverer outputtet af fejlfindingsoplysninger og forbyder (valgfrit) kernen i at tildele IPv6-adresser på netværksgrænseflader:

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

Her er indholdet /mnt/cmdline.txt til følgende form (en linje uden bindestreger):

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

Finish:

# cd
# umount /mnt
# sync

Vi omarrangerer microSD'en til "hindbær", starter den og får netværksadgang til den via ssh (root/centos).

2. Opsætning af CentOS

De første tre urokkelige bevægelser: passwd, yum-en opdatering, genstarte.

Vi udlodder netværksstyring netværk:

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

Opret en fil (sammen med mapper) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Vi genstarter "hindbær" og får igen netværksadgang til den via ssh (IP-adressen kan ændre sig). Vær opmærksom på, hvad der bruges / Etc / resolv.conf, oprettet tidligere af Network Manager. Derfor, i tilfælde af problemer med at løse, rediger dens indhold. Brug systemd-løst vi vil ikke.

Vi fjerner det "unødvendige", reparerer og fremskynder indlæsningen af ​​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

Hvem har brug for cron og som ikke fordøjer det indbyggede systemd timere, kan fastslå, hvad der mangler. /var/log- og kig igennem journalctl. Hvis du har brug for loghistorik (som standard gemmes information kun fra det øjeblik, systemet starter):

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

Deaktiver brugen af ​​IPv6 af grundlæggende tjenester (hvis påkrævet)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Tidens relevans på "hindbær" er en vigtig ting. Da der ikke er nogen hardware-mulighed til at gemme den aktuelle tilstand af uret ved genstart, er synkronisering nødvendig. En meget god og hurtig dæmon til dette er chrony - allerede installeret og starter automatisk. Du kan ændre NTP-servere til de nærmeste.

/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

For at indstille den tidszone, vi vil bruge trick. Da vores mål er at skabe en Wi-Fi-router, der fungerer ved 5GHz-frekvenser, vil vi forberede os på overraskelser på forhånd regulator:

# yum info crda
Resumé: Dæmon for overholdelse af lovgivning til 802.11 trådløst netværk

Dette onde design, også baseret på tidszonen, "forbyder" brugen (i Rusland) af 5GHz-frekvenser og kanaler med "høje" tal. Tricket er at indstille en tidszone uden at bruge navnene på kontinenter/byer, det vil sige i stedet for:

# timedatectl set-timezone Europe/Moscow

Vi trykker på:

# timedatectl set-timezone Etc/GMT-3

Og sidste hånd på systemets frisure:

# 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-tilføjelser

Alt, hvad der blev sagt ovenfor, kan betragtes som komplette instruktioner til installation af "vanilla" CentOS på Raspberry Pi. Du burde ende med en pc, der (gen)starter på mindre end 10 sekunder, bruger mindre end 15 megabyte RAM og 1.5 gigabyte microSD (faktisk mindre end 1 gigabyte på grund af en ufuldstændig /boot, men lad os være ærlige).

For at installere Wi-Fi-adgangspunkt-software på dette system, skal du en smule udvide mulighederne for standard CentOS-distributionen. Først og fremmest, lad os opgradere driveren (firmwaren) til den indbyggede Wi-Fi-adapter. På projektets hjemmeside står der:

Wifi på Raspberry 3B og 3B+

Raspberry PI 3B/3B+ firmwarefiler er ikke tilladt at blive distribueret af CentOS Project. Du kan bruge følgende artikler til at forstå problemet, hente firmwaren og konfigurere wifi.

Hvad der er forbudt for CentOS-projektet, er ikke forbudt for os til personlig brug. Vi erstatter distributions-Wi-Fi-firmwaren i CentOS med den tilsvarende fra Broadcom-udviklerne (de samme hadede binære blobs...). Dette vil især give dig mulighed for at bruge AC i adgangspunkttilstand.

Wi-Fi firmware opgraderingFind ud af enhedsmodellen og den aktuelle firmwareversion:

# 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 

Vi ser, at firmwareversionen er 7.45.18 dateret 01.03.2015/XNUMX/XNUMX, og husk følgende sæt tal: 43455 (brcmfmac43455-sdio.bin).

Download det aktuelle Raspbian-billede. Dovne mennesker kan skrive billedet til microSD og tage filerne med firmwaren derfra. Eller du kan montere rodpartitionen af ​​billedet i Linux og kopiere det, du har brug for derfra:

# 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 resulterende Wi-Fi-adapter firmwarefiler skal kopieres og erstattes med "raspberry" i mappen /usr/lib/firmware/brcm/

Vi genstarter den fremtidige router og smiler tilfreds:

# 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 

Version: 7.45.154 dateret 27.02.2018.

Og selvfølgelig 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. Netværkskonfiguration og udfordringer forude

Som vi aftalte ovenfor, er "hindbær" forbundet med "ledning" til det lokale netværk. Lad os antage, at udbyderen giver internetadgang på nøjagtig samme måde: Adressen på det offentlige netværk udstedes dynamisk af DHCP-serveren (måske med MAC-binding). I dette tilfælde, efter den endelige opsætning af hindbæret, skal du bare "tilslutte" udbyderens kabel til det, og du er færdig. Autorisation ved hjælp af systemd-netværk d - emnet for en separat artikel og diskuteres ikke her.

Raspberrys Wi-Fi-grænseflade(r) er et lokalt netværk, og den indbyggede Ethernet-adapter (eth0) er ekstern. Lad os nummerere det lokale netværk statisk, for eksempel: 192.168.0.0/24. Hindbæradresse: 192.168.0.1. En DHCP-server vil fungere på det eksterne netværk (internet).

Navngivningskonsistensproblem и berømt guatemalansk programmør - to problemer, der venter på enhver, der konfigurerer netværksgrænseflader og tjenester i systemdistributioner.

Parallelt kaos (lyrisk digression)Lennart Pottering har sammensat sit eget program systemd Meget godt. Det her systemd lancerer andre programmer så hurtigt, at de, der ikke når at komme sig efter dommerens fløjteslag, snubler og falder i starten uden selv at starte deres forhindringsbane.

Men seriøst, den aggressive parallelisering af lancerede processer i starten af ​​systemd OS er en slags "æselbro" for erfarne sekventielle LSB-specialister. Heldigvis viser det sig at være enkelt at bringe orden i dette "parallelle kaos", selvom det ikke altid er indlysende.

Vi opretter to virtuelle brogrænseflader med konstante navne: lan и wan. Vi vil "tilslutte" Wi-Fi-adapteren(e) til den første, og eth0 "hindbær" til den anden.

/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 eliminerer behovet for at tippe til kernen via sysctl for at aktivere routing.
MACA-adresse= Lad os fjerne kommentarer og ændre om nødvendigt.

Først "forbinder" vi eth0. Vi husker "ensartethedsproblemet" og bruger kun MAC-adressen på denne grænseflade, som for eksempel kan findes sådan:

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

Vi skaber /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Vi sletter den tidligere konfigurationsfil eth0, genstarter Raspberry og får netværksadgang til den (IP-adressen vil højst sandsynligt ændre sig):

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

5.DNSMASQ

For at lave Wi-Fi-adgangspunkter er der intet, der slår et sødt par dnsmasq + hostapd har ikke fundet ud af det endnu. Efter min mening.

Hvis nogen har glemt det, så...hostapd - dette er den ting, der styrer Wi-Fi-adaptere (især vil den sørge for at forbinde dem til den virtuelle lan "hindbær"), autoriserer og registrerer trådløse klienter.

dnsmasq — konfigurerer netværksstakken af ​​klienter: udsteder IP-adresser, DNS-servere, standardgateway og lignende lækkerier.

Lad os starte med dnsmasq:

# yum install dnsmasq

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

redigere det efter din smag.

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

"Magien" her ligger i parameteren bind-dynamisk, som fortæller dnsmasq-dæmonen at vente, indtil den vises på systemet interface=lan, og ikke besvime af et anfald af stolt ensomhed efter starten.

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

6. HOSTAPD

Og endelig de magiske hostapd-konfigurationer. Jeg er ikke i tvivl om, at nogen læser denne artikel på jagt efter netop disse dyrebare linjer.

Før du installerer hostapd, skal du overvinde "ensartethedsproblemet". Den indbyggede Wi-Fi-adapter wlan0 kan nemt ændre sit navn til wlan1, når der tilsluttes ekstra USB Wi-Fi-udstyr. Derfor vil vi rette grænsefladenavnene på følgende måde: Vi vil finde på unikke navne til de (trådløse) adaptere og binde dem til MAC-adresser.

For den indbyggede Wi-Fi-adapter, som stadig er wlan0:

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

Vi skaber /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Nu vil vi være sikre på det wl0 - Dette er indbygget Wi-Fi. Vi genstarter Raspberry for at sikre os dette.

Installere:

# yum install hostapd wireless-tools

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

Uden at glemme et øjeblik GKChP, ændre de parametre, vi har brug for, og kontroller manuelt for funktionalitet:

# hostapd /etc/hostapd/hostapd.conf

hostapd vil starte i interaktiv tilstand og udsende sin tilstand til konsollen. Hvis der ikke er nogen fejl, vil klienter, der understøtter AC-tilstand, kunne oprette forbindelse til adgangspunktet. For at stoppe hostapd - Ctrl-C.

Det eneste, der er tilbage, er at aktivere hostapd i systemstarten. Hvis du gør standardtingen (systemctl aktiver hostapd), så kan du efter næste genstart få en dæmon "rullende i blod" med diagnosen "interface wl0 ikke fundet". Som et resultat af "parallelt kaos" startede hostapd hurtigere, end kernen fandt den trådløse adapter.

Internettet er fuld af løsninger: fra en tvungen timeout før start af dæmonen (adskillige minutter), til en anden dæmon, der overvåger interfacets udseende og (gen)starter hostpad'en. Løsningerne er ret brugbare, men frygtelig grimme. Vi beder den store om hjælp systemd med sine "mål" og "opgaver" og "afhængigheder".

Kopier distributionstjenestefilen til /etc/systemd/system/hostapd.service:

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

og reducere dets indhold til følgende form:

[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

Magien ved den opdaterede servicefil ligger i den dynamiske binding af hostapd til det nye mål - wl0-grænsefladen. Når grænsefladen vises, starter dæmonen; når den forsvinder, stopper den. Og det hele er online - uden at genstarte systemet. Denne teknik vil være særlig nyttig, når du tilslutter en USB Wi-Fi-adapter til en hindbær.

Nu kan du:

# systemctl enable hostapd
# reboot

7. IPTABLER

"Hva???" © Ja, ja! Ingen systemd. Ingen nymodens mejetærskere (i form firewalld), som ender med at gøre det samme.

Lad os bruge den gode gamle iptables, hvis tjenester, efter start, vil indlæse netværksregler i kernen og stille og roligt lukke ned uden at forblive hjemmehørende og uden at forbruge ressourcer. systemd har en elegant IPMasquerade=, men vi vil stadig overlade adresseoversættelsen (NAT) og firewallen til iptables.

Installere:

# yum install iptables-services
# systemctl enable iptables ip6tables

Jeg foretrækker at gemme iptables-konfigurationen som et script (eksempel):

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

Vi udfører ovenstående script og mister evnen til at etablere nye kablede SSH-forbindelser med Raspberry. Det er rigtigt, vi har lavet en Wi-Fi-router, hvortil adgang "via internettet" er forbudt som standard - nu kun "over the air". Vi tilslutter udbyderens Ethernet-kabel og begynder at surfe!

8. Bonus: +2,4GHz

Da jeg samlede den første Raspberry-router ved hjælp af tegningen beskrevet ovenfor, opdagede jeg en række gadgets i min husstand, som på grund af deres Wi-Fi-designbegrænsninger slet ikke kunne se "hindbæret". At omkonfigurere routeren til at fungere i 802.11b/g/n var usportsligt, da den maksimale hastighed "over the air" i dette tilfælde ikke oversteg 40 Mbit, og min foretrukne internetudbyder tilbyder mig 100 (via kabel).

Faktisk er en løsning på problemet allerede opfundet: en anden Wi-Fi-grænseflade, der fungerer ved en frekvens på 2,4 GHz, og et andet adgangspunkt. Ved en nærliggende bod købte jeg ikke den første, men den anden USB Wi-Fi "fløjte", jeg stødte på. Sælgeren blev plaget af spørgsmål om chipsættet, kompatibilitet med ARM Linux-kerner og muligheden for at arbejde i AP-tilstand (han var den første til at starte).

Vi konfigurerer "fløjten" analogt med den indbyggede Wi-Fi-adapter.

Lad os først omdøbe den til 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

Vi overlader administrationen af ​​den nye Wi-Fi-grænseflade til en separat hostapd-dæmon, som starter og stopper afhængigt af tilstedeværelsen af ​​en strengt defineret "fløjte" i systemet: wl1.

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

Indholdet af denne fil afhænger direkte af USB Wi-Fi-adapterens model, så en banal kopi/indsæt kan svigte dig.

Kopier distributionstjenestefilen til /etc/systemd/system/hostapd2.service:

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

og reducere dets indhold til følgende form:

[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

Det eneste, der er tilbage, er at aktivere en ny forekomst af hostapd:

# systemctl enable hostapd2

Det er alt! Træk i "fløjten" og selve "hindbæret", se på de trådløse netværk omkring dig.

Og endelig vil jeg advare dig om kvaliteten af ​​USB Wi-Fi-adapteren og strømforsyningen til Raspberry. En varm fløjte kan nogle gange få hindbærene til at fryse på grund af kortvarige elektriske problemer.

Kilde: www.habr.com

Tilføj en kommentar