Det finns en enorm mĂ€ngd information pĂ„ Internet om hur man skapar Wi-Fi-accesspunkter med en Raspberry Pi enkortsdator. Oftast förutsĂ€tter man anvĂ€ndning av det officiella operativsystemet för "malin" â Raspbian.
Som en anhÀngare av RPM-baserade system kunde jag inte motstÄ att prova detta lilla underverk med min favorit, CentOS.
I artikeln presenteras en instruktion för att bygga en 5GHz/AC Wi-Fi-router av Raspberry Pi 3 Model B+ baserat pĂ„ operativsystemet CentOS. Det kommer att vara nĂ„gra standardtrick, men fĂ„ Ă€r kĂ€nda, och som bonus â en kopplingsschema för att ansluta ytterligare Wi-Fi-utrustning till "malin", vilket gör att den kan fungera i flera lĂ€gen samtidigt (2,4+5GHz).

(mix av bilder frÄn fria kÀllor)
Vi noterar omedelbart att vi inte kommer att fÄ nÄgra galaktiska hastigheter. Jag fÄr ut maximalt 100 Mbit trÄdlöst frÄn min "malin", och det rÀcker för att tÀcka hastigheten frÄn min Internetleverantör. Varför skulle man behöva en sÄ trög AC, nÀr man i teorin kan fÄ en halv gigabit med N? Om du har stÀllt dig denna frÄga, bör du gÄ till affÀren och skaffa en riktig router med Ätta externa antenner.
0. Vad som behövs
- SjÀlva "malinska produkten" av kaliber: Pi 3 Model B+ (för att uppnÄ de ÄtrÄvÀrda 5GHz-hastigheterna och kanalerna);
- Bra microSD >= 4GB;
- En arbetsstation med Linux och en microSD-lÀsare/skrivare;
- TillrÀckliga fÀrdigheter i Linux, artikeln Àr för en förberedd Geek;
- TrÄdbunden nÀtverksanslutning (eth0) mellan Raspberry och Linux, en fungerande DHCP-server i det lokala nÀtverket och InternetÄtkomst frÄn bÄda enheterna.
En liten kommentar om den sista punkten. "Vad kom först, Àgget eller..." hur gör man en Wi-Fi-router utan nÄgot slags Internet-accessutrustning? Vi lÀmnar detta intressanta övning utanför artikeln och antar helt enkelt att Raspberry Àr ansluten till det lokala nÀtverket med kabel och har InternetÄtkomst. I detta fall behövs inga extra skÀrmar eller enheter för att konfigurera "malin".
1. Installation av CentOS
Vid tidpunkten för detta artikelskrivande Ă€r den fungerande versionen av CentOS pĂ„ enheten â 32-bitars. NĂ„gonstans pĂ„ de vidstrĂ€ckta nĂ€tverken har jag sett Ă„sikter om att prestandan för sĂ„dana operativsystem pĂ„ 64-bitars ARM-arkitektur sjunker med hela 20%. Jag lĂ€mnar den punkten utan kommentarer.
PÄ Linux laddar vi ner en minimal bild med kÀrnan "-RaspberryPI-» och skriver det pÄ microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Innan vi börjar anvÀnda bilden tar vi bort SWAP-partitionen, utökar rotpartitionen till hela tillgÀngliga utrymmet och tar bort SELinux. Algoritmen Àr enkel: vi gör en kopia av roten i Linux, tar bort alla partitioner frÄn microSD förutom den första (\/boot), skapar en ny rotpartition och ÄterstÀller dess innehÄll frÄn kopian.
Exempel pÄ nödvÀndiga ÄtgÀrder (brutal konsolutdata)
# 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 att ha packat upp innehÄllet i rotpartitionen Àr det dags att göra vissa Àndringar.
Vi stÀnger av SELinux i /mnt/etc/selinux/config:
SELINUX=disabled
Redigerar /mnt/etc/fstab, lÀmnar bara tvÄ poster om partitionerna: startpartition (\/boot, oförÀndrad) och rotpartition (Àndra vÀrdet pÄ UUID, som du kan fÄ veta genom att studera utdata frÄn blkid-kommandot i Linux):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 \/ ext4 defaults,noatime 0 0
UUID=6938-F4F2 \/boot vfat defaults,noatime 0 0
Slutligen Àndrar vi kÀrnans startparametrar: anger ny plats för rotpartitionen, stÀnger av debugutskriften och (valfritt) förhindrar kÀrnan frÄn att tilldela IPv6-adresser pÄ nÀtverksgrÀnssnitten:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Vi gör innehÄllet /mnt/cmdline.txt till följande format (en rad utan radbrytningar):
root=\/dev\/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
FĂ€rdigt:
# cd
# umount /mnt
# sync
Flyttar microSD till "malinen", startar den och fÄr nÀtverksÄtkomst via ssh (root\/centos).
2. Konfigurera CentOS
De första tre oförÀnderliga stegen: passwd, yum -y update, starta om.
Vi överlÄter nÀtverkskontroll till networkd:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Skapar en fil (tillsammans med katalogerna) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Starta om "malinen" och fÄ nÀtverksÄtkomst via ssh igen (IP-adressen kan ha Àndrats). Observera att vi anvÀnder /etc/resolv.conf, vilket skapades tidigare av Network Manager. SÄ om det uppstÄr problem med resolve, redigera dess innehÄll. AnvÀnd inte systemd-resolved vi kommer inte att göra det.
Tar bort "onödigt", fixar och snabbar upp operativsystemets start:
# 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
Den som behöver cron och som inte klarar av inbyggda , kan installera det som saknas. /var/log- och kollar genom journalctl. Om logghistorik behövs (standard lagras endast information frÄn systemets start):
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Vi stÀnger av anvÀndningen av IPv6 för huvudtjÀnster (om det behövs)/etc/ssh/sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Tidens relevans pĂ„ "malinen" Ă€r en viktig sak. Eftersom det "utan extra kostnad" inte finns nĂ„got hĂ„rdvarualternativ för att spara den aktuella klockstatusen vid omstart, behövs synkronisering. En mycket bra och snabb demon för detta Ă€r chrony â redan installerad och startar automatiskt. NTP-servrarna kan Ă€ndras till de nĂ€rmaste.
/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
För att stÀlla in tidszonen kommer vi att anvÀnda tricket. Eftersom vÄrt mÄl Àr att skapa en Wi-Fi-router som fungerar pÄ 5GHz-frekvenser, förbereder vi oss för överraskningar regulator:
# yum info crda
Sammanfattning: RegelverksöverensstÀmmelse-daemon för 802.11 trÄdlöst nÀtverk
Denna elaka konstruktion, med hÀnsyn till tidszonen, "förbjuder" anvÀndning av (i Ryssland) 5GHz-frekvenser och kanaler med "höga" nummer. Tricket bestÄr i att stÀlla in tidszonen utan att anvÀnda namn pÄ kontinenten/stÀder, alltsÄ istÀllet för:
# timedatectl set-timezone Europe/Moscow
Vi pressar:
# timedatectl set-timezone Etc/GMT-3
Och de sista detaljerna i systemets frisyr:
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# AnvÀndarspecifik miljö och startprogram
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. CentOS-tillÀgg
Allt som hittills sagts kan betraktas som en fullstÀndig instruktion för installation av "vanlig" CentOS pÄ Raspberry Pi. Du bör fÄ en dator som (om)startar pÄ mindre Àn 10 sekunder, anvÀnder mindre Àn 15 megabyte RAM och 1.5 gigabyte microSD (egentligen mindre Àn 1 gigabyte pÄ grund av den ofullstÀndiga /boot, men vi ska vara Àrliga till slut).
För att installera programvaran för Wi-Fi-Ätkomsten pÄ detta system behövs en liten utvidgning av standarddistributören CentOS. Först och frÀmst "uppgraderar" vi drivrutinen (firmware) för den inbyggda Wi-Fi-adaptern. PÄ projektets hemsida stÄr det:
Wifi pÄ Raspberry 3B och 3B+
Firmwarefilerna för Raspberry PI 3B/3B+ fÄr inte distribueras av CentOS-projektet. Du kan anvÀnda följande artiklar för att förstÄ problemet, fÄ firmware och sÀtta upp wifi.
Vad som inte Ă€r tillĂ„tet för CentOS-projektet Ă€r inte förbjudet för oss att anvĂ€nda privat. Vi byter ut distributions-Wi-Fi-firmware i CentOS mot den motsvarande frĂ„n Broadcoms utvecklare (de dĂ€r hatade binĂ€ra blobbarnaâŠ). Detta kommer sĂ€rskilt att möjliggöra anvĂ€ndning av AC i Ă„tkomstpunktslĂ€ge.
Wi-Fi firmwareuppgraderingVi tar reda pÄ enhetens modell och aktuell 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 att firmwareversionen Àr 7.45.18 frÄn 01.03.2015 och kommer ihÄg följande uppsÀttning siffror: 43455 (brcmfmac43455-sdio.bin).
. De lata kan skriva bilden pÄ microSD och hÀmta filerna med firmwaren dÀrifrÄn. Alternativt kan man montera rotpartitionen av bilden i Linux och kopiera det som behövs dÀrifrÄn:
# 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 erhÄllna Wi-Fi-adapterfirmwarefilerna mÄste kopieras med ersÀttning till "hallonen" i katalogen /usr/lib/firmware/brcm/
Vi startar om den framtida routern och ler nöjt:
# 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 frÄn 27.02.2018.
Och sjÀlvklart 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. NÀtverkskonfiguration och kommande svÄrigheter
Som vi kom överens om tidigare, Ă€r "malinkan" ansluten med "kabel" till det lokala nĂ€tverket. LĂ„t oss anta att ocksĂ„ leverantören ger tillgĂ„ng till Internet pĂ„ exakt samma sĂ€tt: adressen i det offentliga nĂ€tverket tilldelas dynamiskt av en DHCP-server (kan vara kopplad till MAC). I detta fall, efter att ha slutfört instĂ€llningarna av "malinkan", Ă€r det tillrĂ€ckligt att "plugga in" kabeln frĂ„n leverantören och allt Ă€r klart. Autentisering med hjĂ€lp av systemd-networkd â Ă€r ett eget Ă€mne och behandlas inte hĂ€r.
Wi-Fi grÀnssnittet(-en) pÄ Raspberry Àr det lokala nÀtverket, och den inbyggda Ethernet-adaptern (eth0) Àr extern. Vi numrerar det lokala nÀtverket statiskt, till exempel: 192.168.0.0/24. Adressen för "malinkan": 192.168.0.1. I det externa nÀtverket (Internet) kommer DHCP-servern att fungera.
och â tvĂ„ bekymmer som vĂ€ntar pĂ„ alla som arbetar med konfiguration av nĂ€tverksgrĂ€nssnitt och tjĂ€nster i systemd-distributioner.
Parallell kaos (lyrisk avstickare)Lennart Poettering har utformat sitt program systemd mycket bra. Det hÀr systemd startar andra program sÄ snabbt att de, utan att hinna förstÄ, snubblar och faller i starten utan att ens ha börjat sitt hinderlopp.
Men allvarligt talat, den aggressiva parallelliseringen av startade processer vid uppstart av systemd-OS fungerar som en slags "Äsnebridge" för erfarna sekventiella LSB-anvÀndare. Lyckligtvis visar det sig vara en enkel, om Àn inte alltid uppenbar, uppgift att ordna upp detta "parallella kaos".
Vi skapar tvĂ„ virtuella brygggrĂ€nssnitt (bridge) med permanenta namn: lan och wan. Till den första "ansluter" vi Wi-Fi-adaptern(-erna), och till den andra â eth0 "malinkan."
/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=yes eliminera behovet av att ange för kÀrnan via sysctl att aktivera routning.
MACAddress= vi avkommenterar och Àndrar vid behov.
Först "ansluter" vi eth0. Kom ihÄg "enhetlighetsproblemet" och anvÀnd endast MAC-adressen för detta grÀnssnitt, vilken vi kan ta reda pÄ sÄ hÀr:
# cat /sys/class/net/eth0/address
Vi skapar /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Vi tar bort den tidigare konfigurationsfilen för eth0, startar om "malin" och fÄr nÀtverksÄtkomst (IP-adressen kommer troligen att Àndras):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5. DNSMASQ
För att skapa Wi-Fi-Ätkomstpunkter finns det inget bÀttre Àn det söta paret av dnsmasq + hostapd har Ànnu inte uppfunnits. Enligt min Äsikt.
Om nĂ„gon har glömt sÄ⊠â det Ă€r en sak som hanterar Wi-Fi-adaptrar (specifikt, den tar hand om att koppla dem till den virtuella lan "malin"), autentiserar och registrerar trĂ„dlösa klienter.
â den konfigurerar klienternas nĂ€tverksstack: den ger IP-adresser, DNS-servrar, standardgateway och andra liknande medel.
Vi börjar med dnsmasq:
# yum install dnsmasq
Mall /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
vi redigerar den som vi vill.
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
"Magin" hÀr ligger i parametern bind-dynamic, som instruerar dnsmasq-daemonen att vÀnta pÄ att grÀnssnittet ska visas i systemet interface=lan, istÀllet för att svimma av ensamhet efter start.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Och slutligen, de magiska konfigurationerna för hostapd. Jag Àr övertygad om att nÄgon lÀser denna artikel i jakt pÄ just dessa heliga rader.
Innan vi installerar hostapd mÄste vi kÀmpa med "enhetsproblem". Den inbyggda Wi-Fi-adaptern wlan0 kan lÀtt Àndra sitt namn till wlan1 nÀr vi ansluter ytterligare USB Wi-Fi-enheter. SÄ vi kommer att lÄsa fast grÀnssnittens namn pÄ följande sÀtt: skapa unika namn för (trÄdlösa) adaptrar och koppla dem till MAC-adresser.
För den inbyggda Wi-Fi-adaptern, som fortfarande Àr wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Vi skapar /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Nu kommer vi att vara sĂ€kra pĂ„ att wl0 â det Ă€r den inbyggda Wi-Fi:n. Vi startar om "malin" för att kontrollera detta.
Installera:
# yum install hostapd wireless-tools
Konfigurationsfilen /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
Kom ihÄg att aldrig glömma om , vi Àndrar de parametrar som vi behöver och kontrollerar manuellt om de fungerar:
# hostapd /etc/hostapd/hostapd.conf
hostapd kommer att köra i interaktivt lĂ€ge och visa sitt tillstĂ„nd i konsolen. Om inga fel uppstĂ„r kan klienter som stöder AC-lĂ€get redan ansluta till accesspunkten. För att stoppa hostapd â Ctrl-C.
Det ÄterstÄr att aktivera hostapd för systemstart. Om man gör det pÄ det vanliga sÀttet (systemctl enable hostapd), kan man efter nÀsta omstart fÄ en "liggande i blod" demon med diagnosen "grÀnssnittet wl0 hittades inte". Som ett resultat av "parallellt kaos" startade hostapd snabbare Àn kÀrnan hittade den trÄdlösa adaptern.
Det finns gott om lösningar pÄ internet: frÄn att tvinga fram en timeout innan demon startar (nÄgra minuter), till att anvÀnda en annan demon som övervakar grÀnssnittets framtrÀdande och (Äter)startar hostapd. Dessa lösningar Àr fungerande, men förfÀrligt oanseliga. Vi kallar pÄ hjÀlp av den stora systemd med sina "mÄl" och "uppgifter" "beroenden".
Vi kopierar distributionsservicefilen till /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
och Àndrar dess innehÄll till följande:
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Autentiserare
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
Magin med den uppdaterade servicefilen ligger i den dynamiska kopplingen av hostapd till det nya mĂ„let â grĂ€nssnittet wl0. NĂ€r grĂ€nssnittet dyker upp startas demon, och nĂ€r det försvinner stoppas den. Och allt detta online â utan att behöva starta om systemet. Denna teknik kommer att vara sĂ€rskilt anvĂ€ndbar nĂ€r du ansluter en USB Wi-Fi-adapter till "malin".
Nu kan vi:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Va???" © Ja-ja! Ingen systemd. Inga nya stiliga kombinationsverktyg (i form av firewalld), som i slutÀndan gör samma sak.
Vi anvÀnder den gamla goda iptables, vars tjÀnst efter start laddar nÀtverksreglerna i kÀrnan och avslutar sin uppgift utan att bli kvar och konsumera resurser. systemd har en elegant IPMasquerade=, men vi överlÄter ÀndÄ adresstransleringen (NAT) och brandvÀggen till iptables.
Installera:
# yum install iptables-services
# systemctl enable iptables ip6tables
Jag föredrar att spara iptables-konfigurationen i form av ett skript (exempel):
#!/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 kör skriptet ovan och förlorar möjligheten att skapa nya trĂ„dbundna ssh-anslutningar till "malin". Det stĂ€mmer, vi har gjort en Wi-Fi-router vars tillgĂ„ng "via internet" som standard Ă€r avstĂ€ngd â nu bara "genom luften". Anslut leverantörens kabel till Ethernet och börja surfa!
8. Bonus: +2,4GHz
NÀr jag konstruerade den första Raspberry-router enligt den ovan beskrivna ritningen, upptÀckte jag ett antal enheter i mitt hem som av sina konstruktionsbegrÀnsningar inte kunde se "hallonen" överhuvudtaget via Wi-Fi. Att omkonfigurera routern för att fungera i 802.11b/g/n vore osportsligt, eftersom den maximala hastigheten "i luften" i sÄ fall inte skulle överstiga 40 Mbit, medan min favoritleverantör erbjuder mig 100 (via kabel).
I sjÀlva verket hade en lösning pÄ problemet redan uppfunnits: en andra Wi-Fi-grÀnssnitt som arbetar pÄ 2,4GHz-frekvensen samt en extra Ätkomstpunkt. Jag köpte inte den första, utan den andra USB Wi-Fi "dongeln" som jag stötte pÄ i den nÀrliggande butik. SÀljaren blev bombarderas med frÄgor om chippet, kompatibilitet med ARM-kÀrnor i Linux och om det kunde fungera i AP-lÀget (han började först).
Vi konfigurerar "dongeln" analogt med den inbyggda Wi-Fi-adaptern.
Först â vi döper den till 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 överlÄter hanteringen av det nya Wi-Fi-grÀnssnittet till en separat daemon hostapd, som kommer att startas och stoppas beroende pÄ huruvida det finns en strikt definierad "dongel" i systemet: wl1.
Konfigurationsfilen /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]
InnehÄllet i denna fil beror direkt pÄ modellen av USB Wi-Fi-adaptern, sÄ en enkel copy/paste kan föra dig pÄ fel vÀg.
Vi kopierar distributionsservicefilen till /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
och Àndrar dess innehÄll till följande:
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Autentiserare
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
KvarstÄr att aktivera det nya exemplet av hostapd:
# systemctl enable hostapd2
Det Àr allt! Dra i "dongeln" och sjÀlva "hallonen", titta pÄ de trÄdlösa nÀtverken runt dig.
Och till sist vill jag varna för kvaliteten pÄ USB Wi-Fi-adaptern och strömförsörjningen till Raspberry. Om du kopplar in "dongeln" medan systemet Àr igÄng kan det ibland orsaka att "hallonen" fryser pÄ grund av tillfÀlliga elektriska problem.
KĂ€lla: habr.com
