eBPF, .NET 5 y el Misterio del IPv4 Disfrazado de IPv6

2025-05-09

Esta publicación describe una odisea de depuración que involucra eBPF, sockets DualMode de .NET 5 e IPv4 disfrazado de IPv6. El autor usó un programa eBPF para redirigir solicitudes DNS en el puerto 53, pero encontró un comportamiento inesperado con aplicaciones .NET 5. El SocketsHttpHandler de .NET 5 usa sockets DualMode, enviando tráfico IPv4 a través de un socket IPv6 usando direcciones IPv4-mapped IPv6. Esto engañó al programa eBPF para bloquear el tráfico IPv4 como IPv6. La solución implicó verificar `skb->protocol` en lugar de `skb->family` para diferenciar entre IPv6 verdadero y direcciones IPv4-mapped IPv6.

Desarrollo