libp2p / libp2p/specs

NAT traversal tracking issue

Open
#312 20 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
No language data
Stars
1.8k
Forks
320
Avg merge
11d 15h
Merged PRs (30d)
1

Description

This GitHub issue tracks the status of NAT traversal capabilities across libp2p implementations and platforms.

See Hole Punching document for greater picture.

Please comment below to suggest additions or corrections.


Projects

The following projects combine various protocols from the table below to achieve NAT traversal:

  • Project Flare - project proposal, Golang tracking issue and high level architecture
    • Transport Protocols
      • TCP
      • QUIC
    • TURN-like Protocols
      • circuit relay v2
    • Signaling Protocols
      • Direct Connection Upgrade through Relay
    • STUN-like Protocols
      • AutoNAT
    • Other Protocols:
      • multistream-select v1 simulataneous open
      • AutoRelay
  • WebRTC star
    • Transport Protocols
      • WebRTC star flavour
    • Signaling Protocols
      • WebRTC star signaling protocol
  • HOPR Connect
    • Transport Protocols
      • WebRTC HOPR connect flavour
    • STUN-like Protols
      • STUN
    • TURN-like Protocols
      • circuit relay inspired HOPR connect flavoured
    • Signaling Protocols
      • HOPR signaling messages
  • Project proposal: browser nodes can connect to any node out of the box
    • Transport Protocols
      • Websockets for signaling communication
      • WebRTC for data communication
    • TURN-like Protocols
      • circuit relay v2
    • STUN-like Protols
      • STUN
    • Signaling Protocols
      • ?
Protocols

None of the Protocols below enable NAT traversal by themselves. Instead combinations of these protocols do.

specification go-libp2p js-libp2p/browser js-libp2p/NodeJS rust-libp2p
Transport Protocols
TCP go-tcp-transport + port-reuse js-libp2p-tcp rust libp2p-tcp + port-reuse option
QUIC go-libp2p-quic-transport https://github.com/libp2p/rust-libp2p/pull/1334
Websockets go-ws-transports js-libp2p-websockets js-libp2p-websockets rust libp2p-websockets
WebRTC
* WebRTC spec compliant https://github.com/libp2p/specs/issues/220
* WebRTC star flavoured via go-libp2p-webrtc-star via js-libp2p-webrtc-star via js-libp2p-webrtc-star
* WebRTC HOPR connect flavoured via hopr-connect
TURN-like Protocols
circuit relay v1 v1 go-libp2p-circuit via js-libp2p via js-libp2p rust libp2p-relay
circuit relay v2 v2 go-libp2p-circuit rust libp2p-relay
circuit relay inspired HOPR connect relay via hopr-connect
Signaling Protocols
WebRTC specific or generalized signaling protocol https://github.com/libp2p/specs/pull/159
Direct Connection Upgrade through Relay DCUtR spec https://github.com/libp2p/go-libp2p/pull/1057 libp2p-dcutr
WebRTC star signaling client via go-libp2p-webrtc-star client via js-libp2p-webrtc-star client + server via js-libp2p-webrtc-star
HOPR signaling messages via hopr-connect
STUN-like Protocols
STUN via hopr-connect
AutoNAT AutoNAT spec https://github.com/libp2p/go-libp2p-autonat rust libp2p-autonat
Other Protocols
multistream-select v1 sim open connections/simopen.md https://github.com/libp2p/go-libp2p/issues/712 https://github.com/libp2p/rust-libp2p/pull/2066
AutoRelay https://github.com/libp2p/specs/issues/181 go-libp2p/autorelay https://github.com/libp2p/js-libp2p/issues/699
UPnP via go-libp2p-nat

Keywords for search engines: hole punching, TCP, QUIC, WebRTC, UPnP, ICE, STUN, TURN, meta

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the linked Hole Punching document first, then review the Projects and Protocols tables and their linked implementation and specification issues. No repository file or test is named; done would require a specific correction or addition to the tracker, verified against the referenced projects.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, javascript, rust
Domain
networking
Issue type
Documentation
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.