kernel: ipv6.disable=0 with no IPv6 routing causes Happy Eyeballs latency on all outbound sandbox connections
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 86/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- go
- Ambito
- infrastructure, networking
Direzione di ricerca
Inizia da packages/orchestrator/pkg/sandbox/fc/kernel_args.go intorno alle righe 96-97 e rivedi le impostazioni IPv6 insieme alla configurazione solo IPv4 in packages/orchestrator/pkg/sandbox/fc/process.go:378 e alle regole dell’host in network.go:265. Aggiorna gli argomenti del kernel guest per disabilitare IPv6, mantenendo la rete solo IPv4, quindi verifica che le connessioni dual-stack in uscita non comportino più il ritardo di fallback descritto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Symptom
Every outbound connection from a sandbox to an external host that has AAAA records takes 250 ms or more longer than expected. The extra latency appears on the first TCP connection per destination — pip install, npm install, HTTP API calls, curl, etc.
# inside sandbox
time curl -s https://pypi.org -o /dev/null
# real 0m0.582s (should be ~0.1s from same region)
The delay is consistent and reproducible; once the TCP connection is established, transfer speed is normal.
Root cause
packages/orchestrator/pkg/sandbox/fc/kernel_args.go:96-97 explicitly enables IPv6 inside every Firecracker guest:
"ipv6.disable": "0", // IPv6 enabled
"ipv6.autoconf": "1", // SLAAC enabled
However packages/orchestrator/pkg/sandbox/fc/process.go:378 configures the guest network with an IPv4-only ip= kernel parameter:
// IPv4 configuration - format: [local_ip]::[gateway_ip]:[netmask]:hostname:iface:dhcp_option:[dns]
ipv4 := fmt.Sprintf("%s::%s:%s:instance:%s:off:%s",
p.slot.NamespaceIP(), p.slot.TapIPString(), p.slot.TapMaskString(),
p.slot.VpeerName(), p.slot.TapName())
The host side of the tap device only configures IPv4 NAT rules (network.go:265); there is no IPv6 router advertisement (radvd) or IPv6 default route on the host tap interface.
Result:
- IPv6 is active in the guest kernel
- SLAAC runs on the tap interface but finds no IPv6 router → only a link-local
fe80::address is obtained - No global unicast IPv6 address, no default IPv6 route
- All IPv6 traffic is unroutable, but the protocol stack is fully live
When the guest connects to any dual-stack host, the Linux kernel's address selection (RFC 6724) prefers IPv6:
connect("api.openai.com:443")
→ DNS: returns both A + AAAA
→ kernel tries IPv6 AAAA address first
→ no route → EHOSTUNREACH / NDP solicitation times out
→ fallback to IPv4 A record (~250 ms per RFC 8305)
→ connection finally succeeds
→ every first-connection pays 250 ms+
The /etc/sysctl.conf written by packages/orchestrator/pkg/template/build/phases/base/provision.sh also has no IPv6 disable entry — only fs.inotify.max_user_watches and vm.compaction_proactiveness are set — so the guest OS never suppresses IPv6 at the sysctl layer either.
Why it matters
- Every sandbox is affected, regardless of workload
- Any pip, npm, cargo, apt fetch that hits a dual-stack host pays the penalty per connection
- Latency-sensitive API calls (OpenAI, GitHub, GCP, AWS) all have AAAA records
- The penalty compounds: a package install that opens 20 TCP connections silently loses 5+ seconds
Proposed fix
Change kernel_args.go:96 to disable IPv6 until the networking layer supports a complete IPv6 stack:
// Before
"ipv6.disable": "0",
"ipv6.autoconf": "1",
// After
"ipv6.disable": "1",
// ipv6.autoconf is redundant when disable=1, remove it
This is a single-line kernel cmdline change with no other code impact. If full IPv6 support is planned in the future, the correct order is: first configure IPv6 routing on the host tap (RA, prefix delegation, ip6tables), then set ipv6.disable=0.
- Lingua principale
- Go
- Stelle
- 1.6k
- Fork
- 438
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di e2b-dev/runtime
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
sandbox cache: StartRemoving state transition not broadcast, all allocations see stale Running state Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
Tutte le issue di e2b-dev/runtime
Issue simili
-
kind/bug needs-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
matrixorigin/matrixone#29223 ·
-
needs-acceptance wg/data-plane-networking
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vllm-project/semantic-router#4024 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
alexgorbatchev/dotfiles#107 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100