diff --git a/newt/handlers.go b/newt/handlers.go index 55c7f4e..3f57a11 100644 --- a/newt/handlers.go +++ b/newt/handlers.go @@ -1010,7 +1010,9 @@ func (n *Newt) registerHandlers(ctx context.Context) { } bcChainId := generateChainId() - n.pendingRegisterChainId = bcChainId + // Pangolin intentionally does not answer backwards-compatible + // registrations with newt/wg/connect. Do not replace the chain ID of + // the real registration while its response may already be in flight. if err := n.client.SendMessage(topicWGRegister, map[string]interface{}{ "publicKey": n.publicKey.String(), "newtVersion": n.config.Version, diff --git a/newt/ping.go b/newt/ping.go index 8ea7954..4126231 100644 --- a/newt/ping.go +++ b/newt/ping.go @@ -280,7 +280,8 @@ func (n *Newt) startPingCheck(fn pingFunc, serverIP, tunnelID string) chan struc "chainId": pingChainId, }, 3*time.Second) bcChainId := generateChainId() - n.pendingRegisterChainId = bcChainId + // This compatibility message has no wg/connect response and must + // not supersede the pending real registration chain. if err := n.client.SendMessage("newt/wg/register", map[string]interface{}{ "publicKey": n.publicKey.String(), "backwardsCompatible": true,