Il existe une énorme quantité d'informations sur Internet sur la création de points d'accès Wi-Fi basés sur un PC monocarte Raspberry. En règle générale, cela signifie utiliser le système d’exploitation Raspbian natif du Raspberry.
Étant un adepte des systèmes basés sur RPM, je ne pouvais pas passer à côté de ce petit miracle et ne pas essayer mon CentOS bien-aimé dessus.
L'article fournit des instructions pour créer un routeur Wi-Fi 5 GHz/AC à partir d'un Raspberry Pi 3 modèle B+ basé sur le système d'exploitation CentOS. Il y aura plusieurs astuces standards mais peu connues, et en bonus - un schéma pour connecter un équipement Wi-Fi supplémentaire au Raspberry, lui permettant de fonctionner simultanément dans plusieurs modes (2,4+5 GHz).
(mélange d'images disponibles gratuitement)
Notons d'emblée que certaines vitesses cosmiques ne fonctionneront pas. Je tire un maximum de 100 Mbps de mon Raspberry par voie hertzienne, ce qui couvre la vitesse de mon fournisseur Internet. Pourquoi avez-vous besoin d'un courant alternatif aussi lent, si en théorie vous pouvez obtenir un demi-gigabit même sur N ? Si vous vous posez cette question, rendez-vous en magasin pour acheter un vrai routeur doté de huit antennes externes.
0. Ce dont vous aurez besoin
- En fait, le « produit framboise » lui-même est de calibre : Pi 3 modèle B+ (pour atteindre les vitesses et canaux convoités de 5 GHz) ;
- Bonne microSD >= 4 Go ;
- Poste de travail avec Linux et lecteur/graveur microSD ;
- Disponibilité de compétences suffisantes sous Linux, l'article s'adresse à un Geek formé ;
- Connectivité réseau filaire (eth0) entre Raspberry et Linux, exécutant un serveur DHCP sur le réseau local et accès Internet depuis les deux appareils.
Un petit commentaire sur le dernier point. "Lequel est arrivé en premier, l'œuf ou..." Comment fabriquer un routeur Wi-Fi en l'absence de tout équipement d'accès Internet ? Laissons cet exercice divertissant hors du cadre de l'article et supposons simplement que le Raspberry est connecté au réseau local par fil et a accès à Internet. Dans ce cas, nous n'aurons pas besoin d'un téléviseur supplémentaire et d'un manipulateur pour paramétrer la « framboise ».
1. Installez CentOS
Au moment de la rédaction de cet article, la version exécutée de CentOS sur l'appareil est 32 bits. Quelque part sur le World Wide Web, je suis tombé sur des opinions selon lesquelles les performances de tels systèmes d'exploitation sur une architecture ARM 64 bits sont réduites jusqu'à 20 %. Je quitterai ce moment sans commentaire.
Sous Linux, téléchargez l'image minimale avec le noyau "-Tarte aux framboises-"et écrivez-le sur microSD :
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Avant de commencer à utiliser l'image, nous allons en supprimer la partition SWAP, étendre la racine à l'ensemble du volume disponible et nous débarrasser de SELinux. L'algorithme est simple : faites une copie de la racine sous Linux, supprimez toutes les partitions de la microSD sauf la première (/boot), créez une nouvelle racine et renvoyez son contenu à partir de la copie.
Exemple d'actions requises (sortie sévère de la console)
# 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
Après avoir décompressé le contenu de la partition racine, il est temps d'y apporter quelques modifications.
Désactivez SELinux dans /mnt/etc/selinux/config:
SELINUX=disabled
Édition /mnt/etc/fstab, en n'y laissant que deux entrées sur les partitions : boot (/boot, aucun changement) et root (on change la valeur UUID, qui peut être découverte en étudiant la sortie de la commande blkid sous Linux) :
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Enfin, nous modifions les paramètres de démarrage du noyau : nous spécifions un nouvel emplacement pour la partition racine, désactivons la sortie des informations de débogage et (éventuellement) interdisons au noyau d'attribuer des adresses IPv6 sur les interfaces réseau :
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Voici le contenu /mnt/cmdline.txt au formulaire suivant (une ligne sans tirets) :
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Fait:
# cd
# umount /mnt
# sync
Nous réorganisons la microSD en « framboise », la lançons et obtenons un accès réseau via ssh (root/centos).
2. Configuration de CentOS
Les trois premiers mouvements inébranlables : passwd, yum -y mise à jour, reboot.
Nous offrons la gestion du réseau en réseau:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Créer un fichier (avec des répertoires) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Nous redémarrons le "framboise" et obtenons à nouveau un accès réseau via ssh (l'adresse IP peut changer). Faites attention à ce qui est utilisé / Etc / resolv.conf, créé précédemment par Network Manager. Par conséquent, en cas de problèmes de résolution, modifiez son contenu. Utiliser résolu par systemd nous n'allons pas.
Nous supprimons les « inutiles », réparons et accélérons le chargement de l'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
Qui a besoin cron et qui ne digère pas l'intégré
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Désactiver l'utilisation d'IPv6 par les services de base (si nécessaire)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
La pertinence du temps sur la « framboise » est une chose importante. Étant donné qu'il n'est pas possible de sauvegarder l'état actuel de l'horloge au redémarrage, une synchronisation est nécessaire. Un démon très bon et rapide pour cela est chrony - déjà installé et démarre automatiquement. Vous pouvez remplacer les serveurs NTP par les plus proches.
/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
Pour définir le fuseau horaire, nous utiliserons tour. Puisque notre objectif est de créer un routeur Wi-Fi fonctionnant à des fréquences de 5 GHz, nous nous préparerons à l'avance aux surprises régulateur:
# miam info crda
Résumé : Démon de conformité réglementaire pour les réseaux sans fil 802.11
Cette conception maléfique, également basée sur le fuseau horaire, « interdit » l’utilisation (en Russie) des fréquences 5 GHz et des canaux avec des numéros « élevés ». L'astuce consiste à définir un fuseau horaire sans utiliser les noms de continents/villes, c'est-à-dire au lieu de :
# timedatectl set-timezone Europe/Moscow
On appuie sur :
# timedatectl set-timezone Etc/GMT-3
Et la touche finale à la coiffure du système :
# 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. Modules complémentaires CentOS
Tout ce qui a été dit ci-dessus peut être considéré comme des instructions complètes pour installer CentOS « vanille » sur le Raspberry Pi. Vous devriez vous retrouver avec un PC qui (re)démarre en moins de 10 secondes, utilise moins de 15 Mo de RAM et 1.5 Go de microSD (en réalité moins de 1 Go à cause d'un /boot incomplet, mais soyons honnêtes).
Pour installer le logiciel de point d'accès Wi-Fi sur ce système, vous devrez étendre légèrement les capacités de la distribution CentOS standard. Tout d'abord, mettons à niveau le pilote (micrologiciel) de l'adaptateur Wi-Fi intégré. La page d'accueil du projet dit :
Wifi sur les Raspberry 3B et 3B+
Les fichiers du firmware Raspberry PI 3B/3B+ ne peuvent pas être distribués par le projet CentOS. Vous pouvez utiliser les articles suivants pour comprendre le problème, obtenir le firmware et configurer le wifi.
Ce qui est interdit pour le projet CentOS ne nous est pas interdit pour un usage personnel. Nous remplaçons le firmware de distribution Wi-Fi dans CentOS par celui correspondant des développeurs Broadcom (ces mêmes blobs binaires détestés...). Ceci vous permettra notamment d'utiliser AC en mode point d'accès.
Mise à niveau du micrologiciel Wi-FiDécouvrez le modèle de l'appareil et la version actuelle du 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
Nous voyons que la version du firmware est la 7.45.18 du 01.03.2015/XNUMX/XNUMX, et rappelons l'ensemble de chiffres suivant : 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
Les fichiers du micrologiciel de l'adaptateur Wi-Fi résultants doivent être copiés et remplacés par « framboise » dans le répertoire /usr/lib/firmware/brcm/
On redémarre le futur routeur et on sourit de contentement :
# 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 du 27.02.2018/XNUMX/XNUMX.
Et bien sûr 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. Configuration du réseau et défis à venir
Comme nous l'avons convenu plus haut, la « framboise » est connectée par « fil » au réseau local. Supposons que le fournisseur fournisse l'accès à Internet exactement de la même manière : l'adresse sur le réseau public est émise dynamiquement par le serveur DHCP (éventuellement avec une liaison MAC). Dans ce cas, après la configuration finale du raspberry, il vous suffit de « brancher » le câble du fournisseur dessus et le tour est joué. Autorisation utilisant systemd-networkd - le sujet d'un article séparé et n'est pas abordé ici.
La ou les interfaces Wi-Fi du Raspberry sont un réseau local et l'adaptateur Ethernet intégré (eth0) est externe. Numérotons le réseau local de manière statique, par exemple : 192.168.0.0/24. Adresse framboise : 192.168.0.1. Un serveur DHCP fonctionnera sur le réseau externe (Internet).
Chaos parallèle (digression lyrique)Lennart Pottering a compilé son propre programme systemd Très bien. Ce systemd lance d'autres programmes si vite que ceux-ci, n'ayant pas le temps de se remettre du coup de sifflet de l'arbitre, trébuchent et tombent au départ sans même entamer leur parcours du combattant.
Mais sérieusement, la parallélisation agressive des processus lancés au démarrage du système d'exploitation systemd est une sorte de « pont d'âne » pour les spécialistes chevronnés du LSB séquentiel. Heureusement, mettre de l’ordre dans ce « chaos parallèle » s’avère simple, même si ce n’est pas toujours évident.
Nous créons deux interfaces de pont virtuel avec des noms constants : lan и blême. Nous allons « connecter » le ou les adaptateurs Wi-Fi au premier, et le « raspberry » eth0 au second.
/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=oui élimine le besoin de faire allusion au noyau via sysctl pour activer le routage.
Adresse MAC= Décommentons et modifions si nécessaire.
Nous « connectons » d’abord eth0. On se souvient du « problème d'uniformité » et on utilise uniquement l'adresse MAC de cette interface, que l'on peut connaître par exemple comme ceci :
# cat /sys/class/net/eth0/address
Créer /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Nous supprimons le fichier de configuration précédent eth0, redémarrons le Raspberry et y obtenons un accès réseau (l'adresse IP changera très probablement) :
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Pour créer des points d'accès Wi-Fi, rien ne vaut quelques bons dnsmasq + hébergeur Je ne l'ai pas encore compris. À mon avis.
Au cas où quelqu'un aurait oublié, alors...
Commençons par dnsmasq :
# yum install dnsmasq
Modèle / 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
modifiez-le à votre guise.
minimaliste /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
La « magie » ici réside dans le paramètre liaison-dynamique, qui indique au démon dnsmasq d'attendre jusqu'à ce qu'il apparaisse sur le système interface = réseau local, et ne s'évanouit pas d'un accès de fière solitude après le départ.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Et enfin, les configurations magiques d'hostapd. Je suis convaincu que quelqu’un lit cet article à la recherche précisément de ces lignes précieuses.
Avant d'installer hostapd, vous devez surmonter le « problème d'uniformité ». L'adaptateur Wi-Fi intégré wlan0 peut facilement changer son nom en wlan1 lors de la connexion d'un équipement Wi-Fi USB supplémentaire. Par conséquent, nous corrigerons les noms d'interface de la manière suivante : nous trouverons des noms uniques pour les adaptateurs (sans fil) et les lierons aux adresses MAC.
Pour l'adaptateur Wi-Fi intégré, qui est toujours wlan0 :
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Créer /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Maintenant, nous serons sûrs que wl0 - Il s'agit du Wi-Fi intégré. Nous redémarrons le Raspberry pour nous en assurer.
Installer:
# yum install hostapd wireless-tools
Fichier de configuration /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
Sans oublier un instant
# hostapd /etc/hostapd/hostapd.conf
hostapd démarrera en mode interactif, diffusant son état à la console. S'il n'y a aucune erreur, les clients prenant en charge le mode AC pourront se connecter au point d'accès. Pour arrêter hostapd - Ctrl-C.
Il ne reste plus qu'à activer hostapd au démarrage du système. Si vous faites la chose standard (systemctl activate hostapd), alors après le prochain redémarrage, vous pouvez avoir un démon "roulant dans le sang" avec le diagnostic "interface wl0 introuvable". En raison du « chaos parallèle », hostapd a démarré plus rapidement que le noyau n'a trouvé l'adaptateur sans fil.
Internet regorge de remèdes : depuis un timeout forcé avant de démarrer le démon (plusieurs minutes), jusqu'à un autre démon qui surveille l'apparence de l'interface et (re)démarre le hostpad. Les solutions sont tout à fait réalisables, mais terriblement laides. Nous appelons le grand à l'aide systemd avec ses «objectifs», ses «tâches» et ses «dépendances».
Copiez le fichier du service de distribution dans /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
et réduisons son contenu à la forme suivante :
[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
La magie du fichier de service mis à jour réside dans la liaison dynamique de hostapd à la nouvelle cible - l'interface wl0. Lorsque l'interface apparaît, le démon démarre ; lorsqu'il disparaît, il s'arrête. Et tout cela se fait en ligne, sans redémarrer le système. Cette technique sera particulièrement utile lors de la connexion d’un adaptateur Wi-Fi USB à un Raspberry.
Maintenant vous pouvez:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Quoi ???" © Oui, oui ! Aucun systemd. Pas de moissonneuses-batteuses de dernière génération (sous la forme pare-feu), ce qui finit par faire la même chose.
Utilisons le bon vieux iptables, dont les services, après le démarrage, chargeront les règles réseau dans le noyau et s'arrêteront silencieusement sans rester résident et sans consommer de ressources. systemd a un élégant IPMascarade=, mais nous confierons toujours la traduction d'adresses (NAT) et le pare-feu à iptables.
Installer:
# yum install iptables-services
# systemctl enable iptables ip6tables
Je préfère stocker la configuration iptables sous forme de script (exemple) :
#!/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
Nous exécutons le script ci-dessus et perdons la possibilité d'établir de nouvelles connexions SSH filaires avec le Raspberry. C'est vrai, nous avons réalisé un routeur Wi-Fi, dont l'accès « via Internet » est interdit par défaut - désormais uniquement « par voie hertzienne ». Nous connectons le câble Ethernet du fournisseur et commençons à surfer !
8. Bonus : +2,4 GHz
Lorsque j'ai assemblé le premier routeur Raspberry à l'aide du dessin décrit ci-dessus, j'ai découvert un certain nombre de gadgets dans ma maison qui, en raison de leurs limitations de conception Wi-Fi, ne pouvaient pas du tout voir la « framboise ». Reconfigurer le routeur pour qu'il fonctionne en 802.11b/g/n était antisportif, puisque dans ce cas la vitesse maximale « over the air » ne dépassait pas 40 Mbit, et mon fournisseur Internet préféré m'en propose 100 (par câble).
En fait, une solution au problème a déjà été inventée : une deuxième interface Wi-Fi fonctionnant à une fréquence de 2,4 GHz, et un deuxième point d'accès. Sur un stand voisin, j'ai acheté non pas le premier, mais le deuxième « sifflet » USB Wi-Fi que j'ai rencontré. Le vendeur était tourmenté par des questions sur le chipset, la compatibilité avec les noyaux ARM Linux et la possibilité de travailler en mode AP (il fut le premier à se lancer).
Nous configurons le « sifflet » par analogie avec l'adaptateur Wi-Fi intégré.
Tout d’abord, renommez-le en 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
Nous confierons la gestion de la nouvelle interface Wi-Fi à un démon hostapd distinct, qui démarrera et s'arrêtera en fonction de la présence d'un « sifflet » strictement défini dans le système : wl1.
Fichier de configuration /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]
Le contenu de ce fichier dépend directement du modèle de l'adaptateur Wi-Fi USB, donc un banal copier/coller peut vous échouer.
Copiez le fichier du service de distribution dans /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
et réduisons son contenu à la forme suivante :
[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
Il ne reste plus qu'à activer une nouvelle instance de hostapd :
# systemctl enable hostapd2
C'est tout! Tirez le « sifflet » et la « framboise » elle-même, regardez les réseaux sans fil autour de vous.
Et enfin, je tiens à vous mettre en garde sur la qualité de l'adaptateur Wi-Fi USB et de l'alimentation du Raspberry. Le « sifflet chaud » connecté peut parfois provoquer un « gel des framboises » en raison de problèmes électriques à court terme.
Source: habr.com