Skip to content
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

Correct /nat API for libp2p #6677

Open
wants to merge 1 commit into
base: release-v6.0.1
Choose a base branch
from

Conversation

AgeManning
Copy link
Member

Issue Addressed

There was a mismatch in the metric naming, resulting in the /nat api always returning false, when the underlying metric may actually be true.

@AgeManning AgeManning added the ready-for-review The code is ready for review label Dec 10, 2024
@michaelsproul
Copy link
Member

Can you rebase this on release-v6.0.1 branch so we can include it in v6.0.1?

@michaelsproul michaelsproul added the v6.0.1 Bugfix for v6.0.0 label Dec 10, 2024
FromSwarm::ExternalAddrConfirmed(_) => {
// We have an external address confirmed, means we are able to do NAT traversal.
metrics::set_gauge_vec(&metrics::NAT_OPEN, &["libp2p"], 1);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch. This is now set in handle_established_inbound_connection instead since #6486.

Copy link
Member

@jxs jxs Dec 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this shouldn't be removed, it tells us when libp2p-upnp was able to successfully map the address and port via UPnP on the router and therefore NAT traversal is activated.
I had missed the code Jimmy linked it, but we receiving an inbound connection doesn't tell us about our NAT traversal settings in libp2p, we may be reached by a peer with a public address that we established a connection before and so the port may still be mapped in the router right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't sure of when this message actually gets sent.
If this gets sent when upnp worked successfully, then we have some competing conditions about what we say about our libp2p nat being open.

Which is a stronger condition?
UPnP successful or incoming connections?
Both have error cases I think.

  • UPnP could work for a local router, but if behind CGNAT or another router or something, you would not be contactable and not get incoming connections. Maybe we could open the wrong ports also?
  • Incoming connections is fallible as you pointed out ( I think there is a 30s window or something for a peer to disconnect and then re-connect to us. We could increase the number of incoming connections to like 3 or 5 to lower the probability.

To make it simple, I think its easier to reason about with incoming connections. Maybe we have some number of connections (in discovery its 2, i think). If UPnP worked, then I'd expect we would get incoming connections.

The other thing we don't account for is, if after it worked once, we dont check again. Maybe we should also check if we get 0 incoming peers, we should make it as false?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to have some mix if you prefer to keep the UPnP message. Is UPnP the only behaviour that sends this? Could this get sent from other behaviours that might be also fallible?

Copy link
Member

@jimmygchen jimmygchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch! Just need to rebase this as Michael mentioned so we can include it in 6.0.1.

@jimmygchen jimmygchen added waiting-on-author The reviewer has suggested changes and awaits thier implementation. and removed ready-for-review The code is ready for review labels Dec 10, 2024
@AgeManning
Copy link
Member Author

This has been rebased

@michaelsproul michaelsproul added ready-for-review The code is ready for review and removed waiting-on-author The reviewer has suggested changes and awaits thier implementation. labels Dec 13, 2024
@michaelsproul michaelsproul changed the base branch from unstable to release-v6.0.1 December 13, 2024 00:50
@michaelsproul
Copy link
Member

Rebased again to remove stuff from unstable that was still lurking

michaelsproul added a commit that referenced this pull request Dec 13, 2024
Squashed commit of the following:

commit 6fefd83
Author: Age Manning <[email protected]>
Date:   Tue Dec 10 16:28:03 2024 +1100

    Fix nat API
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-for-review The code is ready for review v6.0.1 Bugfix for v6.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants