Raspberry Pi + CentOS = point d'accès Wi-Fi (ou routeur Raspberry dans un chapeau rouge)

Il existe une multitude d'informations sur Internet sur la création de points d'accès Wi-Fi basés sur un PC Raspberry à carte unique. En règle générale, cela implique l'utilisation du système d'exploitation natif pour Raspberry - Raspbian.

Étant un adepte des systèmes basés sur RPM, je ne pouvais pas dépasser ce petit miracle et ne pas essayer mon CentOS préféré dessus.

L'article fournit des instructions pour créer un routeur Wi-Fi 5 GHz / CA à partir du Raspberry Pi 3 modèle B + basé sur le système d'exploitation CentOS. Il y aura plusieurs astuces standard, mais peu connues, et en bonus - un schéma de connexion à l'équipement Wi-Fi supplémentaire «framboise», lui permettant de fonctionner simultanément dans plusieurs modes (2,4 + 5 GHz).

image
(mix d'images en accès libre)

Nous notons immédiatement que certaines vitesses cosmiques ne fonctionneront pas. Je serre un maximum de 100 Mbit hors de ma "framboise" sur les ondes, et cela couvre la vitesse de mon fournisseur Internet. Pourquoi avons-nous besoin d'un AC aussi lent, si même sur N, en théorie, vous pouvez obtenir un demi-gigaoctet? Si vous avez posé cette question, alors allez au magasin pour un vrai routeur avec huit antennes externes.

0. Ce qui est nécessaire


  • En fait, le «produit framboise» du calibre lui-même: Pi 3 modèle B + (pour atteindre les vitesses et canaux convoités de 5 GHz);
  • MicroSD solide> = 4 Go;
  • Station de travail Linux avec lecteur / enregistreur microSD;
  • La présence de compétences suffisantes sous Linux, l'article est pour le Geek préparé;
  • Connectivité au réseau câblé (eth0) entre Raspberry et Linux, un serveur DHCP opérationnel sur le réseau local et accès à Internet à partir des deux appareils.

Un petit commentaire sur le dernier point. "Qu'est-ce qui est arrivé en premier, un œuf ou ..." comment faire un routeur Wi-Fi en l'absence de tout équipement d'accès à Internet? Laissons cet exercice divertissant en dehors de la portée de l'article et supposons simplement que Raspberry est connecté au réseau local par fil et dispose d'un accès Internet. Dans ce cas, nous n'avons pas besoin d'un téléviseur supplémentaire et d'un manipulateur pour configurer la framboise.

1. Installez CentOS


Page d'accueil du projet

Au moment d'écrire ces lignes, la version de travail de CentOS sur l'appareil est de 32 bits. Quelque part dans l'immensité du World Wide Web, je suis tombé sur des opinions concernant la dégradation des performances de ces systèmes d'exploitation sur l'architecture ARM 64 bits jusqu'à 20%. Je laisserai ce point sans commentaire.

Sous Linux, téléchargez l'image minimale avec le noyau " -RaspberryPI- " et écrivez-la sur microSD:

# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz | \ dd of=/dev/mmcblk0 bs=4M # sync 

Avant d'utiliser l'image, supprimez-en la section SWAP, développez la racine sur tout le volume disponible et débarrassez-vous de SELinux. L'algorithme est simple: nous faisons une copie de la racine sous Linux, supprimons toutes les partitions du microSD sauf la première (/ boot), créons une nouvelle racine et retournons son contenu à partir de la copie.

Exemple d'actions nécessaires (sortie console sévère)
 # 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éballé le contenu de la partition racine, il est temps d'y apporter quelques modifications.

Désactivez SELinux dans / mnt / etc / selinux / config :

 SELINUX=disabled 

Nous éditons / mnt / etc / fstab , ne laissant que deux entrées de partition: boot (/ boot, inchangé) et root (changez la valeur UUID, qui peut être trouvée en examinant 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 changeons les paramètres de démarrage du noyau: spécifiez le nouvel emplacement de la partition racine, désactivez la sortie des informations de débogage et (éventuellement) interdisez au noyau d'attribuer des adresses IPv6 sur les interfaces réseau:

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

Nous apportons le contenu de /mnt/cmdline.txt au format suivant (une ligne sans césure):

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

Terminé:

 # cd # umount /mnt # sync 


Nous réorganisons la microSD dans le "Malinka", l'exécutons et obtenons l'accès au réseau via ssh (root / centos).

2. Configuration de CentOS


Les trois premiers mouvements inébranlables: passwd , mise à jour yum -y , redémarrage .

Nous confions la gestion du réseau à networkd :

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

Créez le fichier (avec les répertoires) /etc/systemd/network/eth0.network :

 [Match] Name=eth0 [Network] DHCP=ipv4 

Nous redémarrons le "raspberry" et nous obtenons à nouveau un accès réseau via ssh (l'adresse IP peut changer). Notez que /etc/resolv.conf , précédemment créé par Network Manager, est utilisé. Par conséquent, en cas de problèmes de résolution, modifiez son contenu. Nous n'utiliserons pas de résolution système .

Nous supprimons le "superflu", 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 de cron et qui ne digère pas les temporisateurs systemd intégrés, peut installer les manquants. / var / log - et parcourez journalctl . Si vous avez besoin d'un historique des journaux (par défaut, les informations ne sont stockées qu'au moment du démarrage du système):

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

Désactivez l'utilisation d'IPv6 par les services principaux (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é que «prêt à l'emploi», il n'y a pas de capacité matérielle pour enregistrer l'état actuel de l'horloge lors du redémarrage, vous avez besoin d'une synchronisation. Un démon très bon et rapide pour cela - chrony - est déjà installé et démarre automatiquement. Vous pouvez changer les serveurs NTP au suivant.

/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 

Nous allons utiliser l' astuce pour définir le fuseau horaire. Notre objectif étant de créer un routeur Wi-Fi fonctionnant à des fréquences de 5 GHz, nous préparerons à l'avance les surprises du régulateur :
# miam info crda
Résumé: démon de conformité réglementaire pour les réseaux sans fil 802.11

Cette conception malveillante, centrée, entre autres, sur le fuseau horaire, «interdit» l'utilisation (en Russie) de fréquences 5 GHz et de canaux à «grands» nombres. L'astuce consiste à définir le fuseau horaire sans utiliser les noms du continent / de la ville, c'est-à-dire au lieu de:

 # timedatectl set-timezone Europe/Moscow 

Presse:

 # timedatectl set-timezone Etc/GMT-3 

Et la touche finale dans la coiffure du système:

 # hostnamectl set-hostname router 

/root/.bash_profile :

 . . . # User specific environment and startup programs export PROMPT_COMMAND="echo -n $(($(</sys/class/thermal/thermal_zone0/temp) / 1000))\'C\ " 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 l'installation du CentOS «vanille» sur le Raspberry Pi. Vous devriez avoir un PC qui (re) démarre en moins de 10 secondes, utilise moins de 15 mégaoctets de RAM et 1,5 gigaoctets de microSD (en fait moins de 1 gigaoctet en raison de incomplet / boot, mais nous serons honnêtes jusqu'à la fin):






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, «pompez» le pilote (firmware) de l'adaptateur Wi-Fi intégré. La page d'accueil du projet indique:
Wifi sur les Raspberry 3B et 3B +

Les fichiers du firmware Raspberry PI 3B / 3B + ne sont pas autorisés à ê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 que le projet CentOS ne peut pas faire ne nous est pas interdit pour un usage personnel. Nous remplaçons le firmware Wi-Fi de distribution dans CentOS par celui correspondant des développeurs Broadcom (ces mêmes blobs binaires détestés ...). Cela, en particulier, permettra l'utilisation de l'AC en mode point d'accès.

Mise à niveau du firmware Wi-Fi
Nous découvrons 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 micrologiciel est 7.45.18 datée du 03/01/2015, et nous nous souvenons de l'ensemble de nombres suivant: 43455 (brcmfmac43455-sdio.bin).

Téléchargez l'image actuelle de Raspbian . Les paresseux peuvent écrire l'image sur microSD et à partir de là, récupérer les fichiers avec le firmware. Et vous pouvez monter la partition racine de l'image sous Linux et copier celle dont vous avez besoin à partir de là:

 # 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 de micrologiciel résultants pour l'adaptateur Wi-Fi doivent être copiés avec le remplacement de "framboise" dans le répertoire / usr / lib / firmware / brcm /

On redémarre le futur routeur et on sourit plutôt:

 # 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 à partir du 27.02.2018.

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 ci-dessus, le "Malinka" est connecté par un "fil" au réseau local. Supposons qu'un fournisseur fournisse un accès Internet exactement de la même manière: une adresse sur un réseau public est émise dynamiquement par un serveur DHCP (elle peut être liée à un MAC). Dans ce cas, après la configuration finale de la "framboise", il suffit de "brancher" le câble fournisseur et tout est prêt. L'autorisation utilisant systemd-networkd fait l'objet d'un article séparé et n'est pas considérée ici.

Les interfaces Wi-Fi de Raspberry sont un réseau local et l'adaptateur Ethernet intégré (eth0) est externe. Nous numérotons le réseau local de manière statique, par exemple: 192.168.0.0/24. Adresse de Malinka: 192.168.0.1. Dans un réseau externe (Internet), un serveur DHCP fonctionnera.

Le problème de l'uniformité des noms et le célèbre programmeur guatémaltèque sont deux problèmes qui attendent tous ceux qui sont impliqués dans la configuration des interfaces réseau et des services dans les distributions systemd.

Chaos parallèle (digression lyrique)
Lennart Pottering a très bien fait son programme systemd . Ce système lance d'autres programmes si rapidement que, n'ayant pas récupéré du coup de sifflet de l'arbitre, ils trébuchent et tombent au départ sans même commencer leur course d'obstacles.

Mais sérieusement, la parallélisation agressive des processus lancés au début de l'OS systemd est une sorte de «pont d'âne» pour les pilotes LSB série expérimentés. Heureusement, ranger ce «chaos parallèle» s'avère simple, bien que la vérité ne soit pas toujours évidente.

Nous créons deux interfaces de pont virtuel avec des noms constants: lan et wan . Nous allons «connecter» les adaptateurs Wi-Fi au premier, et eth0 de la «framboise» 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 = yes élimine le besoin de faire allusion au noyau via sysctl pour activer le routage.
MACAddress = décommenter et modifier si nécessaire.

Tout d'abord, nous connectons eth0. N'oubliez pas le «problème d'uniformité» et utilisez uniquement l'adresse MAC de cette interface, que vous pouvez découvrir, par exemple, comme ceci:

 # cat /sys/class/net/eth0/address 

Créez /etc/systemd/network/eth.network :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Network] Bridge=wan 

Supprimez le fichier de configuration eth0 précédent, redémarrez le "raspberry" et obtenez un accès réseau à celui-ci (l'adresse IP changera probablement):

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

5. DNSMASQ


Pour la fabrication de points d'accès Wi-Fi, rien de mieux qu'un joli couple de dnsmasq + hostapd n'a pas encore été inventé. À mon avis.

Si quelqu'un a oublié, alors ...
hostapd est une chose qui gère les adaptateurs Wi-Fi (en particulier, il prendra la peine de les connecter au réseau virtuel de la framboise), il autorise et enregistre les clients sans fil.

dnsmasq - configure la pile réseau des clients: fournit des adresses IP, des serveurs DNS, une passerelle par défaut, etc.

Nous 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 

éditez-le à votre convenance.

/Etc/dnsmasq.conf minimaliste:

 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 est le paramètre bind-dynamic , qui dit au démon dnsmasq d'attendre que interface = lan apparaisse dans le système, et de ne pas s'évanouir d'une attaque de fière solitude après le démarrage.

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

6. HOSTAPD


Enfin, les configurations magic hostapd. Je ne doute pas que quelqu'un lise cet article à la recherche de ces lignes précieuses.

Avant d'installer hostapd, vous devez gérer le «problème d'uniformité». L'adaptateur Wi-Fi wlan0 intégré peut facilement changer son nom en wlan1 lors de la connexion d'équipements Wi-Fi USB supplémentaires. Par conséquent, nous fixerons les noms des interfaces de la manière suivante: nous proposerons des noms uniques d'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éez /etc/systemd/network/wl0.link :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Link] Name=wl0 

Nous allons maintenant être sûrs que wl0 est le Wi-Fi intégré. On redémarre la "framboise" pour voir ça.

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 le GKChP pendant une minute, nous modifions les paramètres dont nous avons besoin et vérifions manuellement les performances:

 # hostapd /etc/hostapd/hostapd.conf 

hostapd démarrera de manière interactive, traduisant son état dans la console. S'il n'y a pas d'erreur, les clients qui prennent en charge le mode AC peuvent déjà être connectés au point d'accès. Pour arrêter hostapd - Ctrl-C.

Il reste à inclure hostapd dans le démarrage du système. Si vous agissez normalement (systemctl enable hostapd), alors après le prochain redémarrage, vous pouvez obtenir un "démon dans le sang" d'un démon avec un diagnostic de " interface wl0 introuvable ". À la suite du «chaos parallèle», hostapd s'est terminé plus rapidement que le noyau n'a trouvé d'adaptateur sans fil.

Internet regorge de remèdes: du timeout forcé avant le démarrage du démon (pendant quelques minutes), à un autre démon qui surveille l'apparence de l'interface et (re) démarre le pad hôte. Les solutions fonctionnent bien, mais terriblement laides. Nous appelons à l'aide le grand systemd avec ses "objectifs" et " tâches " "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 apporter son contenu sous 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 est de lier dynamiquement hostapd à une 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 est en ligne - sans redémarrer le système. Cette technique sera particulièrement utile lors de la connexion à l'adaptateur Wi-Fi USB "framboise".

Vous pouvez maintenant:

 # systemctl enable hostapd # reboot 

7. IPTABLES


"Shta ???" © Oui, oui! Pas de systemd . Aucune nouvelle combinaison (sous forme de pare - feu ), qui fait finalement la même chose.

Nous utilisons les bons vieux iptables , dont les services, après leur démarrage, téléchargeront les règles du réseau dans le noyau et s'arrêteront tranquillement sans rester résidents et sans consommer de ressources. Systemd a une élégante IPMasquerade = , mais nous confierons toujours à iptables la traduction d'adresses (NAT) et le pare-feu.

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 câblées avec le "Malinka". C'est vrai, nous avons créé un routeur Wi-Fi, dont l'accès "via Internet" est par défaut interdit - désormais uniquement "par voie aérienne". Nous connectons le câble du fournisseur à Ethernet et commençons à surfer!

8. Bonus: + 2,4 GHz


Lorsque j'ai assemblé le premier routeur Raspberry selon le dessin décrit ci-dessus, j'ai trouvé dans mon ménage un certain nombre de gadgets qui, en raison de leurs limites de conception, le Wi-Fi ne pouvait pas voir du tout la "framboise". Reconfigurer le routeur pour qu'il fonctionne en 802.11b / g / n était antisportif, car la vitesse maximale "over the air" dans ce cas ne dépassait pas 40 Mbps, et mon fournisseur Internet préféré m'en propose 100 (via le câble).

En fait, une solution au problème a déjà été inventée: une deuxième interface Wi-Fi fonctionnant à 2,4 GHz, et un deuxième point d'accès. Dans l'étal le plus proche, j'ai acheté non pas le premier, mais le deuxième «sifflet» Wi-Fi USB qui m'est venu. Le vendeur a été tourmenté par des questions sur le chipset, la compatibilité avec les cœurs Linux ARM et la possibilité de travailler en mode AP (il a d'abord commencé).

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 USB Wi-Fi, donc un simple copier / coller peut vous décevoir.

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 apporter son contenu sous 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 reste à inclure 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.

Et enfin, je tiens à mettre en garde contre la qualité de l'adaptateur USB Wi-Fi et de l'alimentation Raspberry. Connecté "à un coup de sifflet chaud", il peut parfois provoquer un "coup de framboise" en raison de problèmes électriques à court terme.

Source: https://habr.com/ru/post/fr458994/


All Articles