- Selección de componentes
- Lanzar interfaces de red
- Configuración de un punto de acceso 802.11ac (5 GHz)
- Configurando un SSID virtual usando hostapd
Durante los últimos diez años, compré equipos de red baratos e instalé
DD-WRT para devolver las "funciones" por más de $ 500 que se eliminaron del kernel de Linux en el que se basa el firmware estándar.
A pesar de las compilaciones inestables, los errores no corregidos y las
disputas , DD-WRT sigue siendo preferible al firmware en existencia. Pero ahora los componentes dignos son más baratos que nunca, y la comunidad de bricolaje se ha cambiado por completo a Linux (lo estoy mirando, Sr. Raspberry), entonces, ¿por qué no construir su propio enrutador inalámbrico de una vez por todas?
Selección de componentes
En primer lugar, debe decidir sobre la plataforma:
x86 o
ARM ? No
discutiré en detalle las diferencias clave , pero brevemente: el primero tiene un mejor rendimiento, mientras que el segundo es más barato y más eficiente en energía. Las placas Raspberry Pi (y equivalentes) son extremadamente baratas y probablemente más potentes que la mayoría de los enrutadores comerciales inalámbricos, pero las plataformas x86 están muy extendidas y tienen la ventaja de factores de forma estandarizados y puertos de expansión.
Por supuesto, el detalle más importante es el chipset. Hoy en día, los estándares de facto son
802.11n (2.4 GHz) y
802.11ac (5 GHz), pero elegir controladores para Linux sigue
siendo un desafío , especialmente con la compatibilidad con el modo AP (punto de acceso). En resumen, si no desea problemas, elija los conjuntos de chips
Atheros . Los
controladores ath9k y
ath10k son compatibles, puede encontrarlos fácilmente con interfaces USB y / o mini-PCIe.
Al menos un controlador de interfaz de red (NIC) es un mínimo necesario, y elija RAM y almacenamiento a su gusto.
Lista de materiales
Sacrificando el precio y la potencia, opté por la plataforma x86 para una configuración modular y relativamente potente disponible para la actualización.
Si no necesita un BRAZO, entonces no es necesario un ventilador.La carcasa es espaciosa, con dos orificios preparados para el enchufe de CA / CC. La instalación de la placa base, RAM y Pico-PSU se realizó sin problemas:
Porno de hierroLo más difícil fue instalar WiFi mini-PCIe, porque la placa solo admite tarjetas de tamaño medio: aquí el cable de extensión mPCIe vino al rescate. Tomé un cable FFC de 20 cm (incluido) para conectar ambos lados del adaptador y fijé el mini-PCIe al chasis con cinta de doble cara.


Mini-PCIe expansorAfortunadamente, el chasis viene con tres orificios de antena precortados. Aquí está el resultado final:


Software
Está claro que ponemos Linux. Dependiendo del hardware, podría ser una distribución optimizada como
Raspbian (para Raspberry Pi) o cualquier otra distribución de Linux que desee. Como he estado usando Ubuntu durante muchos años, elegí
Ubuntu Server 18.04 LTS , con el que estoy más acostumbrado a trabajar y que tiene soporte a largo plazo.
El resto de este artículo supone que está utilizando una distribución basada en Debian.Si la instalación se realizó correctamente y fue a la consola, defina los nombres de las interfaces:
$ ip -br a | awk '{print $1}' lo enp1s0 enp2s0 wlp5s0
Hay dos NIC integradas en la placa base: estas son
enp1s0
y
enp2s0
. La tarjeta inalámbrica aparece como
wlp5s0
y admite el modo AP, según lo previsto:
$ iw list ... Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point
Ahora podemos describir lo que necesitamos: colocamos la primera NIC como puerto WAN y la segunda la conectamos a la interfaz inalámbrica:

Red
Si tiene Ubuntu 18.04, deshágase de
netplan
inmediatamente para volver a admitir / etc / network / interfaces:
$ sudo apt-get install ifupdown bridge-utils $ sudo systemctl stop networkd-dispatcher $ sudo systemctl disable networkd-dispatcher $ sudo systemctl mask networkd-dispatcher $ sudo apt-get purge nplan netplan.io
Como servidor DHCP / DNS, seleccione
dnsmasq :
$ sudo apt-get install dnsmasq
Como comenzaremos y configuraremos el proceso
dnsmasq
través del
dnsmasq
post-up
, recuerde deshabilitar el demonio en el momento del arranque:
$ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq
Escribiremos la configuración
preliminar de las interfaces de red de acuerdo con el diagrama, incluida la configuración mínima de
dnsmasq
:
$ cat /etc/network/interfaces
La documentación /etc/network/interfaces
aquíComo puede ver en la sección
post-up
, dnsmasq comienza tan pronto como se levanta el puente. Su configuración se realiza solo mediante argumentos de línea de comando (
--conf-file=/dev/null
), y el proceso se detendrá cuando la interfaz esté apagada.
La interfaz
bridge_ports
no se especifica específicamente en el
wlp5s0
, porque
hostapd
agregará al puente automáticamente (brctl puede negarse a hacer esto antes de que hostapd comience a cambiar el modo de interfaz).
Consulte la documentación de dnsmasq
.Ahora puede reiniciar la red (reinicio de red del
sudo service networking restart
) o simplemente reiniciar para verificar que la configuración de la red sea correcta.
Tenga en cuenta: aunque actualmente podemos recibir DHCP de
enp2s0
, no tendremos
conexión inalámbrica (más sobre esto más adelante)
ni acceso a Internet (ver más abajo).
Enrutamiento
En este punto, debe enrutar paquetes entre las
enp2s0
LAN (
enp2s0
) y WAN (
enp1s0
) y habilitar
la traducción de direcciones de red .
Habilitar el reenvío de paquetes es fácil:
$ sudo sysctl -w net.ipv4.ip_forward=1 $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
El último comando asegura que la configuración se guarde hasta el próximo reinicio.La traducción de direcciones de red es otro asunto, por lo general, debe lidiar con (o más bien combatir) las
iptables
. Afortunadamente, la Edad de Piedra terminó hace mucho tiempo, y los muchachos de FireHol hicieron un gran esfuerzo para agregar el nivel necesario de abstracción:
$ sudo apt-get install firehol
FireHOL es un lenguaje de firewall seguro de última generación, su configuración es fácil de entender y accesible. Ya no necesita escribir declaraciones de
iptables
: el archivo de configuración en sí se traduce en declaraciones de
iptables
y se aplica según sea necesario. No hay demonio en el fondo.
La habilitación de la traducción de direcciones de red para interfaces LAN con la adición de reglas mínimas de firewall se realiza principalmente:
$ cat /etc/firehol/firehol.conf version 6
FireHOL está escrito por personas para personas, la documentación está aquí .Puede verificar la configuración iniciando manualmente
firehol
(
sudo firehol start
) y conectando la computadora portátil al puerto LAN:
ahora puede conectarse en línea si el puerto WAN está conectado.
Antes de reiniciar,
asegúrese de editar
/etc/default/firehol
para permitir que FireHol se inicie en el arranque:
$ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol
No entraré en detalles de toda la sintaxis de firehol
, el archivo de configuración se explica por sí mismo, recomiendo firehol
la documentación en caso de una configuración más compleja. Si está realmente interesado en lo que firehol
hizo con iptables
, simplemente escriba sudo firehol status
en la línea de comando.Punto de acceso inalámbrico
Obviamente, gestionaremos el punto de acceso usando
hostapd :
$ sudo apt-get install hostapd
A continuación encontrará un archivo de configuración mínimo y casi inexplicable 802.11 n / 2.4 Ghz / WPA2-AES:
$ cat /etc/hostapd/hostapd-simple.conf
Consulte hostpad.conf
documentación en /usr/share/doc/hostapd/examples/hostapd.conf
.
La configuración descrita se puede probar manualmente:
$ sudo hostapd /etc/hostapd/hostapd-simple.conf
Si todo va bien,
aparecerá una
conexión inalámbrica . Si está satisfecho con el resultado,
no olvide cambiar la configuración para iniciar
hostapd
tan pronto como la interfaz se eleve (como se muestra a continuación).
Aquí está su final /etc/network/interfaces:
$ cat /etc/network/interfaces
Configuración de un punto de acceso 802.11ac (5 GHz)
Escaneo pasivo
De acuerdo con la documentación de
Airetos AEX-QCA9880-NX , el conjunto de chips admite 802.11ac, por lo que podemos dejar los canales llenos de 2,4 GHz en el paraíso de 5 GHz.
Veamos qué frecuencias son compatibles:
$ iw list ... Frequencies: * 2412 MHz [1] (20.0 dBm) * 2417 MHz [2] (20.0 dBm) * 2422 MHz [3] (20.0 dBm) * 2427 MHz [4] (20.0 dBm) * 2432 MHz [5] (20.0 dBm) * 2437 MHz [6] (20.0 dBm) * 2442 MHz [7] (20.0 dBm) * 2447 MHz [8] (20.0 dBm) * 2452 MHz [9] (20.0 dBm) * 2457 MHz [10] (20.0 dBm) * 2462 MHz [11] (20.0 dBm) * 2467 MHz [12] (disabled) * 2472 MHz [13] (disabled) * 2484 MHz [14] (disabled) ... Frequencies: * 5180 MHz [36] (17.0 dBm) (no IR) * 5200 MHz [40] (17.0 dBm) (no IR) * 5220 MHz [44] (17.0 dBm) (no IR) * 5240 MHz [48] (17.0 dBm) (no IR) * 5260 MHz [52] (23.0 dBm) (no IR, radar detection) * 5280 MHz [56] (23.0 dBm) (no IR, radar detection) * 5300 MHz [60] (23.0 dBm) (no IR, radar detection) * 5320 MHz [64] (23.0 dBm) (no IR, radar detection) * 5500 MHz [100] (23.0 dBm) (no IR, radar detection) * 5520 MHz [104] (23.0 dBm) (no IR, radar detection) * 5540 MHz [108] (23.0 dBm) (no IR, radar detection) * 5560 MHz [112] (23.0 dBm) (no IR, radar detection) * 5580 MHz [116] (23.0 dBm) (no IR, radar detection) * 5600 MHz [120] (23.0 dBm) (no IR, radar detection) * 5620 MHz [124] (23.0 dBm) (no IR, radar detection) * 5640 MHz [128] (23.0 dBm) (no IR, radar detection) * 5660 MHz [132] (23.0 dBm) (no IR, radar detection) * 5680 MHz [136] (23.0 dBm) (no IR, radar detection) * 5700 MHz [140] (23.0 dBm) (no IR, radar detection) * 5720 MHz [144] (23.0 dBm) (no IR, radar detection) * 5745 MHz [149] (30.0 dBm) (no IR) * 5765 MHz [153] (30.0 dBm) (no IR) * 5785 MHz [157] (30.0 dBm) (no IR) * 5805 MHz [161] (30.0 dBm) (no IR) * 5825 MHz [165] (30.0 dBm) (no IR) ...
En la lista anterior, vemos que el chipset admite los canales 1-14 (2.4 GHz) y los canales 36-165 (5 GHz), pero ¿notó el indicador de
no IR
?
La bandera
no IR
indica que
no hay radiación iniciadora (es decir,
exploración pasiva ). Esto significa que este modo está prohibido en el caso de que el dispositivo sea el primero en iniciar la radiación (incluidas las
balizas ). En otras palabras,
¡no puede ejecutar el punto de acceso en estos canales !
Requisitos reglamentarios
La situación anterior se explica por los
requisitos reglamentarios de Linux , que regulan el uso del espectro de radiofrecuencia
según el país .
Pero oye!
Vivo en los EE. UU., Y el enlace dice que tengo derecho a iniciar la radiación en los canales 36-48, entonces, ¿qué pasa? Veamos qué dominio regulador está actualmente en uso:
$ iw reg get country 00: DFS-UNSET (2402 - 2472 @ 40), (N/A, 20), (N/A) (2457 - 2482 @ 40), (N/A, 20), (N/A), NO-IR (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR (5170 - 5250 @ 80), (N/A, 20), (N/A), NO-IR (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, NO-IR (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR (5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR (57240 - 63720 @ 2160), (N/A, 0), (N/A)
El problema muestra que el dominio
mundial está actualmente activo (o no instalado), es decir, los
valores mínimos permitidos en cada país .
Desafortunadamente, no puede instalar manualmente el dominio
sudo iw reg set
, porque el dominio está protegido en la EEPROM:
$ dmesg | grep EEPROM [ 12.123068] ath: EEPROM regdomain: 0x6c
Parche!
Afortunadamente, los requisitos reglamentarios se procesan en el nivel del controlador, por lo que se pueden cambiar fácilmente: encontramos el parche en el
código fuente Open-WRT .
En primer lugar, no olvide conectar el repositorio de código fuente desde
/etc/apt/sources.list
:
$ cat /etc/apt/sources.list ... deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted ...
Luego prepare el entorno instalando las dependencias necesarias:
$ sudo apt-get install build-essential fakeroot $ sudo apt-get build-dep linux
Descargue las fuentes de su núcleo:
$ apt-get source linux
Dado que el parche
original Open-WRT no se puede aplicar "tal cual" al árbol del kernel de Ubuntu debido a diferencias sutiles en el sistema de compilación, tuve que arreglarlo:
$ VERSION=$(uname -r) $ cd linux-${VERSION%%-*} $ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b
Todo está listo para el montaje:
$ fakeroot debian/rules clean $ fakeroot debian/rules binary-generic
Si no hay problemas, ahora puede instalar el kernel fijo encima del anterior:
$ cd .. $ sudo dpkg -i linux*.deb
Reiniciar y listo:
$ sudo iw reg set US $ iw list ... Frequencies: * 5180 MHz [36] (17.0 dBm) * 5200 MHz [40] (17.0 dBm) * 5220 MHz [44] (17.0 dBm) * 5240 MHz [48] (17.0 dBm) * 5260 MHz [52] (23.0 dBm) (radar detection) * 5280 MHz [56] (23.0 dBm) (radar detection) * 5300 MHz [60] (23.0 dBm) (radar detection) * 5320 MHz [64] (23.0 dBm) (radar detection) * 5500 MHz [100] (23.0 dBm) (radar detection) * 5520 MHz [104] (23.0 dBm) (radar detection) * 5540 MHz [108] (23.0 dBm) (radar detection) * 5560 MHz [112] (23.0 dBm) (radar detection) * 5580 MHz [116] (23.0 dBm) (radar detection) * 5600 MHz [120] (23.0 dBm) (radar detection) * 5620 MHz [124] (23.0 dBm) (radar detection) * 5640 MHz [128] (23.0 dBm) (radar detection) * 5660 MHz [132] (23.0 dBm) (radar detection) * 5680 MHz [136] (23.0 dBm) (radar detection) * 5700 MHz [140] (23.0 dBm) (radar detection) * 5720 MHz [144] (23.0 dBm) (radar detection) * 5745 MHz [149] (30.0 dBm) * 5765 MHz [153] (30.0 dBm) * 5785 MHz [157] (30.0 dBm) * 5805 MHz [161] (30.0 dBm) * 5825 MHz [165] (30.0 dBm) ...
Para evitar actualizaciones automáticas, es posible que deba corregir la versión del kernel de Linux .Configuracion
El nuevo
hostapd
configuración de
hostapd
será bastante simple:
hw_mode=a
incluye bandas de 5 GHz, y
ieee80211ac=1
incluye 802.11ac (VHT). La opción
ieee80211d=1
con
country_code=US
especifica el dominio regulador en el que operamos.
Para aprovechar al máximo el ancho de banda,
ht_capab
y
vht_capab
deben reflejar las capacidades del equipo:
$ iw list ... Band 1: Capabilities: 0x19e3 RX LDPC HT20/HT40 Static SM Power Save RX HT20 SGI RX HT40 SGI TX STBC RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 ... Band 2: VHT Capabilities (0x338001b2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 RX LDPC short GI (80 MHz) TX STBC RX antenna pattern consistency TX antenna pattern consistency
Con esto en mente,
aquí está el hostapd.conf
final :
$ cat /etc/hostapd/hostapd.conf
Consulte hostpad.conf
documentación en /usr/share/doc/hostapd/examples/hostapd.conf
.
En este punto, el enrutador inalámbrico está en pleno funcionamiento, y si necesita una configuración más compleja, ahora puede sumergirse en los archivos de configuración.
Configurando un SSID virtual usando hostapd
Independientemente de si desea configurar un punto de acceso de invitado o una red inalámbrica dedicada para su VPN, en algún momento deberá configurar un SSID virtual.
Chart
Basado en la
configuración actual , aquí hay un diagrama actualizado de lo que queremos obtener. Suponiendo que
wlp5s0
es la interfaz inalámbrica física, el SSID virtual se ejecutará en la interfaz virtual
wlan0
usando su propia subred
192.168.2.0/24
:

Preparación
Primero, verifique que su dispositivo inalámbrico sea compatible con múltiples SSID:
$ iw list ... valid interface combinations: *
Como puede ver, el conjunto de chips admite hasta ocho puntos de acceso en un canal. Esto significa que puede configurar hasta siete SSID virtuales, y todos ellos funcionarán en el mismo canal.
Interfaz de red
De acuerdo con la documentación en hostapd.conf, existe una conexión estricta entre la dirección MAC de la interfaz física y el BSSID de las interfaces virtuales:
hostapd generará una máscara BSSID basada en los BSSID que están configurados. hostapd verificará que dev_addr & MASK == dev_addr . Si este no es el caso, la dirección MAC de la radio debe cambiarse antes de iniciar hostapd. Si se configura un BSSID para cada BSS secundario, esta limitación no se aplica en hostapd y se pueden usar otras máscaras si el controlador los admite (por ejemplo, intercambiar el bit administrado localmente)
Los BSSID se asignan en orden a cada BSS, a menos que se especifique un BSSID explícito utilizando el parámetro 'bssid'.
Si se especifica un BSSID explícito, debe elegirse de modo que:
- da como resultado una MÁSCARA válida que lo cubre y dev_addr
- no es lo mismo que la dirección MAC de la radio
- no es lo mismo que cualquier otro BSSID especificado explícitamente
Para cumplir con estos requisitos y permitir que
hostapd
asigne automáticamente el BSSID de la (s) interfaz (es) virtual (es), actualizamos la dirección MAC de la interfaz inalámbrica física
hostapd
cero los cuatro bits menos significativos. Esto es suficiente para 15 BSSID virtuales, mucho más de lo necesario.
Primero, determine la dirección MAC actual:
$ ip addr show wlp5s0 | grep link | awk '{print $2}' 44:c3:06:00:03:eb
Si borra los últimos cuatro bits y establece el
bit U / L , obtendrá la dirección MAC
46:c3:06:00:03:e0
.
Ahora actualizaremos la configuración para establecer la dirección MAC correcta justo antes de cargar la interfaz, y también declararemos una interfaz inalámbrica virtual de acuerdo con nuestro diagrama:
$ cat /etc/network/interfaces ...
Genial Uso
dnsmasq
como servidor DHCP; siéntase libre de reemplazarlo con lo que quiera. Tenga en cuenta que para que la interfaz virtual funcione correctamente, se requiere
allow-hotplug
.
Configuración del punto de acceso
Ahora lo más simple: agregue un SSID virtual a la configuración actual de
hostapd
. Simplemente agregue esto
al final del archivo
hostapd.conf
existente:
$ cat /etc/hostapd/hostapd.conf ...
En el ejemplo, utilicé el cifrado WPA2, pero la mayoría de las opciones de interfaz de radio están disponibles aquí (por ejemplo,
channel
). Puede agregar más SSID virtuales simplemente agregando las líneas en el archivo de configuración de acuerdo con las interfaces virtuales declaradas y configuradas correctamente.
Ahora reinicie y vea su nuevo SSID junto con la nueva interfaz inalámbrica (preste atención a la dirección MAC):
$ ip addr show wlan0 | grep link | awk '{print $2}' 46:c3:06:00:03:e1
Eso es todo chicos!