diff --git a/internal/link/hearing_nats.go b/internal/link/hearing_nats.go index d3416be..0bad8e9 100644 --- a/internal/link/hearing_nats.go +++ b/internal/link/hearing_nats.go @@ -70,7 +70,13 @@ func dialNats(ctx context.Context, m Membership, timeout time.Duration) (Link, e } opts := []nats.Option{ nats.Secure(config), - nats.UserInfo(m.Node, m.Password), + // The mesh names a machine's bus user "node." (the controller's principal scheme), and + // the server refused the bare name the first time a machine dialled it: "authentication + // error - User". The same string the mesh composed into the user list, or nothing connects. + nats.UserInfo("node."+m.Node, m.Password), + // Replies to what this client asks the server arrive on its inbox, and the mesh grants a + // machine exactly its own: the same prefix the user list was composed with. + nats.CustomInboxPrefix("_INBOX.node." + m.Node), nats.Name("mesh-host/" + m.Node), nats.Timeout(timeout), // A node that has silently lost its route notices, rather than holding a connection the