Repository navigation
Conversation
✅ Deploy Preview for docs-nebula ready!
|
| Quote group names. YAML converts unquoted values before Nebula sees them, so `group: 007` would be read as `7` and | ||
| `group: 1.10` as `1.1`. Unquoted integers and booleans still work, but log a warning. A float, a date, a map, a nested | ||
| list, a `null` entry in `groups`, or `group: []` is rejected with an error, which fails startup or fails the reload and | ||
| keeps the previous firewall. A `group` or `groups` key with no value is treated as not set. |
There was a problem hiding this comment.
A group or groups key with no value is treated as not set. - this is now rejected unless a host, other group or cidr is set
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Fixed in 216b1a5. Now says a group or groups key with no value is rejected unless the rule also sets host, cidr, or a non-empty group/groups (matching the #2017 check in convertRule), and points at host: any.
|
|
||
| Every reload ends with one summary line in the log: | ||
|
|
||
| | Log line | Level | Meaning | |
There was a problem hiding this comment.
Missing: "Config reload failed, the new config did not load and a restart is still required".
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Added in 216b1a5 (config/reload.go:26): "Nothing was applied, and an earlier reload still needs a restart".
|
|
||
| | Platform | Settings | | ||
| | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| | All | `cipher`, `routines`, `listen.host`, `listen.port`, `lighthouse.am_lighthouse`, `handshakes.*`, `stats.message_metrics`, `stats.lighthouse_metrics`, `tun.disabled`, `tun.drop_local_broadcast`, `tun.drop_multicast`, `firewall.conntrack.routine_cache_timeout`, `timers.*` | |
There was a problem hiding this comment.
timers.requery_wait_duration is reloadable, I wonder if we want this guide at all since each config stanza has it's own "reloadable" pill?
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Jack says drop it, so the guide is gone in f7e2d46 and the two links to it are removed.
|
|
||
| <Pill className="mb-24">Reloadable</Pill> | ||
| Timestamps are always [RFC3339](https://datatracker.ietf.org/doc/html/rfc3339) with nanosecond precision, e.g. | ||
| `2006-01-02T15:04:05.999999999Z07:00`. The `logging.timestamp_format` setting was removed in v1.11.0 and is ignored. |
There was a problem hiding this comment.
Technically the precision depends on text (milliseconds) or json (nanoseconds) mode
There was a problem hiding this comment.
Actually one of my robots told me yesterday we no longer respect this setting post slog migration? Need to check.
There was a problem hiding this comment.
Correct but the precision still changes
There was a problem hiding this comment.
ohhhh I see what you mean
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Fixed in 216b1a5: text is millisecond (slog's appendRFC3339Millis), json is RFC3339Nano with trailing zeros trimmed. Re the setting: logging.disable_timestamp is still honored post-slog, logging.Handler.Handle zeroes r.Time and slog omits a zero time.
| match a `tcp` or `udp` rule. These packets are now classified as their real protocol. If you carry such a protocol over | ||
| IPv6 in the overlay, make sure a `proto: any` rule allows it. | ||
|
|
||
| IPv6 packets whose extension headers are truncated or more than 8 headers deep are dropped. |
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Right, IPv6FindUpperProtocol walks at most 8 headers and fails closed if the 8th is still an extension header, so 8 or more is dropped. Fixed in 216b1a5. (The function's doc comment in iputil/packet.go has the same off-by-one.)
| @@ -0,0 +1,72 @@ | |||
| --- | |||
| title: FIPS 140-3 mode | |||
There was a problem hiding this comment.
Could be helpful to note encrypting keys at rest will be rejected in FIPS mode
There was a problem hiding this comment.
I'm trying to decide if we should add an AES mode for that, or lean on "if you need fips, you ought to have your CA key somewhere hardware-backed"
There was a problem hiding this comment.
We can certainly improve the encryption at rest story for FIPs folks but it's not gonna make v1.12 unless there is a strong desire for it. Easier to call the gap out or hold this guide until then.
There was a problem hiding this comment.
BEEP BOOP ROBOT REPLY: Added in 216b1a5. Verified with a GOFIPS140=v1.0.0 -tags fips140enforce build of master: nebula-cert ca -encrypt fails, and nebula-cert sign can't use a CA key encrypted by a non-FIPS build, both on cipher.NewGCM being refused in FIPS 140-only mode.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…routines > 1, pin_threads_key fallback
…ocument blocklist and newer cert handling
…ps keep the last good addresses
… limited messages
…ue rules, and conntrack timeouts
…indows tun settings
…r fallback and reloadability, and listen.windows_bypass_wdf
…d in FIPS 140-only mode
… replace the stale TXT record examples
…load, and say local_range was removed
…ow failed DNS lookups are handled
…name limits, and nebula ctl
…efaults, and the -networks flag
…y and restart keys, log timestamp precision, FIPS encrypted keys
f7e2d46 to
1298dcb
Compare
jasikpark
left a comment
There was a problem hiding this comment.
Checked the added and changed claims against nebula master (2f5232e2). About 200 hold up, including relay.am_relay: the relay never reads the target's relay.relays. The site builds with no broken links or anchors, and prettier is clean. These don't line up with the code:
Wrong
reloading-configuration:46: "Changing a setting back to the value Nebula is running with does not need a restart."RestartRequiredIfChangedcompares against the previously loaded config, not running state (config/reload.go), andneedsRestartis sticky (config/config.go:230), which the sentence before already says. Onlycipher, Windowstun.network_category, and the conditionaltun.devcompare against running values.lighthouse.mdx:67,85/using-lighthouse-dns:77: the TXT answer isn't JSON asnebula-cert print -jsonprints it.dns.NewRR(fmt.Sprintf("%s TXT %s", …, crt.MarshalJSON()))doesn't quote the JSON, so miekg/dns splits it into character-strings and strips the quotes;digshows"{" "details" ":{" …. That's a nebula bug, but the doc shouldn't promise JSON until it's fixed. (print -jsonalso wraps in an array; TXT returns one object.)tunnels.mdx:38:messages.tx.exhaustedonly exists withstats.message_metrics: true(nil innewMessageMetricsOnlyRecvError). stats.mdx says so; tunnels.mdx should too.tun.mdx:198:tun.windows_bypass_wdfis amd64/arm64 only (tun_bypass_windows_386.gois a no-op), likelisten.windows_bypass_wdfalready says.
Narrower than written
tun.mdx:134: duplicateunsafe_routes: the warning is "only the last entry's via is used", which covers the route tree only. macOS installs the first entry's system route; on Linux, duplicates with differentmetrics both stay in the kernel.reloading-configuration:78/pki.mdx:52: a cert with different networks is refused only for a version already loaded (or when removing v2). Adding a new version with different networks is accepted, then asks for a restart (pki.go:111-118).lighthouse.mdx:68: other TXT queries get an empty NOERROR answer, not "no answer".pki.mdx:127: blocklisted handshakes log at debug on the responder side, at warn on the initiator side when the handshake fails.debug-ssh-commands:106:print-certalso prints JSON with no flag, and its-rawisn't documented.local-control-and-info-api:106: real?prettyoutput is 4-spaceMarshalIndentwith one array element per line.
Structure
- +1 to Nate on the restart table in the reloading guide. It already drifted (
timers.*), and it duplicates the per-key labels. Relatedly, "Reloadable" is a pill but not-reloadable is prose in about a dozen phrasings ("Not reloadable.", "is not reloadable, changing it takes effect after a restart", …). ARestart requiredpill would make the config pages the single source, and the guide could link there instead of listing keys.
Unconfirmed
- "Added in v1.12.0" labels: everything is still under
[Unreleased]; fine once nebula#2027 (v1.12.0 changelog) lands as 1.12.0.
— Caleb + Cache
| `TXT` records can only be queried over the Nebula network, and contain certificate information for the requested host IP | ||
| address. | ||
| `TXT` records can only be queried from hosts on the Nebula network or from the lighthouse itself, and contain the | ||
| certificate of the requested host IP address as JSON. Other `TXT` queries get no answer. |
There was a problem hiding this comment.
TXT records don't parse as JSON today and they are only served locally from a lighthouse, maybe redirecting them to the local api socket would be valuable. This also applied to the using-lighthouse-dns guide.
jasikpark
left a comment
There was a problem hiding this comment.
Re-checked at dbf8049 against nebula v1.12.0 (fb4ef139). Dropping the reloading guide and the not-reloadable prose resolves the structure point: the pill is now the single source, and the pill audit is consistent. The trims also cleared the duplicate-unsafe_routes, TXT "no answer", and blocklist log-level items. v1.12.0 is tagged, so the "Added in" labels hold.
Blocking
Check prettierhas been red since fc1b33b:docs/config/static-host-map.mdxlost its trailing newline.
Still open from last round
lighthouse.mdx:67,84/using-lighthouse-dns:77: TXT answers still aren't JSON (dns_server.go:416builds the RR from unquotedMarshalJSON()). +1 to Nate: drop the JSON promise, or point at the info API, which serves the same identity as real JSON.tunnels.mdx:40:messages.tx.exhaustedis only registered withstats.message_metrics: true. stats.mdx:78 says so, tunnels.mdx doesn't.tun.mdx:181:tun.windows_bypass_wdfis amd64/arm64 only (overlay/tun_bypass_windows_386.go), the same aslisten.windows_bypass_wdfsays.local-control-and-info-api:103: the?prettysample is 2-space with inline arrays. Real output is 4-spaceMarshalIndent(info_api.go:146), with one array element per line.
From the trim
local-api.mdx:87: "On Windows, a change togrouptakes effect after a restart" leaves out the part that bites. A reload that removes or narrows the group stops the socket until restart (localapi/endpoint.go:66), sonebula ctlgoes away mid-reload. The earlier text said this.local-control-and-info-api(the info API caveat): "only answers for established tunnels and addresses inside this node's own overlay networks" reads as two things it answers for. Suggest "only answers for addresses inside this node's own overlay networks that have an established tunnel".firewall.mdxtip, nit: "decimal integers" → "integers".groupNamesees an int whatever the YAML spelling, so0x1Fis accepted as31too.
— Caleb + Cache
Brings the docs up to date with nebula
master(since v1.11.0) for the next release. Includes the offload and CPU pinning docs from #376 (plus fixes to them), so this supersedes #376.New pages
config/local-api: the control socket and the info APInebula ctland the info HTTP API, including the caveat about trusting identity answersFixed wrong values
tun.tx_queuedefault is 5000, not 500static_map.lookup_timeoutdefault is 5s, not 250mspki.disconnect_invaliddefault is true, not falsepki.initiating_versiondefault is 1 or 2 depending on the certs loaded, not 0stats.protocol: only tcp, tcp4 or tcp6 work; udp never didtun.devnaminglogging.timestamp_format, which no longer exists, and the log levelsidentityaddedNewly documented behavior
proto: anylisten.hostmeans Nebula ignores IPv6 underlay addressesnetwork_categoryandwindows_bypass_wdf, and DNS registration being offCAP_NET_ADMINhandshakes.query_bufferNotes for review
relay.am_relaynow says a relay does not check the target'srelay.relays. That matches the code, but the old text promised otherwise.🤖 Generated with Claude Code