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`을 확인하는 것이었습니다.

개발