Hai unha gran cantidade de información en Internet sobre a creación de puntos de acceso Wi-Fi baseados nun PC de placa única Raspberry. Como regra xeral, isto significa usar o sistema operativo Raspbian nativo de Raspberry.
Sendo un adepto dos sistemas baseados en RPM, non podía pasar por alto este pequeno milagre e non probar o meu querido CentOS.
O artigo ofrece instrucións para facer un enrutador Wi-Fi de 5 GHz/AC a partir dun Raspberry Pi 3 Modelo B+ baseado no sistema operativo CentOS. Haberá varios trucos estándar pero pouco coñecidos e, como extra, un debuxo para conectar equipos Wi-Fi adicionais ao Raspberry, o que lle permitirá funcionar simultaneamente en varios modos (2,4 + 5 GHz).
(mestura de imaxes dispoñibles libremente)
Notemos de inmediato que algunhas velocidades cósmicas non funcionarán. Saco un máximo de 100 Mbps do meu Raspberry ao aire, e isto cobre a velocidade do meu provedor de Internet. Por que necesitas un AC tan lento, se en teoría podes conseguir medio gigabit incluso en N? Se te fixeches esta pregunta, vai á tenda para mercar un enrutador real con oito antenas externas.
0. O que necesitarás
- En realidade, o propio "produto de framboesa" é de calibre: Pi 3 Model B+ (para acadar as ansiadas velocidades e canles de 5GHz);
- Boa microSD >= 4 GB;
- Estación de traballo con lector/escritor Linux e microSD;
- Dispoñibilidade de habilidades suficientes en Linux, o artigo é para un Geek adestrado;
- Conectividade de rede por cable (eth0) entre Raspberry e Linux, executando o servidor DHCP na rede local e acceso a Internet desde ambos os dispositivos.
Un pequeno comentario sobre o último punto. "Que foi primeiro, o ovo ou..." como facer un router Wi-Fi sen ningún equipo de acceso a Internet? Deixemos este entretido exercicio fóra do alcance do artigo e simplemente supoñamos que o Raspberry está conectado á rede local por cable e ten acceso a Internet. Neste caso, non necesitaremos un televisor adicional e un manipulador para configurar a "framboesa".
1. Instala CentOS
No momento de escribir este artigo, a versión en execución de CentOS no dispositivo é de 32 bits. Nalgún lugar da World Wide Web atopeime con opinións de que o rendemento deste tipo de sistemas operativos na arquitectura ARM de 64 bits redúcese ata un 20%. Vou deixar este momento sen comentarios.
En Linux, descarga a imaxe mínima co núcleo "-RaspberryPI-"e escríbeo na microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Antes de comezar a usar a imaxe, eliminaremos dela a partición SWAP, expandiremos a raíz a todo o volume dispoñible e desfaceremos SELinux. O algoritmo é sinxelo: fai unha copia da raíz en Linux, elimina todas as particións da microSD excepto a primeira (/boot), crea unha nova raíz e devolve o seu contido desde a copia.
Exemplo de accións requiridas (saída severa da consola)
# 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
Despois de desempaquetar o contido da partición raíz, é hora de facerlle algúns cambios.
Desactivar SELinux en /mnt/etc/selinux/config:
SELINUX=disabled
Edición /mnt/etc/fstab, deixando nel só dúas entradas sobre as particións: boot (/boot, sen cambios) e root (cambiamos o valor UUID, que se pode descubrir estudando a saída do 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 os parámetros de arranque do núcleo: especificamos unha nova localización para a partición raíz, desactivamos a saída da información de depuración e (opcionalmente) prohibimos que o núcleo asigne enderezos IPv6 nas interfaces de rede:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Aquí está o contido /mnt/cmdline.txt á seguinte forma (unha liña sen guións):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Feito:
# cd
# umount /mnt
# sync
Reorganizamos a microSD na "framboesa", lanzámola e accedemos á rede a través de ssh (root/centos).
2. Configurando CentOS
Os tres primeiros movementos inquebrantables: passwd, yum e actualización, reinicio.
Regalamos xestión de rede en rede:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Crear un ficheiro (xunto cos directorios) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Reiniciamos a "framboesa" e de novo accedemos á rede a través de ssh (o enderezo IP pode cambiar). Presta atención ao que se usa /etc/resolv.conf, creado anteriormente por Network Manager. Polo tanto, en caso de problemas coa resolución, edite o seu contido. Use resolto por sistema non o faremos.
Eliminamos o "innecesario", reparamos e aceleramos a carga do 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
Quen precisa cron e quen non dixire o incorporado
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Desactivar o uso de IPv6 polos servizos básicos (se é necesario)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
A relevancia do tempo na "framboesa" é unha cousa importante. Xa que fóra da caixa non hai capacidade de hardware para gardar o estado actual do reloxo ao reiniciar, é necesaria a sincronización. Un daemon moi bo e rápido para isto é cronía - xa instalado e comeza automaticamente. Podes cambiar os servidores NTP polos máis próximos.
/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 o fuso horario utilizaremos truco. Dado que o noso obxectivo é crear un enrutador Wi-Fi que funcione en frecuencias de 5 GHz, prepararemos sorpresas con antelación regulador:
# ñam información crda
Resumo: daemon de conformidade normativa para redes sen fíos 802.11
Este deseño malvado, tamén baseado no fuso horario, "prohibe" o uso (en Rusia) de frecuencias de 5GHz e canles con números "altos". O truco é establecer unha zona horaria sen usar os nomes de continentes/cidades, é dicir, en lugar de:
# timedatectl set-timezone Europe/Moscow
Prememos:
# timedatectl set-timezone Etc/GMT-3
E os últimos retoques ao peiteado do 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 o que se dixo anteriormente pode considerarse instrucións completas para instalar CentOS "vainilla" no Raspberry Pi. Deberías ter un PC que (re)inicia en menos de 10 segundos, usa menos de 15 megabytes de RAM e 1.5 gigabytes de microSD (en realidade menos de 1 gigabyte debido a un /boot incompleto, pero sexamos sinceros).
Para instalar o software de punto de acceso Wi-Fi neste sistema, terás que ampliar lixeiramente as capacidades da distribución estándar de CentOS. Primeiro de todo, imos actualizar o controlador (firmware) do adaptador Wi-Fi integrado. A páxina de inicio do proxecto di:
Wifi nos Raspberry 3B e 3B+
Os ficheiros de firmware Raspberry PI 3B/3B+ non poden ser distribuídos polo Proxecto CentOS. Podes usar os seguintes artigos para comprender o problema, obter o firmware e configurar a wifi.
O que está prohibido para o proxecto CentOS non está prohibido para nós para uso persoal. Substituímos o firmware de distribución Wi-Fi en CentOS polo correspondente dos desenvolvedores de Broadcom (eses mesmos odiados blobs binarios...). Isto, en particular, permitirache usar AC no modo de punto de acceso.
Actualización do firmware Wi-FiDescubra o modelo do dispositivo e a versión actual do 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 a versión do firmware é a 7.45.18 do 01.03.2015/XNUMX/XNUMX e lembramos o seguinte conxunto 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
Os ficheiros de firmware do adaptador Wi-Fi resultantes deben ser copiados e substituídos por "framboesa" no directorio /usr/lib/firmware/brcm/
Reiniciamos o futuro enrutador e sorrimos satisfeitos:
# 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 do 27.02.2018/XNUMX/XNUMX.
E por suposto 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 da rede e retos por diante
Como acordamos anteriormente, a "framboesa" está conectada por "cable" á rede local. Supoñamos que o provedor proporciona acceso a Internet exactamente do mesmo xeito: o enderezo da rede pública é emitido de forma dinámica polo servidor DHCP (quizais con enlace MAC). Neste caso, despois da configuración final da framboesa, só tes que "conectar" o cable do provedor e listo. Uso de autorización systemd-networkd - o tema dun artigo separado e non se discute aquí.
A(s) interface(s) Wi-Fi de Raspberry é unha rede local e o adaptador Ethernet integrado (eth0) é externo. Numeremos a rede local de forma estática, por exemplo: 192.168.0.0/24. Enderezo de Raspberry: 192.168.0.1. Un servidor DHCP funcionará na rede externa (Internet).
Caos paralelo (digresión lírica)Lennart Pottering compilou o seu propio programa systemd Moi ben. Isto systemd lanza outros programas tan rápido que, ao non ter tempo de recuperarse do asubío do árbitro, tropezan e caen ao comezo sen sequera comezar a súa carreira de obstáculos.
Pero en serio, a paralelización agresiva dos procesos iniciados ao inicio do sistema operativo systemd é unha especie de "ponte de burro" para expertos en LSB secuenciais experimentados. Afortunadamente, poñer orde a este "caos paralelo" resulta sinxelo, aínda que non sempre é obvio.
Creamos dúas interfaces ponte virtuais con nomes constantes: lan и wan. "Conectaremos" o(s) adaptador(s) Wi-Fi ao primeiro, e o "framboesa" eth0 ao 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=si elimina a necesidade de indicar o núcleo a través de sysctl para activar o enrutamento.
MACAddress= Deixemos comentarios e cambiemos se é necesario.
Primeiro "conectamos" eth0. Lembramos o "problema de uniformidade" e usamos só o enderezo MAC desta interface, que se pode descubrir, por exemplo, así:
# cat /sys/class/net/eth0/address
Nós creamos /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Eliminamos o ficheiro de configuración anterior eth0, reiniciamos o Raspberry e accedemos á rede (o enderezo IP probablemente cambie):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Para facer puntos de acceso Wi-Fi, nada mellor que un par de doces dnsmasq + hostapd aínda non o descubrín. Na miña opinión.
Por se alguén se esqueceu, entón...
Comecemos 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
editalo ao teu 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
A "maxia" aquí reside no parámetro bind-dinámico, que lle indica ao daemon dnsmasq que agarde ata que apareza no sistema interface=lan, e non desmaiar por un ataque de orgullosa soidade despois do comezo.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
E por último, as configuracións máxicas hostapd. Non teño dúbida de que alguén está lendo este artigo na procura precisamente destas liñas atesouradas.
Antes de instalar hostapd, cómpre superar o "problema de uniformidade". O adaptador Wi-Fi integrado wlan0 pode cambiar facilmente o seu nome a wlan1 ao conectar equipos Wi-Fi USB adicionais. Polo tanto, arranxaremos os nomes das interfaces do seguinte xeito: daremos nomes únicos para os adaptadores (sen fíos) e uniremos a enderezos MAC.
Para o adaptador Wi-Fi integrado, que aínda é wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Nós creamos /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Agora estaremos seguros de que wl0 - Esta é unha wifi integrada. Reiniciamos o Raspberry para asegurarnos diso.
Instalar:
# yum install hostapd wireless-tools
Ficheiro 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
Sen esquecer nin un momento
# hostapd /etc/hostapd/hostapd.conf
hostapd comezará en modo interactivo, transmitindo o seu estado á consola. Se non hai erros, os clientes que admitan o modo AC poderán conectarse ao punto de acceso. Para deter hostapd - Ctrl-C.
Todo o que queda é activar hostapd no inicio do sistema. Se fas o estándar (systemctl enable hostapd), despois do próximo reinicio podes facer que un demo "role en sangue" co diagnóstico "interface wl0 non atopada". Como resultado do "caos paralelo", hostapd iniciouse máis rápido do que o núcleo atopou o adaptador sen fíos.
Internet está chea de remedios: desde un tempo de espera forzado antes de iniciar o daemon (varios minutos), ata outro daemon que supervisa o aspecto da interface e (re)inicia o hostpad. As solucións son bastante viables, pero terriblemente feas. Pedimos axuda ao grande systemd cos seus “obxectivos” e “tarefas” e “dependencias”.
Copia o ficheiro do servizo de distribución en /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
e reducir o seu contido á seguinte 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
A maxia do ficheiro de servizo actualizado reside na vinculación dinámica de hostapd ao novo destino: a interface wl0. Cando aparece a interface, o daemon comeza; cando desaparece, detense. E todo isto está en liña, sen reiniciar o sistema. Esta técnica será especialmente útil ao conectar un adaptador Wi-Fi USB a un Raspberry.
Agora podes:
# systemctl enable hostapd
# reboot
7. IPTABLES
"Que???" © Si, si! Ningún systemd. Non hai combinadas novas (en forma firewalld), que acaban facendo o mesmo.
Usemos o bo vello iptables, cuxos servizos, despois de iniciarse, cargarán as regras de rede no núcleo e apagarán silenciosamente sen permanecer residente e sen consumir recursos. systemd ten un elegante IPMasquerade=, pero seguiremos confiando a tradución de enderezos (NAT) e o firewall a iptables.
Instalar:
# yum install iptables-services
# systemctl enable iptables ip6tables
Prefiro almacenar a configuración de iptables como un script (exemplo):
#!/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
Executamos o script anterior e perdemos a capacidade de establecer novas conexións SSH con cable co Raspberry. É certo, creamos un enrutador Wi-Fi, ao que o acceso "a través de Internet" está prohibido por defecto - agora só "por aire". Conectamos o cable Ethernet do provedor e comezamos a navegar!
8. Bonificación: +2,4 GHz
Cando montei o primeiro enrutador Raspberry usando o debuxo descrito anteriormente, descubrín unha serie de aparellos na miña casa que, debido ás súas limitacións de deseño de Wi-Fi, non podían ver a "framboesa" en absoluto. Reconfigurar o enrutador para que funcione en 802.11b/g/n foi antideportivo, xa que a velocidade máxima "sobre o aire" neste caso non superaba os 40 Mbit e o meu provedor de Internet favorito ofréceme 100 (por cable).
De feito, xa se inventou unha solución ao problema: unha segunda interface Wi-Fi que funciona a unha frecuencia de 2,4 GHz e un segundo punto de acceso. Nun posto próximo non merquei o primeiro, senón o segundo "asubío" USB Wi-Fi que atopei. O vendedor estaba atormentado por preguntas sobre o chipset, a compatibilidade cos núcleos ARM Linux e a posibilidade de traballar en modo AP (el foi o primeiro en comezar).
Configuramos o "asubío" por analoxía co adaptador Wi-Fi integrado.
En primeiro lugar, imos cambiarlle o nome 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
Encomendaremos a xestión da nova interface Wi-Fi a un daemon hostapd independente, que se iniciará e parará dependendo da presenza dun "asubío" estritamente definido no sistema: wl1.
Ficheiro 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]
O contido deste ficheiro depende directamente do modelo do adaptador USB Wi-Fi, polo que pode fallar unha copia/pega banal.
Copia o ficheiro do servizo de distribución en /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
e reducir o seu contido á seguinte 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 o que queda é activar unha nova instancia de hostapd:
# systemctl enable hostapd2
Iso é todo! Tire do "asubío" e do propio "framboesa", mira as redes sen fíos ao teu redor.
E, finalmente, quero avisar sobre a calidade do adaptador USB Wi-Fi e da fonte de alimentación do Raspberry. O "asubío quente" conectado ás veces pode causar "conxelación de framboesas" debido a problemas eléctricos a curto prazo.
Fonte: www.habr.com