Eu tenho um aplicativo que usa soquetes brutos para consumir todos os pacotes de várias interfaces Linux (kernel 4.14), incluindo wireless. Em uma tentativa de reduzir ao mínimo os scripts estranhos, estou tentando usar o hostapd para vincular as interfaces wireless e bss a pontes com interfaces que meu aplicativo escuta. Também tenho um caso de uso em que preciso que meu aplicativo receba tráfego da rede sem fio em uma VLAN específica (mais ou menos como o remapeamento de vlan nativo). Atualmente, minha configuração está assim:
- interfaces fictícias são criadas para meu aplicativo se vincular
ip link add dummy0 type dummy
ip link set dummy0 up
- conforme necessário, interfaces vlan são criadas na interface fictícia
ip link add link dummy0 name dummy0.100 type vlan id 100
ip link set dummy0.100 up
- uma ponte é criada para vincular o manequim à wlan, anexando dummy0 ou vlan conforme necessário. O aplicativo ainda escuta apenas no dummy0
brctl addbr br0
brctl addif br0 dummy0.100
ip link set br0 up
- hostapd anexa a interface wlan ou bss à ponte definida em hostapd.conf
Quando não há vlans envolvidas, isso funciona bem. Para interfaces vlan, só consigo direcionar o tráfego em uma direção. tcpdump on dummy0 mostra todo o tráfego como eu esperava. tcpdump em dummy0.100 e br0 mostra apenas o tráfego das interfaces sem fio, mas nenhum tráfego de retorno.
Presumo que o problema é que meu aplicativo está gravando quadros brutos com tags vlan para dummy0 em vez de para dummy0.100, mas suponho que também seja possível que o problema esteja no uso das próprias interfaces fictícias. Existe alguma maneira de usar um soquete bruto em dummy0, escrever quadros com tags vlan e fazê-los aparecer corretamente em dummy0.100? Também estou aberto a soluções melhores, mas isso requer menos configuração e infraestrutura de monitoramento.
Responder1
Conforme identificado por @dirkt, os soquetes RAW podem não ser capazes de direcionar pacotes para subinterfaces VLAN quando vinculados ao dispositivo raiz. Uma solução razoável sugerida por @dirkt é usar um 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
Defina bridge=br0 em hostapd.conf e vincule o aplicativo a veth0-app
Uma alternativa sugerida por @AB, inexplorada por razões técnicas, é fazer com que a aplicação publique um dispositivo de toque que permita basicamente a mesma organização.