Estou tentando criar várias interfaces Linux TAP e permitir que elas enviem/recebam pacotes por meio de um único adaptador WIFI. Para todos os efeitos, gostaria que as interfaces TAP atuassem como adaptadores de rede completos. Eles devem ser capazes de solicitar seus próprios endereços DHCP e interagir na rede local como qualquer outro adaptador de rede faria.
Consegui fazer isso funcionar com um adaptador Ethernet, mas ouvi dizer que o WiFi é uma fera diferente. Não me lembro o raciocínio exato, mas tinha algo a ver com "1 endereço IP por endereço de transmissão de rádio".
É possível, usando interfaces TAP, essencialmente fazer redes em ponte através de uma conexão WiFi? Posso fazer alguma configuração com o networkmanager? Alguém pode vincular um ou dois artigos? Estou tendo dificuldade em encontrar algo sobre isso.
Responder1
Este link Network Engineering SEQuatro endereços de camada 2 no cabeçalho do quadro 802.11explica muito bem a diferença entre Ethernet e Wifi.
Wifi requer endereços MAC adicionais para comunicação: além do Endereço do Remetente (SA) e do Endereço de Destino (DA) que são iguais aos MACs de origem e destino da Ethernet, o Wifi precisa do Endereço do Transmissor (TA) e do Endereço do Receptor (RA) para funcionar: isso perfaz um total de 4 endereços MACs. Como o caso comum é que quando o cliente (STA) envia, TA = SA e quando o Ponto de Acesso (AP) envia para o STA, DA = RA, normalmente são necessários apenas 3 endereços, e é assim que os AP são configurados: para usar apenas 3 endereços dos 4 possíveis.
Um cliente em modo bridge significa que acima de TA != SA ou DA != RA e todos os 4 endereços são necessários, enquanto o AP está configurado para apenas 3. É por isso que em configurações comuns não é possível fazer ponte entre Wifi. O modo de 4 endereços deve ser habilitado no AP e no STA para que a ponte do cliente funcione. Isso geralmente é chamadoSistema de distribuição sem fio (WDS), mas provavelmente existem várias implementações incompatíveis. AP e todos os STA devem usar uma implementação compatível.
Então:
se a ponte do sistema for o AP, então você pode conectar o wifi sem problemas: é isso que está fazendo todos os APs, usando o modo padrão de 3 endereços.
se o sistema que está tentando fazer a ponte for um cliente simples (STA), não funcionará. Drivers recentes impedirão até mesmo a configuração da interface sem fio como porta de ponte com este tipo de erro:
# ip link set wlan0 master bridge0 Error: Device does not allow enslaving to a bridge.
se você pode configuraramboso AP e o STA em um WDS compatível, por exemplo, se todos estiverem executando Linux com drivers compatíveis com mac80211, isso pode ser habilitado no STA com:
# iw dev wlan0 set 4addr on
Então pode ser escravizado:
# ip link set wlan0 master bridge0
# ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue master bridge0 state DOWN mode DEFAULT group default qlen 1000
[...]
Alguma documentação sobre o modo de 4 endereços com o comando iw pode ser encontrada no wiki wireless do linux:Usando 4 endereços para AP e modo cliente
Configurar o AP está fora do escopo aqui. Ao usarhostapd, há uma configuração específica para ativar:
# WDS (4-address frame) mode with per-station virtual interfaces # (only supported with driver=nl80211) # This mode allows associated stations to use 4-address frames to allow layer 2 # bridging to be used. #wds_sta=1
Ainda há uma solução alternativa que permite usar vários contêineres ou VMs simultaneamente com IPs separados em uma única conexão de modo padrão Wifi (modo de 3 endereços), mas usando apenasumEndereço MAC (aquele usado como STA): é assimgeralmente não é compatível com DHCPque por padrão depende do endereço MAC (a menos que o servidor DHCP esteja aceitando oidentificador do cliente dhcpopção). É chamadoIPVLAN(geralmente para contêineres) e sua contraparte TAP (geralmente para VMs) é chamadaIPVTAP. Quando usado no modo L2, fornece o que parece ser uma interface Ethernet padrão.
Para um (simplesredes ipnetwork) container isso poderia ser usado assim depois de já ter estabelecido uma conexão Wifi no IP LAN 192.0.2.0/24 com gateway 192.0.2.1, no host usando interfacewlan0:
# ip netns add testwifi
# ip link add link wlan0 name ipvl0 type ipvlan mode l2
# ip link set dev ipvl0 netns testwifi up
# ip -n testwifi address add 192.0.2.99/24 dev ipvl0
# ip -n testwifi route add default via 192.0.2.1
# ip netns exec testwifi ping -q -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.372/5.372/5.372/0.000 ms
Duvido seriamente que o NetworkManager tenha alguma opção relacionada ao modo de 4 endereços. Quanto aIPVLAN/IPVTAPisso deve ser suportado pelo aplicativo de contêiner/virtualização, comoLXCou libvirt (que parece não suportar IPVTAP nativamente), não pelo NetworkManager.