You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue distills findings from a systematic cross-implementation evaluation of AutoNAT v2, conducted by ProbeLab. The final report of the investigation is available in the following link.
The AutoNAT v2 dialerHost shares the main host's UDP black hole counter in read-only mode config.go#L240-L246. Read-only mode treats any state other than Allowed as Blockedblack_hole_detector.go#L254-L262, so when the main host is in Probing (zero history), the dialerHost refuses every QUIC dial-back with E_DIAL_REFUSED.
Observed behaviour:
Fresh servers, low-traffic nodes, and isolated testbeds can stay in Probing → every QUIC dial-back is refused.
E_DIAL_REFUSED is discarded from v2 confidence by AddRefusal (it does not call AddOutcome), so the client's QUIC address doesn't flip to Unreachable — but it never accumulates positive evidence either, and stays stuck in Unknown.
Proposal: apply the v1 approach — pass nil counters to makeAutoNATV2Host() so the detector doesn't run on the dialerHost. The dialerHost only dials addresses clients explicitly request to test; the detector has no useful role there.
This issue distills findings from a systematic cross-implementation evaluation of AutoNAT v2, conducted by ProbeLab. The final report of the investigation is available in the following link.
The AutoNAT v2
dialerHostshares the main host's UDP black hole counter in read-only mode config.go#L240-L246. Read-only mode treats any state other thanAllowedasBlockedblack_hole_detector.go#L254-L262, so when the main host is inProbing(zero history), the dialerHost refuses every QUIC dial-back withE_DIAL_REFUSED.Observed behaviour:
Probing→ every QUIC dial-back is refused.E_DIAL_REFUSEDis discarded from v2 confidence by AddRefusal (it does not callAddOutcome), so the client's QUIC address doesn't flip to Unreachable — but it never accumulates positive evidence either, and stays stuck inUnknown.Proposal: apply the v1 approach — pass
nilcounters tomakeAutoNATV2Host()so the detector doesn't run on the dialerHost. The dialerHost only dials addresses clients explicitly request to test; the detector has no useful role there.