Hay una gran cantidad de información en Internet sobre la creación de puntos de acceso Wi-Fi basados en una PC de placa única Raspberry. Como regla general, esto significa utilizar el sistema operativo Raspbian nativo de Raspberry.
Como partidario de los sistemas basados en RPM, no podía pasar por alto este pequeño milagro y no probar mi querido CentOS en él.
El artículo proporciona instrucciones para crear un enrutador Wi-Fi de 5 GHz/CA a partir de una 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 para conectar equipos Wi-Fi adicionales a la Raspberry, lo que le permitirá funcionar simultáneamente en varios modos (2,4+5 GHz).
(mezcla de imágenes disponibles gratuitamente)
Notemos de inmediato que algunas velocidades cósmicas no funcionarán. Extraigo un máximo de 100 Mbps de mi Raspberry por aire, y esto cubre la velocidad de mi proveedor de Internet. ¿Por qué se necesita un aire acondicionado tan lento si, en teoría, se puede obtener medio gigabit incluso en N? Si te has hecho esta pregunta, ve a la tienda a comprar un enrutador real con ocho antenas externas.
0. Qué necesitarás
- En realidad, el “producto frambuesa” en sí es de calibre: Pi 3 Modelo B+ (para lograr las codiciadas velocidades y canales de 5GHz);
- Buena microSD >= 4GB;
- Estación de trabajo con Linux y lector/grabador de microSD;
- Disponibilidad de habilidades suficientes en Linux, el artículo es para un Geek capacitado;
- Conectividad de red cableada (eth0) entre Raspberry y Linux, ejecutando servidor DHCP en la red local y acceso a Internet desde ambos dispositivos.
Un pequeño comentario sobre el último punto. "¿Qué fue primero, el huevo o..." ¿Cómo hacer un enrutador Wi-Fi sin ningún equipo de acceso a Internet? Dejemos este entretenido ejercicio fuera del alcance del artículo y simplemente supongamos que la Raspberry está conectada a la red local por cable y tiene acceso a Internet. En este caso, no necesitaremos un televisor adicional ni un manipulador para configurar la "frambuesa".
1. Instalar CentOS
Al momento de escribir este artículo, la versión en ejecución de CentOS en el dispositivo es de 32 bits. En algún lugar de la World Wide Web encontré opiniones de que el rendimiento de estos sistemas operativos en la arquitectura ARM de 64 bits se reduce hasta en un 20%. Dejaré este momento sin comentarios.
En Linux, descargue la imagen mínima con el kernel "-FrambuesaPI-"y escríbalo en la microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Antes de comenzar a usar la imagen, le quitaremos la partición SWAP, expandiremos la raíz a todo el volumen disponible y nos desharemos de SELinux. El algoritmo es simple: hacer una copia de la raíz en Linux, eliminar todas las particiones de la microSD excepto la primera (/boot), crear una nueva raíz y devolver su contenido de la copia.
Ejemplo de acciones requeridas (salida de consola grave)
# 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 descomprimir el contenido de la partición raíz, es hora de realizarle algunos cambios.
Deshabilitar SELinux en /mnt/etc/selinux/config:
SELINUX=disabled
Edición /mnt/etc/fstab, dejando en él solo dos entradas sobre las particiones: boot (/boot, sin cambios) y root (cambiamos el valor UUID, que se puede descubrir estudiando 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 una nueva ubicación para 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
Aqui esta el contenido /mnt/cmdline.txt al siguiente formulario (una línea sin guiones):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Hecho:
# cd
# umount /mnt
# sync
Reorganizamos la microSD en la “frambuesa”, la ejecutamos y obtenemos acceso a la red a través de ssh (root/centos).
2. Configurar CentOS
Los primeros tres movimientos inquebrantables: passwd, yum -y actualización, reiniciar.
Regalamos gestión de red en red:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Crear un archivo (junto con directorios) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Reiniciamos el "frambuesa" y nuevamente obtenemos acceso a la red a través de ssh (la dirección IP puede cambiar). Presta atención a lo que se utiliza. / Etc / resolv.conf, creado anteriormente por Network Manager. Por lo tanto, en caso de problemas con la resolución, edite su contenido. Usar systemd-resuelto nosotros no.
Eliminamos lo “innecesario”, reparamos y aceleramos la carga del SO:
# 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 quien no digiere lo incorporado
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Deshabilitar el uso de IPv6 por servicios básicos (si es necesario)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
La relevancia del tiempo en la “frambuesa” es algo importante. Dado que de fábrica no existe la capacidad de hardware para guardar el estado actual del reloj al reiniciar, es necesaria la sincronización. Un demonio muy bueno y rápido para esto es crony - ya instalado y se inicia automáticamente. Puede cambiar los servidores NTP a los más cercanos.
/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
Para establecer la zona horaria usaremos truco. Dado que nuestro objetivo es crear un enrutador Wi-Fi que funcione en frecuencias de 5 GHz, nos prepararemos para las sorpresas con anticipación. regulador:
# mmm información crda
Resumen: demonio de cumplimiento normativo para redes inalámbricas 802.11
Este malvado diseño, basado también en el huso horario, “prohíbe” el uso (en Rusia) de frecuencias de 5GHz y canales con números “elevados”. El truco consiste en establecer una zona horaria sin utilizar los nombres de continentes/ciudades, es decir, en lugar de:
# timedatectl set-timezone Europe/Moscow
Pulsamos:
# timedatectl set-timezone Etc/GMT-3
Y los toques finales al peinado del sistema:
# 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. Complementos de CentOS
Todo lo dicho anteriormente puede considerarse una instrucción completa para instalar CentOS "vainilla" en Raspberry Pi. Deberías terminar con una PC que (re)arranca en menos de 10 segundos, usa menos de 15 Megabytes de RAM y 1.5 Gigabytes de microSD (en realidad, menos de 1 Gigabyte debido a un /arranque incompleto, pero seamos honestos).
Para instalar el software del punto de acceso Wi-Fi en este sistema, deberá ampliar ligeramente las capacidades de la distribución estándar de CentOS. En primer lugar, actualicemos el controlador (firmware) del adaptador Wi-Fi integrado. La página de inicio del proyecto dice:
Wifi en la Raspberry 3B y 3B+
El Proyecto CentOS no permite distribuir los archivos de firmware de Raspberry PI 3B/3B+. Puede utilizar los siguientes artículos para comprender el problema, obtener el firmware y configurar el wifi.
Lo que está prohibido para el proyecto CentOS no lo está para nosotros para uso personal. Reemplazamos el firmware de distribución Wi-Fi en CentOS por el correspondiente de los desarrolladores de Broadcom (esos mismos odiados blobs binarios...). Esto, en particular, le permitirá utilizar AC en modo punto de acceso.
Actualización del firmware de Wi-FiDescubra 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 del 01.03.2015/XNUMX/XNUMX, y recordamos el siguiente conjunto de números: 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
Los archivos de firmware del adaptador Wi-Fi resultantes deben copiarse y reemplazarse con "frambuesa" en el directorio /usr/lib/firmware/brcm/
Reiniciamos el futuro enrutador y sonreímos con satisfacción:
# 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/XNUMX/XNUMX.
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 la red y desafíos futuros
Como acordamos anteriormente, la "frambuesa" está conectada por "cable" a la red local. Supongamos que el proveedor proporciona acceso a Internet exactamente de la misma manera: la dirección en la red pública la emite dinámicamente el servidor DHCP (quizás con enlace MAC). En este caso, después de la configuración final de la frambuesa, sólo necesitas "conectar" el cable del proveedor y listo. Autorización utilizando systemd-red - el tema de un artículo separado y no se trata aquí.
Las interfaces Wi-Fi de Raspberry son una red local y el adaptador Ethernet incorporado (eth0) es externo. Numeremos la red local estáticamente, por ejemplo: 192.168.0.0/24. Dirección de frambuesa: 192.168.0.1. Un servidor DHCP funcionará en la red externa (Internet).
Caos paralelo (digresión lírica)Lennart Pottering ha elaborado su propio programa sistemad Muy bien. Este sistemad lanza otros programas tan rápido que, al no tener tiempo de recuperarse del silbato del árbitro, tropiezan y caen al principio sin siquiera comenzar su carrera de obstáculos.
Pero en serio, la paralelización agresiva de los procesos iniciados al inicio del sistema operativo systemd es una especie de "puente de burro" para los especialistas experimentados en LSB secuencial. Afortunadamente, poner orden en este “caos paralelo” resulta sencillo, aunque no siempre obvio.
Creamos dos interfaces de puente virtual con nombres constantes: lan и pálido. “Conectaremos” el/los adaptador(es) Wi-Fi al primero y el eth0 “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=sí elimina la necesidad de indicar al kernel a través de sysctl para habilitar el enrutamiento.
Dirección MAC= Descomentemos y cambiemos si es necesario.
Primero “conectamos” eth0. Recordamos el "problema de uniformidad" y usamos solo la dirección MAC de esta interfaz, que se puede encontrar, por ejemplo, así:
# cat /sys/class/net/eth0/address
Crear /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Eliminamos el archivo de configuración anterior eth0, reiniciamos la Raspberry y obtenemos acceso a la red (lo más probable es que la dirección IP cambie):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Para crear puntos de acceso Wi-Fi, nada mejor que un dulce par de dnsmasq + hostapd Aún no lo he descubierto. En mi opinión.
En caso de que alguien lo haya olvidado, entonces...
Comencemos con dnsmasq:
# yum install dnsmasq
Patrón / 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í radica en el parámetro vinculación dinámica, que le dice al demonio dnsmasq que espere hasta que aparezca en el sistema interfaz=lan, y no desmayarse por un ataque de orgullosa soledad después del comienzo.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Y finalmente, las configuraciones mágicas de hostapd. No tengo ninguna duda de que alguien está leyendo este artículo en busca precisamente de estas preciadas líneas.
Antes de instalar hostapd, es necesario superar el "problema de uniformidad". El adaptador Wi-Fi incorporado wlan0 puede cambiar fácilmente su nombre a wlan1 al conectar equipos Wi-Fi USB adicionales. Por lo tanto, arreglaremos los nombres de las interfaces de la siguiente manera: crearemos nombres únicos para los adaptadores (inalámbricos) y los vincularemos a direcciones MAC.
Para el adaptador Wi-Fi integrado, que sigue siendo wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Crear /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Ahora estaremos seguros de que wl0 - Esto es Wi-Fi incorporado. Reiniciamos la Raspberry para asegurarnos de esto.
Instalar en pc:
# 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 ni un momento
# hostapd /etc/hostapd/hostapd.conf
hostapd se iniciará en modo interactivo y transmitirá su estado a la consola. Si no hay errores, entonces los clientes que admiten el modo AC ya pueden conectarse al punto de acceso. Para detener hostapd - Ctrl-C.
Todo lo que queda es habilitar hostapd en el inicio del sistema. Si hace lo estándar (systemctl enable hostapd), luego del próximo reinicio puede obtener un demonio "rodando en sangre" con el diagnóstico "interfaz wl0 no encontrada". Como resultado del "caos paralelo", hostapd se inició más rápido de lo que el kernel encontró el adaptador inalámbrico.
Internet está lleno de soluciones: desde un tiempo de espera forzado antes de iniciar el demonio (varios minutos), hasta otro demonio que monitorea la apariencia de la interfaz y (re)inicia el hostpad. Las soluciones son bastante viables, pero terriblemente feas. Pedimos ayuda al grande sistemad con sus “metas” y “tareas” y “dependencias”.
Copie el archivo del servicio de distribución a /etc/systemd/system/hostapd.servicio:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
y reducir 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 radica en el enlace dinámico de hostapd al nuevo destino: la interfaz wl0. Cuando aparece la interfaz, el demonio se inicia; cuando desaparece, se detiene. Y todo esto está en línea, sin reiniciar el sistema. Esta técnica te resultará especialmente útil a la hora de conectar un adaptador Wi-Fi USB a una Raspberry.
Ahora usted puede:
# systemctl enable hostapd
# reboot
7. IPTABLES
“¿Qué???” © ¡Sí, sí! Ninguno sistemad. No hay cosechadoras novedosas (en la forma firewalld), que acaban haciendo lo mismo.
Usemos el viejo y bueno. iptables, cuyos servicios, después de iniciarse, cargarán reglas de red en el kernel y se cerrarán silenciosamente sin permanecer residentes y sin consumir recursos. systemd tiene un elegante IPMascarada=, pero aún así confiaremos la traducción de direcciones (NAT) y el firewall a iptables.
Instalar en pc:
# 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 por cable con Raspberry. Así es, hemos creado un enrutador Wi-Fi, cuyo acceso "a través de Internet" está prohibido de forma predeterminada; ahora solo "por aire". ¡Conectamos el cable Ethernet del proveedor y empezamos a navegar!
8. Bonificación: +2,4 GHz
Cuando monté el primer enrutador Raspberry usando el dibujo descrito anteriormente, descubrí varios dispositivos en mi hogar que, debido a sus limitaciones de diseño de Wi-Fi, no podían ver la "frambuesa" en absoluto. Reconfigurar el enrutador para que funcione en 802.11b/g/n no fue deportivo, ya que la velocidad máxima "por aire" en este caso no superó los 40 Mbit, 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 una frecuencia de 2,4 GHz y un segundo punto de acceso. En un puesto cercano no compré el primero, sino el segundo “silbato” USB Wi-Fi que encontré. El vendedor estaba atormentado por preguntas sobre el chipset, la compatibilidad con los kernels ARM Linux y la posibilidad de trabajar en modo AP (fue el primero en comenzar).
Configuramos el "silbato" por analogía con el adaptador Wi-Fi incorporado.
Primero, cambiemosle 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 gestión de la nueva interfaz Wi-Fi a un demonio hostapd separado, que se iniciará 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 Wi-Fi USB, por lo que una copia y pegado banal puede fallar.
Copie el archivo del servicio de distribución a /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
y reducir 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
Todo lo que queda es habilitar una nueva instancia de hostapd:
# systemctl enable hostapd2
¡Eso es todo! Tira del "silbato" y de la "frambuesa", mira las redes inalámbricas que te rodean.
Y por último, quiero advertiros sobre la calidad del adaptador USB Wi-Fi y la fuente de alimentación de la Raspberry. El "silbato caliente" conectado a veces puede causar "congelación de frambuesa" debido a problemas eléctricos a corto plazo.
Fuente: habr.com