'box expose <box> <port>' — a deliberate, loopback-only door to a box's dev server #55
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:cli
scope:drill
scope:host
scope:installer
scope:templates
scope:tiers
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/box#55
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The contract is no inbound path exists — and for the tool's own flagship workflow, that's one notch too absolute. You're coding in a box, the agent starts a dev server on :3000, and you cannot open it in your browser. Today the only route is
box incus <b> -- config device add {} … proxy …hatch surgery, which (a) needs NAT-mode proxying on VMs plus a static lease, (b) collides with the ACL's default ingress drop — the very rule doing its job — and (c) leaves an unlabeled hole someone has to remember exists.Proposal
Opinionated where it matters:
127.0.0.1, never0.0.0.0— the network-facing contract (no inbound path) stays true; only the operator's own machine gets a door. No flag to widen it; someone who wants LAN exposure is leaving the tool's threat model and can use the hatch with its warning.box infolists active exposures so a box with a hole in it says so.Design points to settle live (not by reasoning — measure on a real box)
proxydevice in NAT mode (VMs can't use the plain socket proxy). NAT mode requires the instance NIC to have a staticipv4.address— likely adevice overridepinning the current lease at expose time. Verify the DNAT'd traffic actually survives...security.acls.default.ingress.action=dropis the rule that makes A7 pass; whether host-originated DNAT traffic is caught by it, and whether the right carve-out is a per-box ACL rule scoped to the forwarded port or per-NIC config, is exactly the kind of question this repo answers with a probe, not a paragraph.--removecloses the door and the probe confirms silence; and an exposure never makes the box reachable from anywhere but loopback.box expose, and that door only ever opens onto the host's own loopback.Provenance: operator question after run 16 — "if you're coding in a box and want to see the local server, in the current design we're screwed." Correct diagnosis; this is the deliberate un-screwing.
🤖 Generated with Claude Code