nova tentativa de fix do ebpf-sockmap2
This commit is contained in:
1 parent
9eb4d843e4
commit
424934def4
1 file changed
+11
-4
@@ -95,16 +95,24 @@ static __always_inline void stats_inc(__u32 idx)
|
||||
// esbarrar na limitação do verificador.
|
||||
// ─────────────────────────────────────────────────────────
|
||||
// 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:
|
||||
// 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:
|
||||
// o par nunca será encontrado, o sk_msg vai ao fallback e
|
||||
// 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
|
||||
// (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)
|
||||
{
|
||||
@@ -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 == 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 == 127) return true; // 127.0.0.0/8 loopback
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user