Tengo una aplicación que utiliza sockets sin formato para consumir todos los paquetes de múltiples interfaces de Linux (kernel 4.14), incluida la inalámbrica. En un intento de mantener al mínimo las secuencias de comandos extrañas, estoy intentando usar hostapd para vincular las interfaces inalámbricas y bss a puentes con interfaces que escucha mi aplicación. También tengo un caso de uso en el que necesito que mi aplicación reciba tráfico de la red inalámbrica en una VLAN específica (algo así como una reasignación de VLAN nativa). Actualmente, mi configuración se ve así:
- Se crean interfaces ficticias para que mi aplicación se vincule a ellas.
ip link add dummy0 type dummy
ip link set dummy0 up
- Según sea necesario, las interfaces VLAN se crean en la interfaz ficticia.
ip link add link dummy0 name dummy0.100 type vlan id 100
ip link set dummy0.100 up
- Se crea un puente para vincular el dummy a la wlan, conectando dummy0 o la vlan según sea necesario. La aplicación todavía solo escucha en dummy0
brctl addbr br0
brctl addif br0 dummy0.100
ip link set br0 up
- hostapd conecta la interfaz wlan o bss al puente definido en hostapd.conf
Cuando no hay VLAN involucradas, esto funciona bien. Para las interfaces VLAN, solo puedo hacer que el tráfico vaya en una dirección. tcpdump en dummy0 muestra todo el tráfico como esperaría. tcpdump en dummy0.100 y br0 solo muestra el tráfico de las interfaces inalámbricas, pero no el tráfico de retorno.
Supongo que el problema es que mi aplicación está escribiendo marcos sin formato con etiquetas vlan en dummy0 en lugar de dummy0.100, pero supongo que también es posible que el problema esté relacionado con el uso de interfaces ficticias. ¿Hay alguna forma de usar un socket sin formato en dummy0, escribir marcos con etiquetas vlan y hacer que se muestren correctamente en dummy0.100? También estoy abierto a mejores soluciones, pero esto requiere la menor infraestructura de configuración y monitoreo.
Respuesta1
Como lo identifica @dirkt, es posible que los sockets RAW no sean capaces de dirigir paquetes a las subinterfaces VLAN cuando están vinculados al dispositivo raíz. Una solución razonable sugerida por @dirkt es utilizar un par veth.
ip link add veth0-wifi type veth peer name veth0-app
ip link set veth0-wifi up
ip link set veth0-app up
ip link add link veth0-wifi name veth0-wifi.100 type vlan id 100
brctl addbr br0
brctl addif br0 veth0-wifi.100
ip link set br0 up
Establezca bridge=br0 en hostapd.conf y vincule la aplicación a veth0-app
Una alternativa sugerida por @AB, inexplorada por razones técnicas, es hacer que la aplicación publique un dispositivo de toque que debería permitir prácticamente la misma organización.