Raspberry Pi + CentOS = Punto de acceso Wi-Fi (o Raspberry Router en un Red Hat)

Existe una gran cantidad de información en Internet sobre la creación de puntos de acceso Wi-Fi basados ​​en una PC Raspberry de placa única. Como regla, implica el uso del sistema operativo nativo para Raspberry - Raspbian.

Siendo adherente a los sistemas basados ​​en RPM, no pude superar este pequeño milagro y no probar mi CentOS favorito en él.

El artículo proporciona instrucciones para hacer un enrutador Wi-Fi de 5 GHz / CA desde el Raspberry Pi 3 Modelo B + basado en el sistema operativo CentOS. Habrá varios trucos estándar, pero poco conocidos, y como beneficio adicional: un dibujo de conexión al equipo de Wi-Fi adicional "frambuesa", que le permite trabajar simultáneamente en varios modos (2.4 + 5GHz).

imagen
(mezcla de imágenes de libre acceso)

Notamos de inmediato que algunas velocidades cósmicas no funcionarán. Exprimo un máximo de 100 Mbit de mi "frambuesa" por el aire, y esto cubre la velocidad de mi proveedor de Internet. ¿Por qué necesitamos una CA tan lenta, si incluso en N, en teoría, puede obtener medio gigabyte? Si hizo esta pregunta, vaya a la tienda para obtener un enrutador real con ocho antenas externas.

0. Lo que se necesita


  • En realidad, el "producto de frambuesa" del calibre mismo: Pi 3 Modelo B + (para lograr las codiciadas velocidades y canales de 5 GHz);
  • MicroSD sólida> = 4 GB;
  • Estación de trabajo Linux con lector / escritor microSD;
  • La presencia de suficientes habilidades en Linux, el artículo es para el Geek preparado;
  • Conectividad de red cableada (eth0) entre Raspberry y Linux, un servidor DHCP en funcionamiento en la red local, y acceso a Internet desde ambos dispositivos.

Un breve comentario sobre el último punto. "¿Qué vino primero, un huevo o ..." cómo hacer un enrutador Wi-Fi en ausencia de cualquier equipo de acceso a Internet? Dejemos este entretenido ejercicio fuera del alcance del artículo y simplemente supongamos que Raspberry está conectado a la red local por cable y tiene acceso a Internet. En este caso, no necesitamos un televisor adicional ni un manipulador para configurar la frambuesa.

1. Instalar CentOS


Página de inicio del proyecto

En el momento de escribir este artículo, la versión de trabajo de CentOS en el dispositivo es de 32 bits. En algún lugar de la inmensidad de la World Wide Web, me encontré con opiniones sobre la degradación del rendimiento de dichos sistemas operativos en la arquitectura ARM de 64 bits hasta en un 20%. Dejaré este punto sin comentarios.

En Linux, descargue la imagen mínima con el núcleo " -RaspberryPI- " y escríbala en microSD:

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

Antes de usar la imagen, elimine la sección SWAP, expanda la raíz a todo el volumen disponible y elimine SELinux. El algoritmo es simple: hacemos una copia de la raíz en Linux, eliminamos todas las particiones de la microSD excepto la primera (/ boot), creamos una nueva raíz y devolvemos su contenido de la copia.

Ejemplo de acciones necesarias (salida de consola severa)
 # 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 

Después de desempaquetar el contenido de la partición raíz, es hora de hacer algunos cambios.

Deshabilite SELinux en / mnt / etc / selinux / config :

 SELINUX=disabled 

Editamos / mnt / etc / fstab , dejando solo dos entradas de partición: boot (/ boot, sin cambios) y root (cambie el valor de UUID, que se puede encontrar examinando la salida del comando blkid en Linux):

 UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0 UUID=6938-F4F2 /boot vfat defaults,noatime 0 0 

Finalmente, cambiamos los parámetros de arranque del kernel: especificamos la nueva ubicación de la partición raíz, deshabilitamos la salida de información de depuración y (opcionalmente) prohibimos que el kernel asigne direcciones IPv6 en las interfaces de red:

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

Traemos el contenido de /mnt/cmdline.txt a la siguiente forma (una línea sin guión):

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

Hecho:

 # cd # umount /mnt # sync 


Reorganizamos la microSD en "Malinka", la ejecutamos y obtenemos acceso de red a través de ssh (root / centos).

2. Configurando CentOS


Los primeros tres movimientos inquebrantables: passwd , yum -y update , reinicio .

Damos administración de red a networkd :

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

Cree el archivo (junto con los directorios) /etc/systemd/network/eth0.network :

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

Reiniciamos la "frambuesa" y nuevamente tenemos acceso a la red a través de ssh (la dirección IP puede cambiar). Tenga en cuenta que se utiliza /etc/resolv.conf , creado previamente por Network Manager. Por lo tanto, en caso de problemas con la resolución, edite su contenido. No utilizaremos systemd-resolve .

Eliminamos lo "superfluo", reparamos y agilizamos la carga del sistema operativo:

 # 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én necesita cron y quién no digiere los temporizadores incorporados del sistema, puede instalar los que faltan. / var / log - y revisa journalctl . Si necesita un historial de registro (de forma predeterminada, la información se almacena solo desde el momento en que se inicia el sistema):

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

Deshabilite el uso de IPv6 por los servicios principales (si es necesario)
/ etc / ssh / sshd_config :

 AddressFamily inet 

/ etc / sysconfig / chronyd :
 OPTIONS="-4" 


La relevancia del tiempo en la "frambuesa" es algo importante. Como "listo para usar" no hay capacidad de hardware para guardar el estado actual del reloj al reiniciar, necesita sincronización. Un demonio muy bueno y rápido para esto, Chrony , ya está instalado y se inicia automáticamente. Puede cambiar los servidores NTP a la siguiente.

/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 

Usaremos el truco para establecer la zona horaria. Dado que nuestro objetivo es crear un enrutador Wi-Fi que funcione a frecuencias de 5 GHz, nos prepararemos de antemano para las sorpresas del regulador :
# yum info crda
Resumen: demonio de cumplimiento normativo para redes inalámbricas 802.11

Este diseño rencoroso, centrado, entre otras cosas, en la zona horaria, "prohíbe" el uso (en Rusia) de frecuencias de 5 GHz y canales con números "grandes". El truco consiste en establecer la zona horaria sin usar los nombres del continente / ciudad, es decir, en lugar de:

 # timedatectl set-timezone Europe/Moscow 

Prensa:

 # timedatectl set-timezone Etc/GMT-3 

Y los toques finales en el peinado del sistema:

 # 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. Complementos CentOS


Todo lo que se dijo anteriormente puede considerarse instrucciones completas para instalar CentOS "vainilla" en la Raspberry Pi. Debe tener una PC que (re) arranque en menos de 10 segundos, use menos de 15 megabytes de RAM y 1.5 gigabytes de microSD (en realidad menos de 1 gigabyte debido a un arranque / arranque incompleto, pero seremos honestos hasta el final):






Para instalar el software de punto de acceso Wi-Fi en este sistema, deberá expandir ligeramente las capacidades de la distribución estándar de CentOS. En primer lugar, "bombee" el controlador (firmware) del adaptador Wi-Fi incorporado. La página de inicio del proyecto dice:
Wifi en Raspberry 3B y 3B +

El proyecto CentOS no puede distribuir los archivos de firmware Raspberry PI 3B / 3B +. Puede utilizar los siguientes artículos para comprender el problema, obtener el firmware y configurar el wifi.

Lo que el proyecto CentOS no puede hacer no está prohibido para uso personal. Reemplazamos el firmware de distribución de Wi-Fi en CentOS con el correspondiente de los desarrolladores de Broadcom (esos mismos blobs binarios odiados ...). Esto, en particular, permitirá el uso de CA en modo de punto de acceso.

Actualización de firmware de Wi-Fi
Descubrimos el modelo del dispositivo y la versión actual del 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 

Vemos que la versión del firmware es 7.45.18 con fecha 01/03/2015, y recordamos el siguiente conjunto de números: 43455 (brcmfmac43455-sdio.bin).

Descargue la imagen actual de Raspbian . La gente perezosa puede escribir la imagen en microSD y desde allí recoger los archivos con el firmware. Y puede montar la partición raíz de la imagen en Linux y copiar la que necesita desde allí:

 # 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 

Los archivos de firmware resultantes para el adaptador de Wi-Fi deben copiarse con el reemplazo de la "frambuesa" en el directorio / usr / lib / firmware / brcm /

Reiniciamos el futuro enrutador y sonreiremos más bien:

 # 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 

Versión: 7.45.154 del 27/02/2018.

Y por supuesto 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. Configuración de red y desafíos futuros


Como acordamos anteriormente, el "Malinka" está conectado por un "cable" a la red local. Suponga que un proveedor proporciona acceso a Internet exactamente de la misma manera: una dirección en una red pública es emitida dinámicamente por un servidor DHCP (puede vincularse a un MAC). En este caso, después de la configuración final de la "frambuesa", es suficiente "enchufar" el cable del proveedor y todo está listo. La autorización mediante systemd-networkd es el tema de un artículo separado y no se considera aquí.

La (s) interfaz (es) Wi-Fi de Raspberry es una red local, y el adaptador Ethernet incorporado (eth0) es externo. Numeramos la red local estáticamente, por ejemplo: 192.168.0.0/24. Dirección de Malinka: 192.168.0.1. En una red externa (Internet) funcionará un servidor DHCP.

El problema de la uniformidad de los nombres y el famoso programador guatemalteco son dos problemas que esperan a todos los involucrados en la configuración de interfaces de red y servicios en las distribuciones de systemd.

Caos Paralelo (digresión lírica)
Lennart Pottering hizo su programa systemd muy bien. Este sistema lanza otros programas tan rápido que, al no haberse recuperado del silbato del árbitro, tropiezan y caen al inicio sin siquiera comenzar su carrera de obstáculos.

Pero, en serio, la paralelización agresiva de los procesos lanzados al comienzo del systemd-OS es una especie de "puente de burro" para los controladores LSB seriales experimentados. Afortunadamente, ordenar este "caos paralelo" resulta ser simple, aunque la verdad no siempre es obvia.

Creamos dos interfaces de puente virtual con nombres constantes: lan y wan . "Conectaremos" los adaptadores de Wi-Fi al primero y eth0 de la "frambuesa" al segundo.

/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 elimina la necesidad de insinuar el núcleo a través de sysctl para habilitar el enrutamiento.
MACAddress = descomentar y cambiar si es necesario.

Primero, conectamos eth0. Recuerde el "problema de uniformidad" y use solo la dirección MAC de esta interfaz, que puede encontrar, por ejemplo, así:

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

Cree /etc/systemd/network/eth.network :

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

Elimine el archivo de configuración eth0 anterior, reinicie la "frambuesa" y obtenga acceso de red (es probable que la dirección IP cambie):

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

5. DNSMASQ


Para la fabricación de puntos de acceso Wi-Fi, nada mejor que una dulce pareja de dnsmasq + hostapd aún no se ha inventado. En mi opinion.

Si alguien lo olvidó, entonces ...
hostapd es una cosa que gestiona los adaptadores de Wi-Fi (en particular, tomará la molestia de conectarlos a la LAN virtual de la frambuesa), autoriza y registra clientes inalámbricos.

dnsmasq : configura la pila de red de clientes: proporciona direcciones IP, servidores DNS, una puerta de enlace predeterminada y similares.

Comenzamos con dnsmasq:

 # yum install dnsmasq 

Plantilla /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 

edítalo a tu gusto.

Minimalista /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 "magia" aquí es el parámetro bind-dynamic , que le dice al dnsmasq daemon que espere a que aparezca interface = lan en el sistema, y ​​que no se desmaye de un ataque de orgullosa soledad después del comienzo.

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

6. HOSTAPD


Finalmente, las configuraciones mágicas de hostapd. No tengo dudas de que alguien está leyendo este artículo en busca precisamente de estas preciadas líneas.

Antes de instalar hostapd, debe lidiar con el "problema de uniformidad". El adaptador de Wi-Fi incorporado wlan0 puede cambiar fácilmente su nombre a wlan1 cuando se conecta un equipo de USB Wi-Fi adicional. Por lo tanto, arreglamos los nombres de las interfaces de la siguiente manera: crearemos nombres únicos de adaptadores (inalámbricos) y los vincularemos a las direcciones MAC.

Para el adaptador de Wi-Fi incorporado, que todavía es wlan0:

 # cat /sys/class/net/wlan0/address b8:27:eb:xx:xx:xx 

Cree /etc/systemd/network/wl0.link :

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

Ahora nos aseguraremos de que wl0 sea ​​el Wi-Fi incorporado. Reiniciamos la "frambuesa" para ver esto.

Instalar:

 # yum install hostapd wireless-tools 

Archivo de configuración /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 

Sin olvidar el GKChP por un minuto, cambiamos los parámetros que necesitamos y verificamos manualmente el rendimiento:

 # hostapd /etc/hostapd/hostapd.conf 

hostapd comenzará interactivamente, traduciendo su estado a la consola. Si no hay errores, los clientes que admiten el modo AC ya pueden conectarse al punto de acceso. Para detener hostapd - Ctrl-C.

Queda por incluir hostapd en el inicio del sistema. Si actúa de manera estándar (systemctl enable hostapd), luego del próximo reinicio, puede obtener un "demonio en la sangre" de un demonio con un diagnóstico de " interfaz wl0 no encontrada ". Como resultado del "caos paralelo", hostapd terminó más rápido de lo que el núcleo encontró un adaptador inalámbrico.

Internet está lleno de medicamentos: desde el tiempo de espera forzado antes de que comience el demonio (durante unos minutos), hasta otro demonio que monitorea la apariencia de la interfaz y (re) inicia el hostpad. Las soluciones funcionan bastante, pero son terriblemente feas. Pedimos ayuda al gran systemd con sus "objetivos" y " tareas " "dependencias".

Copie el archivo del servicio de distribución en /etc/systemd/system/hostapd.service :

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

y llevar su contenido a la siguiente forma:

 [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 magia del archivo de servicio actualizado es vincular dinámicamente hostapd a un nuevo objetivo: la interfaz wl0. Cuando aparece la interfaz, se inicia el demonio; cuando desaparece, se detiene. Y todo está en línea, sin reiniciar el sistema. Especialmente esta técnica será útil cuando se conecte al adaptador USB Wi-Fi "frambuesa".

Ahora puedes:

 # systemctl enable hostapd # reboot 

7. IPTABLES


"Shta ???" © ¡Sí, sí! No systemd . No hay cosechadoras novedosas (en forma de firewalld ), que finalmente hacen lo mismo.

Utilizamos las buenas y antiguas iptables , cuyos servicios, después de su inicio, subirán las reglas de red al núcleo y se cerrarán silenciosamente sin permanecer residentes y sin consumir recursos. Systemd tiene una elegante IPMasquerade = , pero aún confiaremos a iptables con traducción de direcciones (NAT) y firewall.

Instalar:

 # yum install iptables-services # systemctl enable iptables ip6tables 

Prefiero almacenar la configuración de iptables como un script (ejemplo):

 #!/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 

Ejecutamos el script anterior y perdemos la capacidad de establecer nuevas conexiones ssh cableadas con el "Malinka". Así es, creamos un enrutador Wi-Fi, cuyo acceso "por Internet" está prohibido por defecto, ahora solo "por aire". ¡Conectamos el cable del proveedor a Ethernet y comenzamos a navegar!

8. Bonificación: + 2.4GHz


Cuando ensamblé el primer enrutador Raspberry del dibujo descrito anteriormente, descubrí en mi granja varios dispositivos que, debido a sus limitaciones de diseño, el Wi-Fi no podía ver la "frambuesa" en absoluto. La reconfiguración del enrutador para que funcione en 802.11b / g / n fue antideportiva, ya que la velocidad máxima "inalámbrica" ​​en este caso no superó los 40 Mbps, y mi proveedor de Internet favorito me ofrece 100 (por cable).

De hecho, ya se ha inventado una solución al problema: una segunda interfaz Wi-Fi que funciona a 2,4 GHz y un segundo punto de acceso. En el puesto más cercano, compré no el primero, sino el segundo "silbato" de Wi-Fi USB que me llegó. El vendedor fue atormentado por preguntas sobre el conjunto de chips, la compatibilidad con los núcleos ARM de Linux y la posibilidad de trabajar en modo AP (comenzó por primera vez).

Configuramos el "silbato" por analogía con el adaptador de Wi-Fi incorporado.

Primero, cámbiele el nombre a 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 

Confiaremos la administración de la nueva interfaz Wi-Fi a un demonio hostapd separado, que comenzará y se detendrá dependiendo de la presencia de un "silbato" estrictamente definido en el sistema: wl1.

Archivo de configuración /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] 

El contenido de este archivo depende directamente del modelo del adaptador USB Wi-Fi, por lo que una copia / pegado trivial puede decepcionarte.

Copie el archivo del servicio de distribución en /etc/systemd/system/hostapd2.service :

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

y llevar su contenido a la siguiente forma:

 [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 

Queda por incluir una nueva instancia de hostapd:

 # systemctl enable hostapd2 

Eso es todo! Haz sonar el silbato y la frambuesa en sí, mira las redes inalámbricas alrededor.

Y, por último, quiero advertir sobre la calidad del adaptador USB Wi-Fi y la fuente de alimentación Raspberry. Conectado "a un silbato", a veces puede causar un "bloqueo de frambuesa" debido a problemas eléctricos a corto plazo.

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


All Articles