{"record":{"id":"7d7be8ebc4cf010e","repo":"slackhq/nebula","slug":"no-outside-connection","errorCode":null,"errorMessage":"no outside connection","messagePattern":"no outside connection","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"interface.go","lineNumber":186,"sourceCode":"\t}\n}\n\nfunc (s recvErrorConfig) String() string {\n\tswitch s {\n\tcase recvErrorAlways:\n\t\treturn \"always\"\n\tcase recvErrorNever:\n\t\treturn \"never\"\n\tcase recvErrorPrivate:\n\t\treturn \"private\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"invalid(%d)\", s)\n\t}\n}\n\nfunc NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {\n\tif c.Outside == nil {\n\t\treturn nil, errors.New(\"no outside connection\")\n\t}\n\tif c.Inside == nil {\n\t\treturn nil, errors.New(\"no inside interface (tun)\")\n\t}\n\tif c.pki == nil {\n\t\treturn nil, errors.New(\"no certificate state\")\n\t}\n\tif c.Firewall == nil {\n\t\treturn nil, errors.New(\"no firewall rules\")\n\t}\n\tif c.connectionManager == nil {\n\t\treturn nil, errors.New(\"no connection manager\")\n\t}\n\n\tif c.routines <= 1 {\n\t\tc.PinThreads = false //pinning is not useful unless there's more than one tun reader\n\t}\n","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/slackhq/nebula/blob/dd8f660c0ac37903ec4080ca4d3c861ba9342ceb/interface.go#L168-L204","documentation":"NewInterface (interface.go) validates the InterfaceConfig before building the nebula interface. This error means c.Outside is nil — no UDP socket/connection for encrypted outbound traffic was supplied, so the interface cannot be constructed.","triggerScenarios":"Calling NewInterface with an InterfaceConfig whose Outside field is nil, i.e. the udp.Conn for the outside (physical) interface was never created or failed to bind.","commonSituations":"UDP listener failed to bind (port in use, missing capability) earlier in Main and the nil conn was still passed through; misconfigured listen host/port in config; wiring bug in custom embedding of nebula.","solutions":["Fix the underlying UDP bind failure (check port availability, host/port config, CAP_NET_ADMIN/net_bind capability)","Check earlier logs for the udp listener creation error before this one","Ensure Main/service wiring always sets InterfaceConfig.Outside from a successfully opened udp.Conn"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if cfg.InterfaceConfig.Outside == nil {\n    return errors.New(\"outside udp connection not initialized; check listen host/port and bind errors\")\n}","typeGuard":null,"tryCatchPattern":"i, err := NewInterface(ctx, c)\nif err != nil {\n    if err.Error() == \"no outside connection\" { /* fix udp bind / listen config */ }\n    return err\n}","preventionTips":["Always open the udp.Conn before building InterfaceConfig","Check bind errors in logs at startup","Validate listen host/port config before launch"],"tags":["network","config","udp","nebula","startup"],"backgroundTag":"missing-required-config","analyzedSha":"dd8f660c0ac37903ec4080ca4d3c861ba9342ceb","analyzedAt":"2026-09-03T11:13:55.444Z","contentChangedAt":"2026-09-03T11:13:55.444Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}