nova tentativa de fix do ebpf-sockmap2

This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-09-14 14:53:43 -03:00
1 parent 9eb4d843e4
commit 424934def4
1 file changed
+11 -4
+11 -4
View File
@@ -95,16 +95,24 @@ static __always_inline void stats_inc(__u32 idx)
// esbarrar na limitação do verificador. // esbarrar na limitação do verificador.
// ───────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────
// Verifica se um IP (em network byte order / big-endian) é // Verifica se um IP (em network byte order / big-endian) é
// endereço privado RFC-1918 ou loopback. // endereço privado RFC-1918 — ou seja, tráfego ENTRE containers na
// dockernet, que é o único caso que se beneficia do sockmap.
// //
// Por que isso importa: // Por que isso importa:
// O sock_ops roda para TODAS as conexões TCP do cgroup raiz, // O sock_ops roda para TODAS as conexões TCP do cgroup raiz,
// incluindo tráfego externo (HTTPS do mundo, metadata AWS…). // incluindo tráfego externo (HTTPS do mundo, metadata AWS…) e
// tráfego de LOOPBACK dentro de um único container.
// Registrar IPs públicos no sockhash é inútil e perigoso: // Registrar IPs públicos no sockhash é inútil e perigoso:
// o par nunca será encontrado, o sk_msg vai ao fallback e // o par nunca será encontrado, o sk_msg vai ao fallback e
// entradas mortas poluem o mapa. // entradas mortas poluem o mapa.
// Loopback (127.0.0.0/8) é EXCLUÍDO de propósito: conexão de um
// processo consigo mesmo (ou com outro processo no MESMO container)
// já não atravessa bridge/veth/netfilter — não tem nada a ganhar com
// o bypass do sockmap, só risco. Foi justamente uma rajada de
// centenas de mensagens grandes pro loopback do nginx (127.0.0.6)
// que apareceu correlacionada com travamentos de página em produção.
// Só registramos conexões onde ambos os lados são privados // Só registramos conexões onde ambos os lados são privados
// (i.e., comunicação intra-host / intra-container). // RFC-1918 (i.e., comunicação DE VERDADE entre containers).
// ───────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────
static __always_inline bool is_local_ip(__u32 ip_be) static __always_inline bool is_local_ip(__u32 ip_be)
{ {
@@ -122,7 +130,6 @@ static __always_inline bool is_local_ip(__u32 ip_be)
if (o1 == 10) return true; // 10.0.0.0/8 if (o1 == 10) return true; // 10.0.0.0/8
if (o1 == 172 && o2 >= 16 && o2 <= 31) return true; // 172.16.0.0/12 if (o1 == 172 && o2 >= 16 && o2 <= 31) return true; // 172.16.0.0/12
if (o1 == 192 && o2 == 168) return true; // 192.168.0.0/16 if (o1 == 192 && o2 == 168) return true; // 192.168.0.0/16
if (o1 == 127) return true; // 127.0.0.0/8 loopback
return false; return false;
} }