Skip to content

id: Phase 13 F13.3 SSH-over-iroh reachability (and iroh-over-SSH fallback) #785

Closed

Description

@dezren39

What and why

Give third-party SSH clients reachability to NAT'd id hosts by tunnelling SSH over iroh (tailnet-like); iroh-over-SSH only where UDP is blocked but port 22 is open. SSH servers in id stay rare and opt-in.

Source

Current status

Not started. grep -rn 'tunnel\|direct_tcpip' pkgs/id/src/world_ssh.rs finds no tunnel or port-forward code; the relay kit's tunnel.toml is an iroh-relay deploy config, not this.

Acceptance criteria

  • An unmodified ssh client connects to a world behind NAT through the tunnel
  • A test proves the iroh-over-SSH fallback negotiates when UDP is denied
  • Trust stays at host keys + peer IDs: a peer that reaches the SSH server through iroh still authenticates to id normally (no identity bypass)

Size

L

Prerequisites

Activity

  1. developing-today commented on Oct 24, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Oct 25, 2026

    @dezren39
    MemberAuthor

    SSH-over-iroh landed on PR #842 (SshTunnelProtocol + id world ssh-tunnel, verified with unmodified OpenSSH). Remaining open here: the iroh-over-SSH fallback when UDP is denied — needs a non-QUIC iroh transport or SSH-carried datagram channel, which does not exist yet. F13.2's exec transport covers joins in that network meanwhile.

  3. added
    kind/featureNew feature or capability request
    priority/lowNice to have; do when convenient
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    source/humanFiled directly by a human
    on Oct 26, 2026
  4. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    Fleet monitor intake pass (protocol §5).

    Related: Phase 13 sibling set — #785 (F13.3), #786 (F13.4), #787 (F13.5), #788 (F13.6), #789 (F13.7), #790 (F13.8); this issue is F13.3 SSH-over-iroh reachability (and iroh-over-SSH fallback). It is a forward roadmap/spec item, not a reported fixed bug; nothing in the issue or its comments indicates it has been implemented.

    Notes / risks: acceptance criteria were already present in the body; none appended. Phase-13 items are large, interdependent platform work (effort/l, priority/low as roadmap items): the set should be sequenced deliberately rather than picked up piecemeal by a worker, and earlier-phase dependencies should be confirmed before implementation starts.

    Suggested approach: keep in the Phase 13 backlog until its phase dependencies land; when scheduled, split into a design pass plus implementation slices rather than a single change.

    Labels normalized by the monitor.

  5. 17 remaining items

  6. added
    queue/blockedQueue or user escalation state
    status/blockedQueue or user escalation state
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 1, 2026
  7. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Triage verdict — PARTIALLY SATISFIED; fallback remains blocked on transport design

    Freshly checked against current origin/main (9be9c2298c51368f8eacaacd2f50bfe2b627ba99) and GitHub on 2026-11-01:

    The latest note on transport tracker #536 describes D1-051 as superseded by Phase 13, but that accounts for the SSH-over-iroh path only; it does not satisfy this issue's explicit UDP-denied fallback criterion. The remaining scope is L and needs a transport design decision (implement a non-QUIC/SSH-carried transport, or revise the requirement based on the existing F13.2 SSH-exec route). I did not enqueue it as a small_fix: that would misclassify the unresolved transport design. #785 stays OPEN with queue/blocked + status/blocked until the fallback requirement is settled; no Drew-specific decision is being escalated.

    🤖 Agent note · blocked

  8. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

  9. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Design summary

    • PR id: Phase 13 first slice — shell contract (F13.1), SSH transports (F13.2/F13.3), F13.7 design #842 already delivers SSH-over-Iroh and preserves normal SSH authentication; only the UDP-denied fallback remains open.
    • Recommendation: make this a session-level fallback to F13.2's SSH exec frame transport, not Iroh/QUIC carried over SSH.
    • Opt-in fallback requires both an Iroh destination and a separately trusted SSH destination; existing explicit --via modes stay unchanged.
    • Fall back only on Iroh reachability failures; peer identity, SSH host key/authentication, world authorization, and protocol failures remain terminal.
    • Acceptance adds a UDP-denied/SSH-available test and frame parity/security regressions; the listener stays opt-in.
    • Plan: (1) route contract/policy, (2) Iroh-first SSH-exec fallback, (3) UDP-denied and trust tests, (4) reconcile docs/acceptance.
    • Design note: doc/2026-11-01_design_id785.md.
    • PR: design(id): #785 UDP-denied SSH fallback #3798

    Question for Drew

    @dezren39 — Should criterion 2 require A) literal Iroh-over-SSH via a new non-QUIC transport/SSH-carried datagram channel, B) session-level failover to the existing SSH exec frame transport (recommended, reuses F13.2 and meets the port-22 world-join outcome), or C) explicit id world join --via ssh only and remove automatic fallback? I recommend B and updating the criterion's wording so it names the transport actually used. The design records the implementation plan either way and does not close #785.

  10. added a commit that references this issue on Nov 1, 2026
  11. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    • Agent: queue worker (repo-worker-code), lane D shift
    • Session / ID: task 5759
    • Found via: queue claim
    • Task: Triage of issue id: Phase 13 F13.3 SSH-over-iroh reachability (and iroh-over-SSH fallback) #785 reconciled as already done: this packet was created at 16:34Z, before the design landed — the design record was posted on this issue at 16:45Z and PR design(id): #785 UDP-denied SSH fallback #3798 merged at 16:48Z, closing the issue. No parallel record from this lane. The A/B/C question for Drew in the 16:45Z design summary (recommendation: B, session-level failover to the F13.2 SSH exec frame transport) remains open for Drew's ruling and is surfaced in this shift's report.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-insenhancementNew feature or requestkind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/lowNice to have; do when convenientqueue/blockedQueue or user escalation statesource/humanFiled directly by a humanstatus:done

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions