Raspberry Pi + CentOS = Wi-Fi Hotspot (eller hallonrouter med röd hatt)

Det finns en enorm mängd information på Internet om att skapa Wi-Fi-åtkomstpunkter baserade på en Raspberry single-board PC. Som regel innebär detta att du använder Raspbian-operativsystemet som är inbyggt i Raspberry.

Eftersom jag är en anhängare av RPM-baserade system kunde jag inte passera detta lilla mirakel och inte prova mitt älskade CentOS på det.

Artikeln innehåller instruktioner för att göra en 5GHz/AC Wi-Fi-router från en Raspberry Pi 3 Model B+ baserad på CentOS-operativsystemet. Det kommer att finnas flera vanliga men föga kända knep, och som en bonus - en ritning för att ansluta ytterligare Wi-Fi-utrustning till Raspberry, vilket gör att den samtidigt kan fungera i flera lägen (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (eller hallonrouter med röd hatt)
(blandning av fritt tillgängliga bilder)

Låt oss genast notera att vissa kosmiska hastigheter inte kommer att fungera. Jag pressar max 100 Mbps ur min Raspberry över luften, och detta täcker hastigheten för min internetleverantör. Varför behöver man en så trög AC, om man i teorin kan få en halv gigabit även på N? Om du har ställt dig den här frågan, gå till butiken för att köpa en riktig router med åtta externa antenner.

0. Vad du behöver

  • Egentligen är själva "hallonprodukten" av kaliber: Pi 3 Model B+ (för att uppnå de eftertraktade 5GHz-hastigheterna och kanalerna);
  • Bra microSD >= 4GB;
  • Arbetsstation med Linux och microSD-läsare/skrivare;
  • Tillgänglighet av tillräckliga färdigheter i Linux, artikeln är för en utbildad nörd;
  • Trådbunden nätverksanslutning (eth0) mellan Raspberry och Linux, kör DHCP-server på det lokala nätverket och Internetåtkomst från båda enheterna.

En liten kommentar till den sista punkten. "Vilket kom först, ägget eller..." hur man gör en Wi-Fi-router i avsaknad av någon utrustning för internetåtkomst? Låt oss lämna denna underhållande övning utanför artikelns ram och helt enkelt anta att Hallon är ansluten till det lokala nätverket via tråd och har tillgång till Internet. I det här fallet behöver vi inte en extra TV och en manipulator för att ställa in "hallon".

1. Installera CentOS

Projektets hemsida

När den här artikeln skrivs är den körande versionen av CentOS på enheten 32-bitars. Någonstans på World Wide Web stötte jag på åsikter om att prestandan för sådana operativsystem på 64-bitars ARM-arkitektur reduceras med så mycket som 20%. Jag lämnar detta ögonblick utan kommentarer.

På Linux, ladda ner den minimala bilden med kärnan "-Raspberry Pi-"och skriv det till 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 kommer vi att ta bort SWAP-partitionen från den, expandera roten till hela den tillgängliga volymen och bli av med SELinux. Algoritmen är enkel: gör en kopia av roten på Linux, ta bort alla partitioner från microSD utom den första (/boot), skapa en ny rot och returnera dess innehåll från kopian.

Exempel på nödvändiga åtgärder (svår konsolutgång)

# 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 några ändringar i den.

Inaktivera SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Redigering /mnt/etc/fstab, lämnar bara två poster om partitionerna i den: boot (/boot, inga ändringar) och root (vi ändrar UUID-värdet, vilket kan hittas genom att studera utdata från blkid-kommandot på 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: vi anger en ny plats för rotpartitionen, inaktiverar utmatningen av felsökningsinformation och (valfritt) förbjuder kärnan att tilldela IPv6-adresser på nätverksgränssnitt:

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

Här är innehållet /mnt/cmdline.txt till följande form (en rad utan bindestreck):

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

Finish:

# cd
# umount /mnt
# sync

Vi arrangerar om microSD till "hallon", startar det och får nätverksåtkomst till det via ssh (root/centos).

2. Konfigurera CentOS

De tre första orubbliga rörelserna: passwd, yum-en uppdatering, omstart.

Vi ger bort nätverkshantering nätverksansluten:

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

Skapa en fil (tillsammans med kataloger) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Vi startar om "hallon" och får igen nätverksåtkomst till den via ssh (IP-adressen kan ändras). Var uppmärksam på vad som används / Etc / resolv.conf, skapad tidigare av Network Manager. Redigera därför innehållet vid problem med lösningen. Använda sig av systemd-löst vi kommer inte.

Vi tar bort det "onödiga", reparerar och påskyndar laddningen av operativsystemet:

# 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

Vem behöver cron och som inte smälter det inbyggda systemd timers, kan fastställa vad som saknas. / Var / log- och titta igenom journalctl. Om du behöver logghistorik (som standard lagras information endast från det ögonblick som systemet startar):

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

Inaktivera användningen av IPv6 av grundläggande tjänster (om det behövs)/ Etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Tidens relevans på "hallon" är en viktig sak. Eftersom det inte finns någon hårdvarufunktion för att spara klockans nuvarande tillstånd vid omstart behövs synkronisering. En mycket bra och snabb demon för detta är chrony - redan installerat och startar automatiskt. Du kan byta NTP-servrar 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 vi kommer att använda lura. Eftersom vårt mål är att skapa en Wi-Fi-router som fungerar på 5GHz-frekvenser, kommer vi att förbereda oss för överraskningar i förväg regulator:

# yum info crda
Sammanfattning: Regelefterlevnadsdemon för 802.11 trådlöst nätverk

Denna onda design, också baserad på tidszonen, "förbjuder" användningen (i Ryssland) av 5GHz-frekvenser och kanaler med "höga" tal. Tricket är att ställa in en tidszon utan att använda namnen på kontinenter/städer, det vill säga istället för:

# timedatectl set-timezone Europe/Moscow

Vi trycker på:

# timedatectl set-timezone Etc/GMT-3

Och sista handen på systemets frisyr:

# 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-tillägg

Allt som sades ovan kan betraktas som kompletta instruktioner för att installera "vanilla" CentOS på Raspberry Pi. Du bör sluta med en dator som (om)startar på mindre än 10 sekunder, använder mindre än 15 megabyte RAM och 1.5 gigabyte microSD (faktiskt mindre än 1 gigabyte på grund av en ofullständig /boot, men låt oss vara ärliga).

För att installera programvara för Wi-Fi-åtkomstpunkt på det här systemet måste du utöka funktionerna för standard CentOS-distributionen något. Först och främst, låt oss uppgradera drivrutinen (firmware) för den inbyggda Wi-Fi-adaptern. Projektets hemsida säger:

Wifi på Raspberry 3B och 3B+

Raspberry PI 3B/3B+ firmwarefiler är inte tillåtna att distribueras av CentOS Project. Du kan använda följande artiklar för att förstå problemet, hämta firmware och ställa in wifi.

Det som är förbjudet för CentOS-projektet är inte förbjudet för oss för personligt bruk. Vi ersätter distributionens Wi-Fi-firmware i CentOS med motsvarande från Broadcom-utvecklarna (samma hatade binära blobbar...). Detta gör att du i synnerhet kan använda AC i åtkomstpunktläge.

Uppgradering av Wi-Fi firmwareTa reda på enhetsmodellen 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 daterad 01.03.2015/XNUMX/XNUMX, och kom ihåg följande uppsättning siffror: 43455 (brcmfmac43455-sdio.bin).

Ladda ner den aktuella Raspbian-bilden. Lata människor kan skriva bilden till microSD och ta filerna med den fasta programvaran därifrån. Eller så kan du montera rotpartitionen för bilden i Linux och kopiera det du behöver 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 resulterande Wi-Fi-adapterns firmwarefiler måste kopieras och ersättas med "hallon" till katalogen /usr/lib/firmware/brcm/

Vi startar om den framtida routern och ler belåtet:

# 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 daterad 27.02.2018-XNUMX-XNUMX.

Och naturligtvis 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 utmaningar framöver

Som vi kom överens om ovan är "hallon" ansluten med "tråd" till det lokala nätverket. Låt oss anta att leverantören tillhandahåller Internetåtkomst på exakt samma sätt: adressen på det offentliga nätverket utfärdas dynamiskt av DHCP-servern (kanske med MAC-bindning). I det här fallet, efter den slutliga installationen av hallonet, behöver du bara "ansluta" leverantörens kabel till den och du är klar. Auktorisering med hjälp av systemd-nätverk - ämnet för en separat artikel och diskuteras inte här.

Raspberrys Wi-Fi-gränssnitt är ett lokalt nätverk och den inbyggda Ethernet-adaptern (eth0) är extern. Låt oss numrera det lokala nätverket statiskt, till exempel: 192.168.0.0/24. Hallonadress: 192.168.0.1. En DHCP-server kommer att fungera på det externa nätverket (Internet).

Namngivningskonsistensproblem и berömd guatemalansk programmerare - två problem som väntar på alla som konfigurerar nätverksgränssnitt och tjänster i systemdistributioner.

Parallellt kaos (lyrisk utvikning)Lennart Pottering har sammanställt ett eget program SYSTEMD Mycket bra. Detta SYSTEMD startar andra program så snabbt att de, utan att hinna återhämta sig från domarens blås, snubblar och ramlar i starten utan att ens starta sin hinderbana.

Men allvarligt talat, den aggressiva parallelliseringen av lanserade processer i början av systemd OS är en slags "åsnebrygga" för erfarna sekventiella LSB-specialister. Lyckligtvis visar det sig vara enkelt att skapa ordning i detta "parallella kaos", även om det inte alltid är självklart.

Vi skapar två virtuella brygggränssnitt med konstanta namn: lan и wan. Vi kommer att "ansluta" Wi-Fi-adaptern(arna) till den första och eth0 "hallon" till den andra.

/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 eliminerar behovet av att tipsa om kärnan via sysctl för att möjliggöra routing.
MACAdress= Låt oss avkommentera och ändra om det behövs.

Först "ansluter" vi eth0. Vi kommer ihåg "enhetlighetsproblemet" och använder bara MAC-adressen för detta gränssnitt, som till exempel kan hittas 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 eth0, startar om hallonet och får nätverksåtkomst till den (IP-adressen kommer troligen att ändras):

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

5.DNSMASQ

För att skapa Wi-Fi-åtkomstpunkter, inget slår ett sött par dnsmasq + hostapd har inte fattat det än. Enligt min åsikt.

Om någon skulle glömma, då...hostapd - det här är det som styr Wi-Fi-adaptrar (i synnerhet kommer det att ta hand om att ansluta dem till den virtuella lan "hallon"), auktoriserar och registrerar trådlösa klienter.

dnsmasq — konfigurerar nätverksstacken av klienter: utfärdar IP-adresser, DNS-servrar, standardgateway och liknande nöjen.

Låt oss börja 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

redigera den efter eget tycke.

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 bindningsdynamisk, som säger åt dnsmasq-demonen att vänta tills den dyker upp på systemet gränssnitt=lan, och inte svimma av ett anfall av stolt ensamhet efter starten.

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

6. HOSTAPD

Och slutligen, de magiska hostapd-konfigurationerna. Jag tvivlar inte på att någon läser den här artikeln på jakt efter just dessa värdefulla rader.

Innan du installerar hostapd måste du övervinna "enhetlighetsproblemet". Den inbyggda Wi-Fi-adaptern wlan0 kan enkelt byta namn till wlan1 när du ansluter ytterligare USB Wi-Fi-utrustning. Därför kommer vi att fixa gränssnittsnamnen på följande sätt: vi kommer att hitta unika namn för de (trådlösa) adaptrarna och binda 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 ska vi vara säkra på det wl0 – Det här är inbyggt Wi-Fi. Vi startar om hallonet för att säkerställa detta.

Installera:

# 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

Utan att glömma för ett ögonblick GKChP, ändra parametrarna vi behöver och kontrollera manuellt efter funktionalitet:

# hostapd /etc/hostapd/hostapd.conf

hostapd startar i interaktivt läge och sänder dess tillstånd till konsolen. Om det inte finns några fel kommer klienter som stöder AC-läge att kunna ansluta till åtkomstpunkten. För att stoppa hostapd - Ctrl-C.

Allt som återstår är att aktivera hostapd i systemstarten. Om du gör standardsaken (systemctl aktivera hostapd), kan du efter nästa omstart få en demon "rullande i blod" med diagnosen "gränssnitt wl0 hittades inte". Som ett resultat av "parallellt kaos" startade hostapd snabbare än kärnan hittade den trådlösa adaptern.

Internet är fullt av lösningar: från en påtvingad timeout innan demonen startas (flera minuter), till en annan demon som övervakar utseendet på gränssnittet och (om)startar hostpaden. Lösningarna är ganska fungerande, men fruktansvärt fula. Vi ber den store om hjälp SYSTEMD med dess "mål" och "uppgifter" och "beroenden".

Kopiera distributionstjänstfilen till /etc/systemd/system/hostapd.service:

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

och reducera dess innehåll till följande 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

Magin med den uppdaterade servicefilen ligger i den dynamiska bindningen av hostapd till det nya målet - wl0-gränssnittet. När gränssnittet visas startar demonen, när den försvinner stannar den. Och allt detta är online - utan att starta om systemet. Denna teknik kommer att vara särskilt användbar när du ansluter en USB Wi-Fi-adapter till en hallon.

Nu kan du:

# systemctl enable hostapd
# reboot

7. IPTABLER

"Va???" © Ja, ja! Ingen SYSTEMD. Inga nymodiga skördetröskor (i formen firewalld), som i slutändan gör samma sak.

Låt oss använda den gamla goda iptables, vars tjänster, efter start, kommer att ladda nätverksregler i kärnan och tyst stängas av utan att vara kvar och utan att förbruka resurser. systemd har en elegant IPMasquerade=, men vi kommer fortfarande att anförtro adressöversättningen (NAT) och brandväggen till iptables.

Installera:

# yum install iptables-services
# systemctl enable iptables ip6tables

Jag föredrar att lagra iptables-konfigurationen som 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 ovanstående skript och förlorar förmågan att upprätta nya trådbundna SSH-anslutningar med hallon. Det stämmer, vi har skapat en Wi-Fi-router, åtkomst till vilken "via Internet" är förbjuden som standard - nu bara "over the air". Vi kopplar in leverantörens Ethernet-kabel och börjar surfa!

8. Bonus: +2,4GHz

När jag satte ihop den första Raspberry-routern med hjälp av ritningen som beskrivs ovan upptäckte jag ett antal prylar i mitt hushåll som, på grund av deras Wi-Fi-designbegränsningar, inte kunde se "hallonet" alls. Att konfigurera om routern för att fungera i 802.11b/g/n var osportsligt, eftersom maxhastigheten "over the air" i det här fallet inte översteg 40 Mbit, och min favorit Internetleverantör erbjuder mig 100 (via kabel).

Faktum är att en lösning på problemet redan har uppfunnits: ett andra Wi-Fi-gränssnitt som arbetar med en frekvens på 2,4 GHz och en andra åtkomstpunkt. I ett närliggande stall köpte jag inte den första, utan den andra USB Wi-Fi "visslan" jag stötte på. Säljaren plågades av frågor om chipset, kompatibilitet med ARM Linux-kärnor och möjligheten att arbeta i AP-läge (han var den första att starta).

Vi konfigurerar "visseln" analogt med den inbyggda Wi-Fi-adaptern.

Låt oss först döpa om det 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 kommer att anförtro hanteringen av det nya Wi-Fi-gränssnittet till en separat hostapd-demon, som startar och slutar beroende på närvaron av en strikt definierad "vissla" 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]

Innehållet i den här filen beror direkt på modellen för USB Wi-Fi-adaptern, så en banal kopiera/klistra in kan misslyckas med dig.

Kopiera distributionstjänstfilen till /etc/systemd/system/hostapd2.service:

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

och reducera dess innehåll till följande 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

Allt som återstår är att aktivera en ny instans av hostapd:

# systemctl enable hostapd2

Det är allt! Dra i "visseln" och själva "hallonet", titta på de trådlösa nätverken runt dig.

Och slutligen vill jag varna dig om kvaliteten på USB Wi-Fi-adaptern och strömförsörjningen till Hallon. Ansluten "het visselpipa" kan ibland orsaka "hallonfrysning" på grund av kortvariga elektriska problem.

Källa: will.com

Lägg en kommentar