eBPF、.NET 5、そしてIPv6に偽装したIPv4の謎
2025-05-09
この記事では、eBPF、.NET 5のDualModeソケット、そしてIPv6に偽装したIPv4を扱うデバッグの冒険について説明します。著者はeBPFプログラムを使ってポート53のDNSリクエストをリダイレクトしましたが、.NET 5アプリケーションで予期せぬ動作に遭遇しました。.NET 5のSocketsHttpHandlerはDualModeソケットを使用し、IPv4-mapped IPv6アドレスを使ってIPv6ソケット経由でIPv4トラフィックを送信します。これにより、eBPFプログラムはIPv4トラフィックをIPv6として誤ってブロックしました。解決策は、真のIPv6とIPv4-mapped IPv6アドレスを区別するために、`skb->family`ではなく`skb->protocol`をチェックすることでした。
開発