eBPF, .NET 5 und das Geheimnis von IPv4 als IPv6 getarnt
2025-05-09
Dieser Beitrag beschreibt eine Debugging-Odyssee mit eBPF, DualMode-Sockets von .NET 5 und IPv4, das sich als IPv6 tarnt. Der Autor verwendete ein eBPF-Programm, um DNS-Anfragen an Port 53 umzuleiten, stieß aber bei .NET 5-Anwendungen auf unerwartetes Verhalten. Der SocketsHttpHandler von .NET 5 verwendet DualMode-Sockets und sendet IPv4-Traffic über ein IPv6-Socket mit IPv4-mapped IPv6-Adressen. Dies täuschte das eBPF-Programm, wodurch der IPv4-Traffic als IPv6 blockiert wurde. Die Lösung bestand darin, `skb->protocol` statt `skb->family` zu überprüfen, um zwischen echtem IPv6 und IPv4-mapped IPv6-Adressen zu unterscheiden.
Entwicklung