Skip to content

NAT traversal tracking issue #312

Open
@mxinden

Description

@mxinden

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 libp2p/rust-libp2p#1334
Websockets go-ws-transports js-libp2p-websockets js-libp2p-websockets rust libp2p-websockets
WebRTC
* WebRTC spec compliant #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 #159
Direct Connection Upgrade through Relay DCUtR spec libp2p/go-libp2p#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 libp2p/go-libp2p#712 libp2p/rust-libp2p#2066
AutoRelay #181 go-libp2p/autorelay libp2p/js-libp2p#699
UPnP via go-libp2p-nat

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions