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.
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user