Minha configuração:
Tenho um host Windows 11 com uma placa de rede USB. Configurei o WSL networkMode
conforme mirrored
: https://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking .
Então posso ver o adaptador dentro do Linux sem problemas.
Posso executar ping no adaptador pela linha de comando do Windows, mas não consigo executar ping na NIC pelo Linux.
- IP da placa de rede: 192.168.2.14
- IP do host do Windows (na placa de rede): 192.168.2.10
- Devido ao espelhamento, IP Linux (na NIC): 192.168.2.10
O que eu tentei:
Usando o adaptador de rede padrão conectado à minha rede principal, consigo fazer ping: Linux -> Host Windows -> Adaptador de rede -> Pela rede -> Outra máquina
No entanto, não consigo fazer ping: Linux -> Windows Host -> NIC
Também tentei configurar um Adaptador Virtual Hyper-V e usá-lo, mas ainda nada.
Como último recurso, desativei todos os firewalls do Linux e do Windows, mas ainda sem sorte.
ATUALIZAR:
Retornei o modo de rede ao padrão (NAT) e usei usbipd
para permitir que o Windows passasse o adaptador USB para o WSL (já que é um dispositivo USB->Ethernet da ASIX). Isso me deixou um passo mais perto. Compilei um kernel WSL personalizado, reiniciei, instalei o módulo para o driver ASIX e o carreguei. Agora consigo ver o adaptador e definir um endereço IP para o meu ambiente Linux nele.
O problema: consigo fazer ping, mas o ping no terminal simplesmente trava. A luz do dispositivo pisca, o que me indica que ele está recebendo pacotes.
Então, fiz uma varredura no Wireshark para ver o que estava acontecendo. O Wireshark revelou que o adaptador ESTÁ realmente respondendo. Então, por que meu terminal está travando? Há algum outro problema?
ATUALIZAÇÃO 2 Capturei alguns logs. Consegui habilitar o registro USB/IP no kernel antes da reconstrução.
Não tenho certeza do que estou procurando nesses logs. Talvez alguém mais experiente possa identificar se há um problema aqui?
Link para o registro: https://drive.google.com/file/d/1itXr80wWiOkEglgoDIE2OP5bPNuEtjx3/view?usp=sharing
Então, depois de uma semana testando diferentes drivers, diferentes tecnologias de virtualização (Hyper V, VirtualBox, Qemu) e até compilando meu próprio kernel WSL, descobri que o dispositivo está funcionando bem.
O problema estava especificamente relacionado a
ping
. Depois de analisar os pacotes de resposta no Wireshark, percebi que o Checksum estava retornando errado no Linux, mas sem problemas no Windows. Percebi então que os pacotes de ping do Linux eram consideravelmente maiores do que os do Windows. Entrei em contato com o fabricante para confirmar se o tamanho máximo de pacote que o dispositivo suporta é de 50 bytes. O Linux estava tentando executar o ping com 120 bytes.Ping corrigido do Linux usando:
O que força o ping a enviar pacotes de 32 bytes. A soma de verificação estava correta e o terminal conseguiu reportar um ping bem-sucedido.
Como os pacotes estão sendo transmitidos corretamente no nível da rede, modifique os parâmetros do buffer do soquete:
Comandos de diagnóstico alternativos
Se isso não resolver, tente estas etapas de diagnóstico para identificar onde a falha está ocorrendo:
Tente uma implementação de ping diferente que ignore o tratamento de soquete padrão
Monitore o fluxo de pacotes com acesso direto ao soquete
Correção mais profunda para adaptadores baseados em ASIX
Se você estiver usando um chipset ASIX (comum em adaptadores USB-Ethernet), tente estas opções específicas:
A principal conclusão da sua captura do Wireshark é que este não é um problema de conectividade de rede, mas sim um problema de manipulação de buffer de soquete no kernel WSL ao lidar com adaptadores de rede USB. As soluções acima podem abordar diretamente essa camada específica da pilha de rede onde a falha está ocorrendo.