{"record":{"id":"a8c2ca4ae2e67eaa","repo":"slackhq/nebula","slug":"lighthouse-s-does-not-have-a-static-host-map-entr","errorCode":null,"errorMessage":"lighthouse %s does not have a static_host_map entry","messagePattern":"lighthouse (.+?) does not have a static_host_map entry","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lighthouse.go","lineNumber":407,"sourceCode":"\t\t}\n\n\t\tif !lh.myVpnNetworksTable.Contains(addr) {\n\t\t\tlh.l.Warn(\"lighthouse host is not within our networks, lighthouse functionality will work but layer 3 network traffic to the lighthouse will not\",\n\t\t\t\t\"vpnAddr\", addr,\n\t\t\t\t\"networks\", lh.myVpnNetworks,\n\t\t\t)\n\t\t}\n\t\tout[i] = addr\n\t}\n\n\tif !lh.amLighthouse && len(out) == 0 {\n\t\tlh.l.Warn(\"No lighthouse.hosts configured, this host will only be able to initiate tunnels with static_host_map entries\")\n\t}\n\n\tstaticList := lh.GetStaticHostList()\n\tfor i := range out {\n\t\tif _, ok := staticList[out[i]]; !ok {\n\t\t\treturn nil, fmt.Errorf(\"lighthouse %s does not have a static_host_map entry\", out[i])\n\t\t}\n\t}\n\n\treturn out, nil\n}\n\nfunc getStaticMapCadence(c *config.C) (time.Duration, error) {\n\tcadence := c.GetString(\"static_map.cadence\", \"30s\")\n\td, err := time.ParseDuration(cadence)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d, nil\n}\n\nfunc getStaticMapLookupTimeout(c *config.C) (time.Duration, error) {\n\tlookupTimeout := c.GetString(\"static_map.lookup_timeout\", \"250ms\")\n\td, err := time.ParseDuration(lookupTimeout)","sourceCodeStart":389,"sourceCodeEnd":425,"githubUrl":"https://github.com/slackhq/nebula/blob/dd8f660c0ac37903ec4080ca4d3c861ba9342ceb/lighthouse.go#L389-L425","documentation":"parseLighthouses validates that every configured lighthouse host appears in the static_host_map. A lighthouse must be reachable via a static address since you cannot use lighthouse discovery to find the lighthouses themselves.","triggerScenarios":"Running reload with lighthouse.hosts containing an IP that is absent from static_host_map (after staticList := lh.GetStaticHostList()).","commonSituations":"Adding a lighthouse to lighthouse.hosts but forgetting to add its public IP:port under static_host_map in config.yml; changing lighthouse IPs during migration; YAML indentation mistakes putting entries in the wrong section.","solutions":["Add an entry for the lighthouse IP in static_host_map (lighthouse IP -> public-ip:port)","Remove the offending lighthouse from lighthouse.hosts","Fix YAML so hosts and static_host_map entries agree","Re-run/reload config after fixing"],"exampleFix":"// before (config.yml)\nlighthouse:\n  hosts: [\"192.168.100.1\"]\n// static_host_map missing 192.168.100.1\n// after\nstatic_host_map:\n  \"192.168.100.1\": [\"203.0.113.10:4242\"]\nlighthouse:\n  hosts: [\"192.168.100.1\"]","handlingStrategy":"validation","validationCode":"// before reload/startup\nstaticList := lh.GetStaticHostList()\nfor _, host := range cfg.Lighthouse.Hosts {\n    if _, ok := staticList[host]; !ok {\n        log.Printf(\"lighthouse %s missing from static_host_map\", host)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always list every lighthouse.hosts IP in static_host_map","Validate config with 'nebula -test' before deploying","Keep lighthouse and static_host_map sections in sync during IP migrations"],"tags":["configuration","lighthouse","yaml"],"backgroundTag":"missing-static-host-map-entry","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"}