Skip to content

unbounded: send a consumer hello to the egress - #355

Draft
AGMETEOR wants to merge 1 commit into
mainfrom
allan/unbounded-consumer-hello
Draft

AGMETEOR wants to merge 1 commit into
mainfrom
allan/unbounded-consumer-hello

Conversation

@AGMETEOR

@AGMETEOR AGMETEOR commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

context

summary

  • after building the QUIC layer, the unbounded outbound calls SetConsumerHello with:
    • tag: the outbound tag, which for a lantern-cloud config is <type>-out-<track>-<routeID>, so the egress can say which track and route each session served
    • platform: runtime.GOOS
  • the hello goes once per QUIC connection on a unidirectional stream inside QUIC, so the donor can't read it and proxied streams are unaffected; an egress that predates it ignores it
  • client_version is left empty: the app version reaches lantern-box via tracker/clientcontext, which this outbound can't get at today. Wiring it through is a follow-up, as is a device ID, pending the open questions on egress: log every session, with an optional consumer hello unbounded#454

dependency

go.mod pins getlantern/broflake to the getlantern/unbounded#454 branch commit (d822634). That also brings in the unbounded commits since the previous pin, including #434/#435 (activation counting) and their ttlcache dependency. Re-pin to unbounded main once #454 merges, before merging this.

testing

🤖 Generated with Claude Code

The egress only sees the donor, so it can't say which client or track a
session served. Send the outbound tag (which names the track and route)
and the platform on every QUIC connection via the hello added in
getlantern/unbounded#454.

Pins getlantern/broflake to the getlantern/unbounded#454 branch commit;
re-pin to main once that merges.

Part of getlantern/engineering#3702.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@myleshorton

Copy link
Copy Markdown
Contributor

This seems like overkill and also seems brittle. The similar clientinfo approach with our proxies has been a continual source of pain, but it's also a little unclear to me what the goal is here exactly tbh.

@AGMETEOR

AGMETEOR commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor Author

This seems like overkill and also seems brittle. The similar clientinfo approach with our proxies has been a continual source of pain, but it's also a little unclear to me what the goal is here exactly tbh.

@myleshorton if I read getlantern/engineering#3702 right, it came from not being able to tell whether a particular device actually reached the egress. Fleet-wide connectivity is now visible (getlantern/unbounded#460 fixed the URL search, verified in prod), but per device it isn't: the egress only sees the donor, a random CSID and an optional country.

The consumer hello is meant to close that gap. It goes once per QUIC connection on a separate uni stream, so it never touches proxied traffic, and older egresses just ignore it. For now it only sends the track tag and platform. A device ID would be added later, and only once the client can verify it's talking to the real egress (getlantern/unbounded#455 plus a cert rollout). Without that, a malicious donor could impersonate the egress and collect device IDs.

@AGMETEOR

Copy link
Copy Markdown
Contributor Author

This seems like overkill and also seems brittle. The similar clientinfo approach with our proxies has been a continual source of pain, but it's also a little unclear to me what the goal is here exactly tbh.

@myleshorton if I read getlantern/engineering#3702 right, it came from not being able to tell whether a particular device actually reached the egress. Fleet-wide connectivity is now visible (getlantern/unbounded#460 fixed the URL search, verified in prod), but per device it isn't: the egress only sees the donor, a random CSID and an optional country.

The consumer hello is meant to close that gap. It goes once per QUIC connection on a separate uni stream, so it never touches proxied traffic, and older egresses just ignore it. For now it only sends the track tag and platform. A device ID would be added later, and only once the client can verify it's talking to the real egress (getlantern/unbounded#455 plus a cert rollout). Without that, a malicious donor could impersonate the egress and collect device IDs.

Hey @myleshorton thoughts?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants