eBPF, .NET 5,以及IPv4伪装成IPv6的惊魂之旅

2025-05-09

作者使用eBPF程序重定向端口53上的DNS请求,却遇到.NET 5的DualMode Socket导致的IPv4通过IPv4-mapped IPv6地址发送的意外情况。.NET 5的SocketsHttpHandler使用了DualMode Socket,即使是IPv4流量,也使用IPv6 Socket并设置IPv4-mapped IPv6地址。这导致eBPF程序误判为IPv6流量而拦截,最终作者通过检查skb->protocol而不是skb->family来区分IPv6和IPv4-mapped IPv6地址,解决了问题。

阅读更多
开发