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).
(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
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
# 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).
# 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).
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å...
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
# 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