AutoNAT requests time out
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 5.6k
- Forks
- 1.3k
- Avg merge
- 8h 47m
- Merged PRs (30d)
- 19
Description
Summary
About 20 publicy reachable peers are added as AutoNAT servers and are probed. From behind a NAT. After the timeout (set to 15s), AutoNAT gives an error OutboundRequest(Timeout) and probes another peer again. This continues, but sometimes a Response(DialError) is reported and that results in an AutoNAT status change.
It's unclear to me why the OutboundRequest(Timeout) occurs. This stems from the request_response protocol. I assume an AutoNAT server can't dial a NAT peer, and takes too long to answer the dial-back probe request.
Expected behaviour
Either the timeouts not to happen, or the timeouts to cause the AutoNAT status to change to Private eventually.
Actual behaviour
Sometimes it takes more than a few minutes (up to 20) for a node to determine it's Private. This only happens after a DialError, no the Timeout.
Debug Output
[2023-05-22T12:28:33.436488Z] Request { probe_id: ProbeId(0), peer: PeerId("12D3KooWAbnBXNeWyy3HAqpV7aFfos9Wv4sPapetvz2Z9oYJ9U81") }
[2023-05-22T12:28:48.437264Z] Error { probe_id: ProbeId(0), peer: Some(PeerId("12D3KooWAbnBXNeWyy3HAqpV7aFfos9Wv4sPapetvz2Z9oYJ9U81")), error: OutboundRequest(Timeout) }
[2023-05-22T12:28:48.437329Z] Request { probe_id: ProbeId(1), peer: PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3") }
[2023-05-22T12:29:03.437614Z] Error { probe_id: ProbeId(1), peer: Some(PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3")), error: OutboundRequest(Timeout) }
[2023-05-22T12:29:03.437687Z] Request { probe_id: ProbeId(2), peer: PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3") }
[2023-05-22T12:29:18.437944Z] Error { probe_id: ProbeId(2), peer: Some(PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3")), error: OutboundRequest(Timeout) }
[2023-05-22T12:29:18.438020Z] Request { probe_id: ProbeId(3), peer: PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3") }
[2023-05-22T12:29:33.438292Z] Error { probe_id: ProbeId(3), peer: Some(PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3")), error: OutboundRequest(Timeout) }
[2023-05-22T12:29:33.438356Z] Request { probe_id: ProbeId(4), peer: PeerId("12D3KooWSf3AciihWbr5sjKdNn55pWQbYqU53taT4RHU378mvDLa") }
[2023-05-22T12:29:48.438727Z] Error { probe_id: ProbeId(4), peer: Some(PeerId("12D3KooWSf3AciihWbr5sjKdNn55pWQbYqU53taT4RHU378mvDLa")), error: OutboundRequest(Timeout) }
[2023-05-22T12:29:48.438803Z] Request { probe_id: ProbeId(5), peer: PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP") }
[2023-05-22T12:30:03.439084Z] Error { probe_id: ProbeId(5), peer: Some(PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP")), error: OutboundRequest(Timeout) }
[2023-05-22T12:30:03.439166Z] Request { probe_id: ProbeId(6), peer: PeerId("12D3KooWLrZhGdBx8HKcvm2QcLCaZwWHPpj8ScwKYGsTFiV75vqq") }
[2023-05-22T12:30:19.179148Z] Error { probe_id: ProbeId(6), peer: Some(PeerId("12D3KooWLrZhGdBx8HKcvm2QcLCaZwWHPpj8ScwKYGsTFiV75vqq")), error: OutboundRequest(Timeout) }
[2023-05-22T12:30:19.179216Z] Request { probe_id: ProbeId(7), peer: PeerId("12D3KooWLrZhGdBx8HKcvm2QcLCaZwWHPpj8ScwKYGsTFiV75vqq") }
[2023-05-22T12:30:34.179434Z] Error { probe_id: ProbeId(7), peer: Some(PeerId("12D3KooWLrZhGdBx8HKcvm2QcLCaZwWHPpj8ScwKYGsTFiV75vqq")), error: OutboundRequest(Timeout) }
[2023-05-22T12:30:34.179507Z] Request { probe_id: ProbeId(9), peer: PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP") }
[2023-05-22T12:30:49.179737Z] Error { probe_id: ProbeId(9), peer: Some(PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP")), error: OutboundRequest(Timeout) }
[2023-05-22T12:30:49.179795Z] Request { probe_id: ProbeId(10), peer: PeerId("12D3KooWAHseCqSDRgJbGkhSEiZu6psQ97wVpFDjN6uUHNu5Hbeo") }
[2023-05-22T12:31:04.857627Z] Error { probe_id: ProbeId(10), peer: Some(PeerId("12D3KooWAHseCqSDRgJbGkhSEiZu6psQ97wVpFDjN6uUHNu5Hbeo")), error: OutboundRequest(Timeout) }
[2023-05-22T12:31:04.857685Z] Request { probe_id: ProbeId(11), peer: PeerId("12D3KooWC7cAfXzsrn2VFsR4kzUNZB2FovAtLosbRW43wsBhkesZ") }
[2023-05-22T12:31:19.857992Z] Error { probe_id: ProbeId(11), peer: Some(PeerId("12D3KooWC7cAfXzsrn2VFsR4kzUNZB2FovAtLosbRW43wsBhkesZ")), error: OutboundRequest(Timeout) }
[2023-05-22T12:31:19.858092Z] Request { probe_id: ProbeId(12), peer: PeerId("12D3KooWF9EwYGR7aon6SGzxHv5o2uFrJKEMuGmDjbhm4v9FH7pR") }
[2023-05-22T12:31:34.858414Z] Error { probe_id: ProbeId(12), peer: Some(PeerId("12D3KooWF9EwYGR7aon6SGzxHv5o2uFrJKEMuGmDjbhm4v9FH7pR")), error: OutboundRequest(Timeout) }
[2023-05-22T12:31:34.858492Z] Request { probe_id: ProbeId(13), peer: PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3") }
[2023-05-22T12:31:50.232443Z] Error { probe_id: ProbeId(13), peer: Some(PeerId("12D3KooWDzmAGQ9ykuZSb891Df6E8FxkUXJgr9XV38VgPPzgQzx3")), error: OutboundRequest(Timeout) }
[2023-05-22T12:31:50.232501Z] Request { probe_id: ProbeId(14), peer: PeerId("12D3KooWSgSKZ9LqMyW9shqbzqWDEpY5Hdkyi1frinqyTPRfbtL5") }
[2023-05-22T12:32:05.232871Z] Error { probe_id: ProbeId(14), peer: Some(PeerId("12D3KooWSgSKZ9LqMyW9shqbzqWDEpY5Hdkyi1frinqyTPRfbtL5")), error: OutboundRequest(Timeout) }
[2023-05-22T12:32:05.232933Z] Request { probe_id: ProbeId(15), peer: PeerId("12D3KooWAbnBXNeWyy3HAqpV7aFfos9Wv4sPapetvz2Z9oYJ9U81") }
[2023-05-22T12:32:20.233317Z] Error { probe_id: ProbeId(15), peer: Some(PeerId("12D3KooWAbnBXNeWyy3HAqpV7aFfos9Wv4sPapetvz2Z9oYJ9U81")), error: OutboundRequest(Timeout) }
[2023-05-22T12:32:20.233391Z] Request { probe_id: ProbeId(16), peer: PeerId("12D3KooWMnXSasKf1MWKLrwhBinYELzESoeHnpYjospjkMTV8ZUV") }
[2023-05-22T12:32:35.883220Z] Error { probe_id: ProbeId(16), peer: Some(PeerId("12D3KooWMnXSasKf1MWKLrwhBinYELzESoeHnpYjospjkMTV8ZUV")), error: OutboundRequest(Timeout) }
[2023-05-22T12:32:35.883400Z] Request { probe_id: ProbeId(17), peer: PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP") }
[2023-05-22T12:32:45.434329Z] Error { probe_id: ProbeId(17), peer: Some(PeerId("12D3KooWQ6goXTX4QawAzvvFgVymJ28MNXenh3r46bLKCkvKySzP")), error: Response(DialError) }
[2023-05-22T12:32:45.434439Z] AutoNAT status changed: Unknown -> Private
Version
- libp2p version (version number, commit, or branch): 0.51.3
Would you like to work on fixing this bug?
Maybe.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the AutoNAT implementation and its request_response protocol handling, then trace the logged OutboundRequest(Timeout) and Response(DialError) outcomes. Reproduce the behavior using the reported 15-second timeout and debug sequence. Done means timeout outcomes eventually produce the expected Private status, or the reason they should not occur is established with regression coverage.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100