-
Notifications
You must be signed in to change notification settings - Fork 275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NAT traversal tracking issue #312
Comments
Hi @mxinden, thanks for the overview. Remarks concerning hopr-connect:
I think the description misses one of the main issues when reasoning about NAT traversal: there is a bunch of smaller protocols such as STUN, TURN, UPnP, TCP, and QUIC. Each of them is able to solve their main purpose for example STUN allows the discovery of public IPv4 addresses. But the main issue is that a combination of these protocols is required to successfully bypass NATs, and this makes handling unsuccessful attempts and automatic fallbacks necessary. Otherwise you end up with a transport module that always fails on certain internet setups. Unfortunately, this is the most tricky part. |
Updated the description:
I am not quite sure I follow. Each of these are listed in the table. An individual protocol in itself can not achieve NAT traversal by itself. Instead Projects, like HOPR connect, are combining various protocols to overcome a NAT.
Correct. This should be handled by the individual libp2p implementations. Today, if none of the direct connection approaches succeed, the fallback would be the circuit relay v1 protocol. |
Changelog
|
Changelog
|
Changelog
|
Changelog
|
Changelog
|
Changelog
|
Thanks for the update @mxinden! @andreykiryushkin worth for you to take a dive on this now that you are exploring hopr-connect |
Below sequence diagram depicts the process of Hole Punching with Project Flare. I have yet to find the right place for this to live long-term. Still I am posting it here in case others are looking for a high level overview already today. To reproduce via plantuml.com
|
Changelog
|
There is also a transport that "talks" to a running instance of tor and configures it: https://github.com/berty/go-libp2p-tor-transport |
Changelog
|
Changelog
Thus all protocols for basic hole punching in rust-libp2p are in |
Hey @mxinden, seems like a lot of work has been done lately around the |
go-libp2p is further ahead and supports QUIC which has better penetration succeess rate, so no this isnt an accurate statement. |
Yes, a lot of progress in regards to hole punching.
rust-libp2p does not yet have support for QUIC (see libp2p/rust-libp2p#2289) which bears higher hole punchings success rates given that it is based on UDP. For now, rust-libp2p only supports TCP hole punching. As mentioned above by @vyzo, go-libp2p is further ahead with QUIC support and a more battle tested hole punching stack. |
IPFS developed Delegate routers which can help connect nodes behind NAT as well as browser-based clients: Something like delegates could be ported to the libp2p core and a side-channel like DNS, or another bootstrap can be used to identify delegate nodes which can facilitate connectivity. IPFS Delegates do not support the full range of libp2p features like pub/sub. |
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:
Protocols
None of the Protocols below enable NAT traversal by themselves. Instead combinations of these protocols do.
Keywords for search engines: hole punching, TCP, QUIC, WebRTC, UPnP, ICE, STUN, TURN, meta
The text was updated successfully, but these errors were encountered: