Există o cantitate imensă de informații pe Internet despre crearea punctelor de acces Wi-Fi bazate pe un computer cu o singură placă Raspberry. De regulă, aceasta înseamnă utilizarea sistemului de operare Raspbian nativ pentru Raspberry.
Fiind un adept al sistemelor bazate pe RPM, nu am putut trece pe lângă acest mic miracol și să nu încerc pe iubitul meu CentOS.
Articolul oferă instrucțiuni pentru realizarea unui router Wi-Fi 5GHz/AC dintr-un Raspberry Pi 3 Model B+ bazat pe sistemul de operare CentOS. Vor exista mai multe trucuri standard, dar puțin cunoscute, și ca bonus - un desen pentru conectarea echipamentelor Wi-Fi suplimentare la Raspberry, permițându-i să funcționeze simultan în mai multe moduri (2,4+5GHz).
(mix de imagini disponibile gratuit)
Să observăm imediat că unele viteze cosmice nu vor funcționa. Strâng maxim 100 Mbps din Raspberry-ul meu prin aer, iar acest lucru acoperă viteza furnizorului meu de internet. De ce ai nevoie de un AC atât de lent, dacă teoretic poți obține jumătate de gigabit chiar și pe N? Dacă ți-ai pus această întrebare, atunci mergi la magazin pentru a cumpăra un router adevărat cu opt antene externe.
0. Ce vei avea nevoie
- De fapt, „produsul zmeură” în sine este de calibru: Pi 3 Model B+ (pentru a atinge vitezele și canalele râvnite de 5GHz);
- MicroSD bun >= 4GB;
- Stație de lucru cu cititor/scriitor Linux și microSD;
- Disponibilitatea unor abilități suficiente în Linux, articolul este pentru un Geek instruit;
- Conectivitate la rețea prin cablu (eth0) între Raspberry și Linux, rulând server DHCP în rețeaua locală și acces la Internet de pe ambele dispozitive.
Un mic comentariu asupra ultimului punct. „Care a fost primul, oul sau...” cum să faci un router Wi-Fi în absența oricărui echipament de acces la internet? Să lăsăm acest exercițiu distractiv în afara domeniului de aplicare al articolului și să presupunem pur și simplu că Raspberry este conectat la rețeaua locală prin cablu și are acces la Internet. În acest caz, nu vom avea nevoie de un televizor suplimentar și de un manipulator pentru a configura „zmeura”.
1. Instalați CentOS
La momentul scrierii acestui articol, versiunea de rulare a CentOS pe dispozitiv este pe 32 de biți. Undeva pe World Wide Web am dat peste păreri că performanța unor astfel de sisteme de operare pe arhitectura ARM pe 64 de biți este redusă cu până la 20%. Voi părăsi acest moment fără comentarii.
Pe Linux, descărcați imaginea minimă cu nucleul "-RaspberryPI-"și scrieți-l pe microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Înainte de a începe să folosim imaginea, vom elimina partiția SWAP din ea, vom extinde rădăcina la întregul volum disponibil și vom scăpa de SELinux. Algoritmul este simplu: faceți o copie a rădăcinii pe Linux, ștergeți toate partițiile de pe microSD, cu excepția primei (/boot), creați o nouă rădăcină și returnați conținutul acesteia din copie.
Exemplu de acțiuni necesare (ieșire severă din consolă)
# 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
După despachetarea conținutului partiției rădăcină, este timpul să-i faceți câteva modificări.
Dezactivați SELinux în /mnt/etc/selinux/config:
SELINUX=disabled
Editare /mnt/etc/fstab, lăsând în el doar două intrări despre partiții: boot (/boot, no changes) și root (schimbăm valoarea UUID, care poate fi aflată studiind rezultatul comenzii blkid pe Linux):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
În cele din urmă, modificăm parametrii de pornire a nucleului: specificăm o nouă locație pentru partiția rădăcină, dezactivăm ieșirea informațiilor de depanare și (opțional) interzicem nucleului să atribuie adrese IPv6 pe interfețele de rețea:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Iată conținutul /mnt/cmdline.txt la următoarea formă (un rând fără cratime):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Finish:
# cd
# umount /mnt
# sync
Rearanjam microSD-ul în „zmeura”, îl lansăm și obținem acces la rețea prin ssh (root/centos).
2. Configurarea CentOS
Primele trei mișcări de neclintit: passwd, yum -y actualizare, reporniți.
Oferim managementul rețelei în rețea:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Creați un fișier (împreună cu directoare) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Repornim „zmeura” și obținem din nou acces la rețea prin ssh (adresa IP se poate schimba). Atenție la ceea ce se folosește /etc/resolv.conf, creat anterior de Network Manager. Prin urmare, în caz de probleme cu rezolvarea, editați conținutul acestuia. Utilizare sistem-rezolvat nu vom.
Eliminam „inutilul”, reparăm și accelerăm încărcarea sistemului de operare:
# 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
Cine are nevoie cron si cine nu digera incorporatul
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Dezactivați utilizarea IPv6 de către serviciile de bază (dacă este necesar)/ Etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Relevanța timpului pentru „zmeura” este un lucru important. Deoarece din cutie nu există nicio capacitate hardware de a salva starea curentă a ceasului la repornire, este necesară sincronizarea. Un demon foarte bun și rapid pentru asta este cronică - deja instalat și pornește automat. Puteți schimba serverele NTP cu cele mai apropiate.
/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
Pentru a seta fusul orar vom folosi truc. Deoarece scopul nostru este să creăm un router Wi-Fi care să funcționeze la frecvențe de 5GHz, ne vom pregăti pentru surprize în avans regulator:
# yum info crda
Rezumat: Daemon de conformitate cu reglementările pentru rețelele fără fir 802.11
Acest design malefic, bazat și pe fusul orar, „interzice” utilizarea (în Rusia) a frecvențelor de 5 GHz și a canalelor cu numere „înalte”. Trucul este să setați un fus orar fără a folosi numele continentelor/orașelor, adică în loc de:
# timedatectl set-timezone Europe/Moscow
Apăsăm:
# timedatectl set-timezone Etc/GMT-3
Și ultimele retușuri la coafura sistemului:
# 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. Suplimente CentOS
Tot ceea ce s-a spus mai sus poate fi considerat instrucțiuni complete pentru instalarea „vanilie” CentOS pe Raspberry Pi. Ar trebui să ajungeți cu un PC care (re)pornește în mai puțin de 10 secunde, folosește mai puțin de 15 Megaocteți de RAM și 1.5 Gigaocteți de microSD (de fapt, mai puțin de 1 Gigabyte din cauza unui /boot incomplet, dar să fim sinceri).
Pentru a instala software pentru punctul de acces Wi-Fi pe acest sistem, va trebui să extindeți ușor capacitățile distribuției standard CentOS. În primul rând, să facem upgrade la driverul (firmware-ul) adaptorului Wi-Fi încorporat. Pagina de start a proiectului spune:
Wifi pe Raspberry 3B și 3B+
Fișierele firmware Raspberry PI 3B/3B+ nu pot fi distribuite de către proiectul CentOS. Puteți folosi următoarele articole pentru a înțelege problema, a obține firmware-ul și a configura wifi-ul.
Ceea ce este interzis pentru proiectul CentOS nu ne este interzis pentru uz personal. Înlocuim firmware-ul Wi-Fi de distribuție în CentOS cu cel corespunzător de la dezvoltatorii Broadcom (aceleași blob-uri binare urâte...). Acest lucru, în special, vă va permite să utilizați AC în modul punct de acces.
Actualizare firmware Wi-FiAflați modelul dispozitivului și versiunea actuală de firmware:
# 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
Vedem că versiunea de firmware este 7.45.18 din 01.03.2015/XNUMX/XNUMX și ne amintim următorul set de numere: 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
Fișierele de firmware rezultate ale adaptorului Wi-Fi trebuie copiate și înlocuite cu „zmeura” în director /usr/lib/firmware/brcm/
Repornim viitorul router și zâmbim mulțumiți:
# 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
Versiunea: 7.45.154 din 27.02.2018.
Și bineînțeles 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. Configurarea rețelei și provocările viitoare
După cum am convenit mai sus, „zmeura” este conectată prin „sârmă” la rețeaua locală. Să presupunem că furnizorul oferă acces la Internet exact în același mod: adresa de pe rețeaua publică este emisă dinamic de serverul DHCP (poate cu legare MAC). În acest caz, după configurarea finală a zmeurii, trebuie doar să „conectați” cablul furnizorului și ați terminat. Utilizare autorizare systemd-networkd - subiectul unui articol separat și nu este discutat aici.
Interfața (interfețele) Wi-Fi a Raspberry este o rețea locală, iar adaptorul Ethernet încorporat (eth0) este extern. Să numerotăm rețeaua locală în mod static, de exemplu: 192.168.0.0/24. Adresa Zmeura: 192.168.0.1. Un server DHCP va funcționa pe rețeaua externă (Internet).
Haos paralel (digresiune lirică)Lennart Pottering și-a compilat propriul program systemd Foarte bun. Acest systemd lansează atât de repede alte programe încât aceștia, neavând timp să-și revină din fluierul arbitrului, se poticnesc și cad la start fără măcar să-și înceapă cursa cu obstacole.
Dar, serios, paralelizarea agresivă a proceselor lansate la începutul sistemului de operare systemd este un fel de „punte de măgar” pentru specialiștii LSB secvențiali experimentați. Din fericire, punerea ordinii în acest „haos paralel” se dovedește a fi simplă, deși nu întotdeauna evidentă.
Creăm două interfețe bridge virtuale cu nume constante: lan и spălăcit. Vom „conecta” adaptorul(e) Wi-Fi la primul, iar eth0 „zmeura” la al doilea.
/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=da elimină necesitatea de a sugera nucleul prin sysctl pentru a activa rutarea.
MACAddress= Să decomentăm și să schimbăm dacă este necesar.
Mai întâi „conectăm” eth0. Ne amintim „problema de uniformitate” și folosim doar adresa MAC a acestei interfețe, care poate fi găsită, de exemplu, astfel:
# cat /sys/class/net/eth0/address
Noi creăm /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Ștergem fișierul de configurare anterior eth0, repornim Raspberry și obținem acces la rețea (adresa IP se va schimba cel mai probabil):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Pentru a crea puncte de acces Wi-Fi, nimic nu bate un cuplu dulce dnsmasq + hostapd încă nu mi-am dat seama. În opinia mea.
În caz că cineva a uitat, atunci...
Să începem cu dnsmasq:
# yum install dnsmasq
șablon /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
editați-l după bunul plac.
minimalist /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
„Magia” aici constă în parametru bind-dinamic, care îi spune demonului dnsmasq să aștepte până când apare pe sistem interfață=lan, și nu leșin de o criză de singurătate mândră după început.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Și în sfârșit, configurațiile magice hostapd. Nu am nicio îndoială că cineva citește acest articol în căutarea tocmai a acestor rânduri prețuite.
Înainte de a instala hostapd, trebuie să depășiți „problema de uniformitate”. Adaptorul Wi-Fi încorporat wlan0 își poate schimba cu ușurință numele în wlan1 atunci când conectați echipamente Wi-Fi USB suplimentare. Prin urmare, vom repara numele interfețelor în felul următor: vom veni cu nume unice pentru adaptoarele (wireless) și le vom lega la adrese MAC.
Pentru adaptorul Wi-Fi încorporat, care este încă wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Noi creăm /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Acum vom fi siguri că wl0 - Acesta este Wi-Fi încorporat. Repornim Raspberry pentru a ne asigura de acest lucru.
Instalare:
# yum install hostapd wireless-tools
Fișier de configurare /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
Fără a uita nicio clipă
# hostapd /etc/hostapd/hostapd.conf
hostapd va porni în modul interactiv, difuzând starea sa către consolă. Dacă nu există erori, atunci clienții care acceptă modul AC se vor putea conecta la punctul de acces. Pentru a opri hostapd - Ctrl-C.
Tot ce rămâne este să activați hostapd la pornirea sistemului. Dacă faceți lucrul standard (systemctl enable hostapd), atunci după următoarea repornire puteți obține un demon care „se rostogolește în sânge” cu diagnosticul „interfața wl0 nu a fost găsită". Ca urmare a „haosului paralel”, hostapd a pornit mai repede decât a găsit nucleul adaptorul wireless.
Internetul este plin de remedii: de la un timeout forțat înainte de a porni demonul (câteva minute), la un alt demon care monitorizează aspectul interfeței și (re)pornește hostpad-ul. Soluțiile sunt destul de viabile, dar teribil de urâte. Îl chemăm pe cel mare pentru ajutor systemd cu „obiectivele” și „sarcinile” și „dependențele” sale.
Copiați fișierul serviciului de distribuție în /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
și reduceți conținutul acestuia la următoarea 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
Magia fișierului de serviciu actualizat constă în legarea dinamică a hostapd la noua țintă - interfața wl0. Când apare interfața, demonul pornește; când dispare, se oprește. Și totul este online - fără a reporni sistemul. Această tehnică va fi utilă în special atunci când conectați un adaptor USB Wi-Fi la un Raspberry.
Acum poti:
# systemctl enable hostapd
# reboot
7. IPTABLES
„Stha???” © Da, da! Nici unul systemd. Fără combine noi (sub formă firewalld), care ajung să facă același lucru.
Să-l folosim pe cel vechi bun iptables, ale căror servicii, după pornire, vor încărca regulile de rețea în nucleu și se vor opri în liniște, fără a rămâne rezidente și fără a consuma resurse. systemd are un elegant IPMasquerade=, dar vom încredința în continuare traducerea adresei (NAT) și firewall-ului iptables.
Instalare:
# yum install iptables-services
# systemctl enable iptables ip6tables
Prefer să stochez configurația iptables ca script (exemplu):
#!/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
Executăm scriptul de mai sus și pierdem capacitatea de a stabili noi conexiuni SSH prin cablu cu Raspberry. Așa este, am realizat un router Wi-Fi, la care accesul „prin internet” este interzis implicit - acum doar „over the air”. Conectăm cablul Ethernet al furnizorului și începem navigarea!
8. Bonus: +2,4 GHz
Când am asamblat primul router Raspberry folosind desenul descris mai sus, am descoperit o serie de gadgeturi în gospodăria mea care, din cauza limitărilor lor de design Wi-Fi, nu puteau vedea deloc „zmeura”. Reconfigurarea routerului pentru a funcționa în 802.11b/g/n a fost nesportiv, deoarece viteza maximă „over the air” în acest caz nu a depășit 40 Mbit, iar furnizorul meu de internet preferat îmi oferă 100 (prin cablu).
De fapt, o soluție la problemă a fost deja inventată: o a doua interfață Wi-Fi care funcționează la o frecvență de 2,4 GHz și un al doilea punct de acces. La o tarabă din apropiere nu am cumpărat primul, ci al doilea „fluier” USB Wi-Fi pe care l-am întâlnit. Vânzătorul a fost chinuit de întrebări legate de chipset, compatibilitatea cu nucleele ARM Linux și posibilitatea de a lucra în modul AP (el a fost primul care a început).
Configuram „fluierul” prin analogie cu adaptorul Wi-Fi încorporat.
Mai întâi, să-l redenumim în 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
Vom încredința gestionarea noii interfețe Wi-Fi unui demon hostapd separat, care va porni și se va opri în funcție de prezența unui „fluier” strict definit în sistem: wl1.
Fișier de configurare /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]
Conținutul acestui fișier depinde direct de modelul adaptorului USB Wi-Fi, așa că o copiere/lipire banală vă poate eșua.
Copiați fișierul serviciului de distribuție în /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
și reduceți conținutul acestuia la următoarea 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
Tot ce rămâne este să activați o nouă instanță de hostapd:
# systemctl enable hostapd2
Asta e tot! Trageți „fluierul” și „zmeura” în sine, uitați-vă la rețelele wireless din jurul vostru.
Și, în sfârșit, vreau să vă avertizez despre calitatea adaptorului USB Wi-Fi și a sursei de alimentare a Raspberry. „Fluierul fierbinte” conectat poate provoca uneori „înghețarea zmeurii” din cauza unor probleme electrice pe termen scurt.
Sursa: www.habr.com