Repository navigation
e2e: a run's computers start with internet off, so it never depends on public DNS - #1021
Merged
Merged
Conversation
…n public DNS
Local workerd's networking sidecar answers a container's DNS. With the
internet on, it asks public DNS (workerd's 1.1.1.1 and 8.8.8.8) first for
every name, the platform's intercepted hosts included, and answers them
itself only once public DNS says there is no such name. When public DNS
did not answer, every lookup of backups.sandbox.internal failed ("Try
again") and every save of the boot with it (#1017). With the internet off
it answers them at once, asking no one.
The e2e's fleet sets FRAGMENT_COMPUTER_INTERNET=off, which cell/entry.mjs
reads at a computer's start; deployments and cargo xtask dev keep it on.
Its computers reach only hosts the platform intercepts.
The computers lane's check: from the crash of the platform on, its
computer's sidecar drops any query it would send public DNS (an iptables
rule in its network namespace, devstack::containers), and the sleep's save
after goes on, the rule having dropped nothing.
Fixes #1017
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its removal: the sidecar answering an intercepted name without asking public DNS (an upstream issue drafted for Paul). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
futurepaul
commented
Nov 3, 2026
futurepaul
left a comment
Collaborator
Author
There was a problem hiding this comment.
Codex review @ d0907f6: PASS
The setting is read only at ContainerHost.start, once per launch, and only exact "off" disables internet; missing and unknown values stay on. Only the local e2e fleet emits it, dev stays on, and the deployment renderer constructs its own vars without this setting; the DNS-drop check is scoped by the run's project label and refuses an empty sidecar set, with the dependency and removal condition recorded in the debt ledger. Validation: 41 devstack host tests passed, plus a probe of the actual launch method covering 10 values and read count; Docker/e2e were not run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1017
Cause: local workerd's networking sidecar (
cloudflare/proxy-everything) answers a container's DNS. With the internet on, it first forwards every lookup to public DNS, which workerd hard-codes to 1.1.1.1 and 8.8.8.8. That includes the hosts the platform intercepts (backups.sandbox.internal,api.fragment.internal). It answers them itself (11.0.0.1) only once public DNS says NXDOMAIN.failed to lookup address information: Try again, after 5.1 s, so every save failed, a brand-new computer's included.adopt()re-arms the intercepts, and the DNS path never touches workerd.Fix: the e2e's fleet sets
FRAGMENT_COMPUTER_INTERNET=off(devstack::Fleet::computer_internet), andcell/entry.mjsreads it at a computer's start. The sidecar then answers intercepted hosts at once, without asking public DNS. Deployments andcargo xtask devkeep the internet on. The reason sits beside the var. The ledger entry "The e2e's computers have no internet" is deleted when the sidecar answers intercepted names locally (an upstream issue drafted for Paul).The check, in the computers lane: from the crash of the platform on, the adopted computer's sidecar drops any query it would send public DNS. That's an
iptablesrule in its network namespace (devstack::containers::drop_public_dns, on the sidecar's mark for those queries). Then: "after the crash its computer asked public DNS nothing … its sleep's save went on with public DNS dropped".{"asked":496,"sidecars":1}, and with it CI's checks: "it sleeps at the end", the ledger refusals, and the routine.cargo xtask e2e --only computersgives 280 passed, 0 failed, on this head (rebased onto 8500481).Nothing needed the internet: I grepped every lane and image for what a container fetches.
api.fragment.internal.hermeslane's install is an offline .deb, and Claude Code's install is the stub's local stand-in.images/appear only in tests.cargo xtask e2egave 3305 passed, 0 failed;--only hermes(real Hermes) gave 70 passed, 0 failed.cargo xtask checkpasses.🤖 Generated with Claude Code