mirror of
https://github.com/slackhq/nebula.git
synced 2026-11-15 07:26:52 +01:00
Charge staged reservations to each tunnel instead of dividing a static share of the window by routines. Several readers sending on one tunnel then share its credit: the limit is half the peer replay window, assumed from ReplayWindow, which must be a power of two of at least 8192 (checked at compile time). The other half allows finite unreserved traffic (inline and control sends, relay forwarding through SendVia) and network reordering; unlimited bypass traffic or delay can still exceed it. An outstanding-count cap alone would let a fast reader repeatedly send and reacquire credit, overtaking a paused reader without bound. So once readers overlap, spent credit is only recycled when every reservation has drained. A sole ordered reader gets each completion refunded, since its later batches cannot overtake its earlier ones. A reader that fails to acquire ends sole ownership, so a busy owner cannot keep a larger waiter blocked forever. This restores progress, not FIFO fairness. All transitions are a single CAS. Waiting readers flush their own oldest batch before retrying and never hold a partial acquisition: a failed multi-tunnel (relay) acquisition rolls back. Credit is released only after the flush or an explicit drop. A read that alone exceeds a tunnel's credit, such as a tiny-MSS superpacket, is sent segment by segment, synchronously. Acquisition is per read, so pressure on one tunnel also delays the other tunnels in the same read. The combined staged transmit, receive and shared credit measured 15 to 25 Gbit/s over one tunnel with eight TCP streams between two 100 GbE hosts. Tests model overtaking, ordered reuse, a blocked reader behind a busy owner, and relay rollback with both window sizes, and run eight competing readers plus unreserved control traffic on one tunnel, checking every packet is accepted by the receiver's replay window in wire order.
520 lines
27 KiB
YAML
520 lines
27 KiB
YAML
# This is the nebula example configuration file. You must edit, at a minimum, the static_host_map, lighthouse, and firewall sections
|
|
# Some options in this file are HUPable, including the pki section. (A HUP will reload credentials from disk without affecting existing tunnels)
|
|
|
|
# PKI defines the location of credentials for this node. Each of these can also be inlined by using the yaml ": |" syntax.
|
|
pki:
|
|
# The CAs that are accepted by this node. Must contain one or more certificates created by 'nebula-cert ca'
|
|
ca: /etc/nebula/ca.crt
|
|
cert: /etc/nebula/host.crt
|
|
key: /etc/nebula/host.key
|
|
# blocklist is a list of certificate fingerprints that we will refuse to talk to
|
|
# Entries are the hex fingerprints shown by `nebula-cert print`, an invalid entry fails startup and reload.
|
|
#blocklist:
|
|
# - c99d4e650533b92061b09918e838a5a0a6aaee21eed1d12fd937682865936c72
|
|
# disconnect_invalid is a toggle to force a client to be disconnected if the certificate is expired or invalid.
|
|
#disconnect_invalid: true
|
|
|
|
# initiating_version controls which certificate version is used when initiating handshakes.
|
|
# This setting only applies if both a v1 and a v2 certificate are configured, in which case it will default to `1`.
|
|
# Once all hosts in the mesh are configured with both a v1 and v2 certificate then this should be changed to `2`.
|
|
# After all hosts in the mesh are using a v2 certificate then v1 certificates are no longer needed.
|
|
# initiating_version: 1
|
|
|
|
# The static host map defines a set of hosts with fixed IP addresses on the internet (or any network).
|
|
# A host can have multiple fixed IP addresses defined here, and nebula will try each when establishing a tunnel.
|
|
# The syntax is:
|
|
# "{nebula ip}": ["{routable ip/dns name}:{routable port}"]
|
|
# Example, if your lighthouse has the nebula IP of 192.168.100.1 and has the real ip address of 100.64.22.11 and runs on port 4242:
|
|
static_host_map:
|
|
"192.168.100.1": ["100.64.22.11:4242"]
|
|
|
|
# The static_map config stanza can be used to configure how the static_host_map behaves.
|
|
#static_map:
|
|
# cadence determines how frequently DNS is re-queried for updated IP addresses when a static_host_map entry contains
|
|
# a DNS name.
|
|
#cadence: 30s
|
|
|
|
# network determines the type of IP addresses to ask the DNS server for. The default is "ip4" because nodes typically
|
|
# do not know their public IPv4 address. Connecting to the Lighthouse via IPv4 allows the Lighthouse to detect the
|
|
# public address. Other valid options are "ip6" and "ip" (returns both.)
|
|
#network: ip4
|
|
|
|
# lookup_timeout is the DNS query timeout.
|
|
#lookup_timeout: 250ms
|
|
|
|
lighthouse:
|
|
# am_lighthouse is used to enable lighthouse functionality for a node. This should ONLY be true on nodes
|
|
# you have configured to be lighthouses in your network. Not reloadable.
|
|
am_lighthouse: false
|
|
# serve_dns optionally starts a dns listener that responds to various queries and can even be
|
|
# delegated to for resolution
|
|
#serve_dns: false
|
|
#dns:
|
|
# The DNS host defines the IP to bind the dns listener to. This also allows binding to the nebula node IP.
|
|
#host: 0.0.0.0
|
|
#port: 53
|
|
# interval is the number of seconds between updates from this node to a lighthouse.
|
|
# during updates, a node sends information about its current IP addresses to each node.
|
|
interval: 60
|
|
# hosts is a list of lighthouse hosts this node should report to and query from
|
|
# IMPORTANT: THIS SHOULD BE EMPTY ON LIGHTHOUSE NODES
|
|
# IMPORTANT2: THIS SHOULD BE LIGHTHOUSES' NEBULA IPs, NOT LIGHTHOUSES' REAL ROUTABLE IPs
|
|
hosts:
|
|
- "192.168.100.1"
|
|
|
|
# remote_allow_list allows you to control ip ranges that this node will
|
|
# consider when handshaking to another node. By default, any remote IPs are
|
|
# allowed. You can provide CIDRs here with `true` to allow and `false` to
|
|
# deny. The most specific CIDR rule applies to each remote. If all rules are
|
|
# "allow", the default will be "deny", and vice-versa. If both "allow" and
|
|
# "deny" IPv4 rules are present, then you MUST set a rule for "0.0.0.0/0" as
|
|
# the default. Similarly if both "allow" and "deny" IPv6 rules are present,
|
|
# then you MUST set a rule for "::/0" as the default.
|
|
#remote_allow_list:
|
|
# Example to block IPs from this subnet from being used for remote IPs.
|
|
#"172.16.0.0/12": false
|
|
|
|
# A more complicated example, allow public IPs but only private IPs from a specific subnet
|
|
#"0.0.0.0/0": true
|
|
#"10.0.0.0/8": false
|
|
#"10.42.42.0/24": true
|
|
|
|
# EXPERIMENTAL: This option may change or disappear in the future.
|
|
# Optionally allows the definition of remote_allow_list blocks
|
|
# specific to an inside VPN IP CIDR.
|
|
#remote_allow_ranges:
|
|
# This rule would only allow only private IPs for this VPN range
|
|
#"10.42.42.0/24":
|
|
#"192.168.0.0/16": true
|
|
|
|
# local_allow_list allows you to filter which local IP addresses we advertise
|
|
# to the lighthouses. This uses the same logic as `remote_allow_list`, but
|
|
# additionally, you can specify an `interfaces` map of regular expressions
|
|
# to match against interface names. The regexp must match the entire name.
|
|
# All interface rules must be either true or false (and the default will be
|
|
# the inverse). CIDR rules are matched after interface name rules.
|
|
# Default is all local IP addresses.
|
|
#local_allow_list:
|
|
# Example to block tun0 and all docker interfaces.
|
|
#interfaces:
|
|
#tun0: false
|
|
#'docker.*': false
|
|
# Example to only advertise this subnet to the lighthouse.
|
|
#"10.0.0.0/8": true
|
|
|
|
# advertise_addrs are routable addresses that will be included along with discovered addresses to report to the
|
|
# lighthouse, the format is "ip:port". `port` can be `0`, in which case the actual listening port will be used in its
|
|
# place, useful if `listen.port` is set to 0.
|
|
# This option is mainly useful when there are static ip addresses the host can be reached at that nebula can not
|
|
# typically discover on its own. Examples being port forwarding or multiple paths to the internet.
|
|
#advertise_addrs:
|
|
#- "1.1.1.1:4242"
|
|
#- "1.2.3.4:0" # port will be replaced with the real listening port
|
|
|
|
# EXPERIMENTAL: This option may change or disappear in the future.
|
|
# This setting allows us to "guess" what the remote might be for a host
|
|
# while we wait for the lighthouse response.
|
|
#calculated_remotes:
|
|
# For any Nebula IPs in 10.0.10.0/24, this will apply the mask and add
|
|
# the calculated IP as an initial remote (while we wait for the response
|
|
# from the lighthouse). Both CIDRs must have the same mask size.
|
|
# For example, Nebula IP 10.0.10.123 will have a calculated remote of
|
|
# 192.168.1.123
|
|
#10.0.10.0/24:
|
|
#- mask: 192.168.1.0/24
|
|
# port: 4242
|
|
|
|
# Port Nebula will be listening on. The default here is 4242. For a lighthouse node, the port should be defined,
|
|
# however using port 0 will dynamically assign a port and is recommended for roaming nodes.
|
|
listen:
|
|
# To listen on only ipv4, use "0.0.0.0". Not reloadable.
|
|
host: "::"
|
|
# Not reloadable.
|
|
port: 4242
|
|
# Sets the max number of packets to pull from the kernel for each syscall (under systems that support recvmmsg)
|
|
# default is 64, does not support reload
|
|
# Note: on Linux with UDP GRO (kernel 5.10+), each receive slot is sized for a full 64KiB coalesced
|
|
# superpacket, so the receive scratch is batch * 64KiB per listening socket (~4MiB per routine at the
|
|
# default of 64). Lower this to trade peak per-syscall throughput for memory on constrained hosts.
|
|
#batch: 64
|
|
# Linux only. Reloadable, but removing a value leaves the socket at the old size until Nebula restarts.
|
|
# Configure socket buffers for the udp side (outside), leave unset to use the system defaults. Values will be doubled by the kernel
|
|
# Default is net.core.rmem_default and net.core.wmem_default (/proc/sys/net/core/rmem_default and /proc/sys/net/core/rmem_default)
|
|
# Maximum is limited by memory in the system, SO_RCVBUFFORCE and SO_SNDBUFFORCE is used to avoid having to raise the system wide
|
|
# max, net.core.rmem_max and net.core.wmem_max
|
|
read_buffer: 3412512
|
|
write_buffer: 3412512
|
|
|
|
# On Windows only
|
|
# When true, Nebula installs a WFP (Windows Filtering Platform) PERMIT filter scoped to UDP at the listener port.
|
|
# WFP sits below Windows Defender Firewall, so this lets peer handshakes reach Nebula's outside socket regardless
|
|
# of WDF's inbound rules.
|
|
# Default true; set to false to leave WDF in charge of inbound decisions on the listener port. Not reloadable.
|
|
#windows_bypass_wdf: true
|
|
|
|
# On macOS only
|
|
# macOS scopes the udp socket to the interface it was created on, so moving between networks (wifi to wired,
|
|
# office to home) leaves Nebula sending out an interface that no longer has a route. When true, Nebula watches
|
|
# the routing socket and rebinds the listener once the change settles.
|
|
# iOS does not use this, the host app drives the same rebind itself.
|
|
# Default true. Not reloadable.
|
|
#rebind_on_network_change: true
|
|
|
|
# By default, Nebula replies to packets it has no tunnel for with a "recv_error" packet. This packet helps speed up reconnection
|
|
# in the case that Nebula on either side did not shut down cleanly. This response can be abused as a way to discover if Nebula is running
|
|
# on a host though. This option lets you configure if you want to send "recv_error" packets always, never, or only to private network remotes.
|
|
# valid values: always, never, private
|
|
# This setting is reloadable.
|
|
#send_recv_error: always
|
|
# Similar to send_recv_error, this option lets you configure if you want to accept "recv_error" packets from remote hosts.
|
|
# valid values: always, never, private
|
|
# This setting is reloadable.
|
|
#accept_recv_error: always
|
|
# The so_sock option is a Linux-specific feature that allows all outgoing Nebula packets to be tagged with a specific identifier.
|
|
# This tagging enables IP rule-based filtering. For example, it supports 0.0.0.0/0 unsafe_routes,
|
|
# allowing for more precise routing decisions based on the packet tags. Default is 0 meaning no mark is set.
|
|
# This setting is reloadable.
|
|
#so_mark: 0
|
|
# the udp_offloads setting controls if Nebula will attempt to enable GSO and GRO for its UDP socket(s). Linux only, not reloadable.
|
|
# udp_offloads: false
|
|
|
|
# Routines is the number of thread pairs to run that consume from the tun and UDP queues.
|
|
# Currently, this defaults to 1 which means we have 1 tun queue reader and 1
|
|
# UDP queue reader. Setting this above one will set IFF_MULTI_QUEUE on the tun
|
|
# device and SO_REUSEPORT on the UDP socket to allow multiple queues.
|
|
# This option is only supported on Linux. Not reloadable.
|
|
#routines: 1
|
|
|
|
punchy:
|
|
# Continues to punch inbound/outbound at a regular interval to avoid expiration of firewall nat mappings
|
|
# This setting is reloadable.
|
|
punch: true
|
|
|
|
# respond means that a node you are trying to reach will connect back out to you if your hole punching fails
|
|
# this is extremely useful if one node is behind a difficult nat, such as a symmetric NAT
|
|
# Default is false
|
|
# This setting is reloadable.
|
|
#respond: true
|
|
|
|
# delays a punch response for misbehaving NATs, default is 1 second.
|
|
# This setting is reloadable.
|
|
#delay: 1s
|
|
|
|
# set the delay before attempting punchy.respond. Default is 5 seconds. respond must be true to take effect.
|
|
# This setting is reloadable.
|
|
#respond_delay: 5s
|
|
|
|
# Cipher allows you to choose between the available ciphers for your network. Options are chachapoly or aes
|
|
# IMPORTANT: this value must be identical on ALL NODES/LIGHTHOUSES. We do not/will not support use of different ciphers simultaneously!
|
|
# Not reloadable.
|
|
#cipher: aes
|
|
|
|
# Preferred ranges is used to define a hint about the local network ranges, which speeds up discovering the fastest
|
|
# path to a network adjacent nebula node.
|
|
# This setting is reloadable.
|
|
#preferred_ranges: ["172.16.0.0/24"]
|
|
|
|
# sshd can expose informational and administrative functions via ssh. This can expose informational and administrative
|
|
# functions, and allows manual tweaking of various network settings when debugging or testing.
|
|
#sshd:
|
|
# Toggles the feature
|
|
#enabled: true
|
|
# Host and port to listen on, port 22 is not allowed for your safety
|
|
#listen: 127.0.0.1:2222
|
|
# A file containing the ssh host private key to use
|
|
# A decent way to generate one: ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N "" < /dev/null
|
|
#host_key: ./ssh_host_ed25519_key
|
|
# Authorized users and their public keys
|
|
#authorized_users:
|
|
#- user: steeeeve
|
|
# keys can be an array of strings or single string
|
|
#keys:
|
|
#- "ssh public key string"
|
|
# Trusted SSH CA public keys. These are the public keys of the CAs that are allowed to sign SSH keys for access.
|
|
#trusted_cas:
|
|
#- "ssh public key string"
|
|
|
|
# EXPERIMENTAL: relay support for networks that can't establish direct connections.
|
|
relay:
|
|
# Relays are a list of Nebula IP's that peers can use to relay packets to me.
|
|
# IPs in this list must have am_relay set to true in their configs, otherwise
|
|
# they will reject relay requests.
|
|
#relays:
|
|
#- 192.168.100.1
|
|
#- <other Nebula VPN IPs of hosts used as relays to access me>
|
|
# Set am_relay to true to permit other hosts to list my IP in their relays config. Default false.
|
|
am_relay: false
|
|
# Set use_relays to false to prevent this instance from attempting to establish connections through relays.
|
|
# default true
|
|
use_relays: true
|
|
|
|
# Configure the private interface. Note: addr is baked into the nebula certificate
|
|
tun:
|
|
# When tun is disabled, a lighthouse can be started without a local tun interface (and therefore without root)
|
|
# Not reloadable.
|
|
disabled: false
|
|
# Name of the device. If not set, a default will be chosen by the OS.
|
|
# For macOS: if set, must be in the form `utun[0-9]+`.
|
|
# For OpenBSD and NetBSD: if set, must be in the form `tun[0-9]+`, otherwise the first free one is used.
|
|
# Not reloadable.
|
|
dev: nebula1
|
|
# Toggles forwarding of local broadcast packets, the address of which depends on the ip/mask encoded in pki.cert
|
|
# Not reloadable.
|
|
drop_local_broadcast: false
|
|
# Toggles forwarding of multicast packets. Not reloadable.
|
|
drop_multicast: false
|
|
# Sets the transmit queue length, if you notice lots of transmit drops on the tun it may help to raise this number. Default is 5000
|
|
# Not reloadable.
|
|
tx_queue: 5000
|
|
# Default MTU for every packet, safe setting is (and the default) 1300 for internet based traffic
|
|
# Anything above 8937, here or on a route below, is capped to 8937 with a warning
|
|
# Reloadable on Linux only. Where the tun is handed to nebula by a host app (iOS, Android, macOS network extensions)
|
|
# the host app owns the MTU.
|
|
mtu: 1300
|
|
|
|
# the use_offloads setting controls if Nebula will attempt to enable GSO and GRO for the tun device. Linux only, not reloadable.
|
|
#use_offloads: false
|
|
|
|
# Linux only. staged.workers enables staged packet processing: each routine hands its batches to this many crypto
|
|
# workers per direction, then sends or writes them in order. 0, the default, keeps processing inline. Not reloadable.
|
|
# Transmit needs use_offloads; BoringCrypto and FIPS builds keep it inline because AES-GCM there needs ordered nonces.
|
|
# Receive needs a listener that can hand off its batches, which Linux has.
|
|
# IMPORTANT: staged senders require peers with at least the 8192-entry replay window of this release. Released
|
|
# v1.11.x peers use 1024 and are incompatible. The window is not negotiated.
|
|
# Staged reservations may use half the window, the other half absorbs inline and control traffic, relay forwarding
|
|
# and network reordering; unlimited forwarding or delay can still exceed it. Waiting for credit on a busy tunnel
|
|
# also delays the other tunnels of the same read, and readers are not guaranteed fairness.
|
|
#staged:
|
|
# workers: 0
|
|
|
|
# Linux only. pin_threads pins each tun reader/encrypt OS thread to a single CPU. This keeps every goroutine's
|
|
# batched sends flowing through one XPS-selected NIC TX ring, so packets within a flow stay ordered on the wire
|
|
# instead of being sprayed across multiple TX rings and reordered. Not reloadable. Coerced to false if routines <= 1.
|
|
# Staged senders are only pinned with an explicit cpu_affinity, see below; otherwise the scheduler places them.
|
|
#pin_threads: true
|
|
|
|
# pin_threads_key helps the CPU-auto-selector shuffle which CPUs are chosen for pinning.
|
|
# Valid options are "pid" or "port". Use "port" if you want Nebula to choose the same cores every time, which is nice for benchmarking.
|
|
# Linux only, not reloadable.
|
|
#pin_threads_key: "pid"
|
|
|
|
# Linux only. cpu_affinity overrides which CPUs the tun reader threads pin to: a list of CPU IDs, one per routine
|
|
# (see the top-level `routines` setting). Lists shorter than `routines` are modulo-cycled across the queues; extra
|
|
# entries are ignored. Staged sender i pins to entry i+1, modulo-cycled the same way, unless that is its reader's
|
|
# CPU, as with a one-entry list: a sender never shares its reader's CPU and stays unpinned instead.
|
|
# IDs must be within the process's allowed CPU set, so this respects taskset / cgroup cpusets;
|
|
# a non-integer or not-allowed entry disables the override, leaving the default pin selection described below.
|
|
# Only meaningful while pin_threads is true. Not reloadable.
|
|
# When unset (or rejected), the default spread prefers performance cores on heterogeneous CPUs (ARM big.LITTLE,
|
|
# Intel P/E hybrids, AMD compact cores), keeps all readers on one NUMA node and on distinct physical cores when the
|
|
# topology allows (SMT siblings last), leaves CPU 0's physical core as a last resort, and rotates its starting
|
|
# point per instance (keyed by the bound UDP port) so co-located nebulas don't stack their readers onto the
|
|
# same cores.
|
|
#cpu_affinity:
|
|
# - 2
|
|
# - 4
|
|
|
|
# Route based MTU overrides, you have known vpn ip paths that can support larger MTUs you can increase/decrease them here
|
|
routes:
|
|
#- mtu: 8800
|
|
# route: 10.0.0.0/16
|
|
|
|
# Unsafe routes allows you to route traffic over nebula to non-nebula nodes
|
|
# Unsafe routes should be avoided unless you have hosts/services that cannot run nebula
|
|
# Supports weighted ECMP if you define a list of gateways, this can be used for load balancing or redundancy to hosts outside of nebula
|
|
# NOTES:
|
|
# * You will only see a single gateway in the routing table if you are not on linux
|
|
# * If a gateway is not reachable through the overlay another gateway will be selected to send the traffic through, ignoring weights
|
|
#
|
|
# unsafe_routes:
|
|
# # Multiple gateways without defining a weight defaults to a weight of 1, this will balance traffic equally between the three gateways
|
|
# - route: 192.168.87.0/24
|
|
# via:
|
|
# - gateway: 10.0.0.1
|
|
# - gateway: 10.0.0.2
|
|
# - gateway: 10.0.0.3
|
|
# # Multiple gateways with a weight, this will balance traffic accordingly
|
|
# - route: 192.168.87.0/24
|
|
# via:
|
|
# - gateway: 10.0.0.1
|
|
# weight: 10
|
|
# - gateway: 10.0.0.2
|
|
# weight: 5
|
|
#
|
|
# NOTE: The nebula certificate of the "via" node(s) *MUST* have the "route" defined as a subnet in its certificate
|
|
# `via`: single node or list of gateways to use for this route
|
|
# `mtu`: will default to tun mtu if this option is not specified
|
|
# `metric`: will default to 0 if this option is not specified
|
|
# `install`: will default to true, controls whether this route is installed in the systems routing table.
|
|
# This setting is reloadable.
|
|
unsafe_routes:
|
|
#- route: 172.16.1.0/24
|
|
# via: 192.168.100.99
|
|
# mtu: 1300
|
|
# metric: 100
|
|
# install: true
|
|
|
|
# On Windows only, sets the network category of the nebula interface. Without this, Windows often
|
|
# leaves the network as "Unidentified" and treats it as Public, which makes the host firewall more
|
|
# restrictive than you usually want for an overlay between trusted peers. Valid values:
|
|
# private - treat the nebula network as a private/trusted network (default)
|
|
# public - treat it as a public/untrusted network
|
|
# domain - treat it as a domain-authenticated network
|
|
# unset - leave whatever Windows decided alone
|
|
# Not reloadable.
|
|
#network_category: private
|
|
|
|
# On Windows only
|
|
# When true, Nebula installs a WFP (Windows Filtering Platform) PERMIT filter scoped to the nebula adapter LUID.
|
|
# WFP sits below Windows Defender Firewall, so this lets inbound traffic through regardless of WDF rules.
|
|
# Filters are auto-removed when the adapter goes away.
|
|
# See listen.windows_bypass_wdf for the matching control over inbound to nebula's outside UDP listener.
|
|
# Default true; set to false to leave WDF in charge of inbound decisions on the nebula interface. Not reloadable.
|
|
#windows_bypass_wdf: true
|
|
|
|
# On linux only, set to true to manage unsafe routes directly on the system route table with gateway routes instead of
|
|
# in nebula configuration files. Default false, not reloadable.
|
|
#use_system_route_table: false
|
|
# Buffer size for reading routes updates. 0 means default system buffer size. (/proc/sys/net/core/rmem_default).
|
|
# If using massive routes updates, for example BGP, you may need to increase this value to avoid packet loss.
|
|
# SO_RCVBUFFORCE is used to avoid having to raise the system wide max. Not reloadable.
|
|
#use_system_route_table_buffer_size: 0
|
|
|
|
# Configure logging level
|
|
logging:
|
|
# trace, debug, info, warn, or error. Default is info and is reloadable.
|
|
# fatal and panic are accepted for backwards compatibility and map to error.
|
|
#NOTE: Debug and trace modes can log remotely controlled/untrusted data which can quickly fill a disk in some
|
|
# scenarios. Debug and trace logging are also CPU intensive and will decrease performance overall.
|
|
# Only enable debug or trace logging while actively investigating an issue.
|
|
level: info
|
|
# json or text formats currently available. Default is text.
|
|
format: text
|
|
# Disable timestamp logging. Useful when output is redirected to a logging system that already adds timestamps. Default is false.
|
|
#disable_timestamp: true
|
|
# Timestamps use RFC3339Nano ("2006-01-02T15:04:05.999999999Z07:00") and are not configurable.
|
|
|
|
# The stats section is reloadable. A HUP may change the backend, toggle stats
|
|
# on or off, switch the listen/host address, or pick up new DNS for the
|
|
# configured graphite host.
|
|
#stats:
|
|
#type: graphite
|
|
#prefix: nebula
|
|
#protocol: tcp
|
|
#host: 127.0.0.1:9999
|
|
#interval: 10s
|
|
|
|
#type: prometheus
|
|
#listen: 127.0.0.1:8080
|
|
#path: /metrics
|
|
#namespace: prometheusns
|
|
#subsystem: nebula
|
|
#interval: 10s
|
|
|
|
# enables counter metrics for meta packets
|
|
# e.g.: `messages.tx.handshake`
|
|
# NOTE: `message.{tx,rx}.recv_error` is always emitted
|
|
# Not reloadable.
|
|
#message_metrics: false
|
|
|
|
# enables detailed counter metrics for lighthouse packets
|
|
# e.g.: `lighthouse.rx.HostQuery`
|
|
# Not reloadable.
|
|
#lighthouse_metrics: false
|
|
|
|
# Handshake Manager Settings
|
|
#handshakes:
|
|
# Handshakes are sent to all known addresses at each interval with a linear backoff,
|
|
# Wait try_interval after the 1st attempt, 2 * try_interval after the 2nd, etc, until the handshake is older than timeout
|
|
# A 100ms interval with the default 10 retries will give a handshake 5.5 seconds to resolve before timing out
|
|
# Not reloadable.
|
|
#try_interval: 100ms
|
|
#retries: 20
|
|
|
|
# query_buffer is the size of the buffer channel for querying lighthouses, drops are recorded in the lighthouse.query.dropped metric.
|
|
# Not reloadable.
|
|
#query_buffer: 1024
|
|
|
|
# trigger_buffer is the size of the buffer channel for quickly sending handshakes
|
|
# after receiving the response for lighthouse queries. Not reloadable.
|
|
#trigger_buffer: 64
|
|
|
|
# Tunnel manager settings
|
|
#tunnels:
|
|
# drop_inactive controls whether inactive tunnels are maintained or dropped after the inactive_timeout period has
|
|
# elapsed.
|
|
# In general, it is a good idea to enable this setting. It will be enabled by default in a future release.
|
|
# This setting is reloadable
|
|
#drop_inactive: false
|
|
|
|
# inactivity_timeout controls how long a tunnel MUST NOT see any inbound or outbound traffic before being considered
|
|
# inactive and eligible to be dropped.
|
|
# This setting is reloadable
|
|
#inactivity_timeout: 10m
|
|
|
|
# Nebula security group configuration
|
|
firewall:
|
|
# Action to take when a packet is not allowed by the firewall rules.
|
|
# Can be one of:
|
|
# `drop` (default): silently drop the packet.
|
|
# `reject`: send a reject reply.
|
|
# - For TCP, this will be a RST "Connection Reset" packet.
|
|
# - For other protocols, this will be an ICMP "Destination unreachable: Communication administratively prohibited" packet.
|
|
outbound_action: drop
|
|
inbound_action: drop
|
|
|
|
# THIS FLAG IS DEPRECATED AND WILL BE REMOVED IN A FUTURE RELEASE. (Defaults to false.)
|
|
# This setting only affects nebula hosts exposing unsafe_routes. When set to false, each inbound rule must contain a
|
|
# `local_cidr` if the intention is to allow traffic to flow to an unsafe route. When set to true, every firewall rule
|
|
# will apply to all configured unsafe_routes regardless of the actual destination of the packet, unless `local_cidr`
|
|
# is explicitly defined. This is usually not the desired behavior and should be avoided!
|
|
#default_local_cidr_any: false
|
|
|
|
conntrack:
|
|
tcp_timeout: 12m
|
|
udp_timeout: 3m
|
|
default_timeout: 10m
|
|
|
|
# The firewall is default deny. There is no way to write a deny rule.
|
|
# Rules are comprised of a protocol, port, and one or more of host, group, or CIDR
|
|
# Logical evaluation is roughly: port AND proto AND (ca_sha OR ca_name) AND (host OR group OR groups OR cidr) AND (local cidr)
|
|
# - port: Takes `0` or `any` as any, a single number `80`, a range `200-901`, or `fragment` to match second and further fragments of fragmented packets (since there is no port available).
|
|
# proto: `any`, `tcp`, `udp`, or `icmp`
|
|
# a port specification is ignored if proto is `icmp`
|
|
# host: `any` or a literal hostname, ie `test-host`
|
|
# group: `any` or a literal group name, ie `default-group`
|
|
# groups: Same as group but accepts a list of values. Multiple values are AND'd together and a certificate would have to contain all groups to pass
|
|
# cidr: a remote CIDR, `0.0.0.0/0` is any ipv4 and `::/0` is any ipv6. `any` means any ip family and address.
|
|
# local_cidr: a local CIDR, `0.0.0.0/0` is any ipv4 and `::/0` is any ipv6. `any` means any ip family and address.
|
|
# This can be used to filter destinations when using unsafe_routes.
|
|
# By default, this is set to only the VPN (overlay) networks assigned via the certificate networks field unless `default_local_cidr_any` is set to true.
|
|
# If there are unsafe_routes present in this config file, `local_cidr` should be set appropriately for the intended us case.
|
|
# ca_name: An issuing CA name
|
|
# ca_sha: An issuing CA shasum
|
|
|
|
outbound:
|
|
# Allow all outbound traffic from this node
|
|
- port: any
|
|
proto: any
|
|
host: any
|
|
|
|
inbound:
|
|
# Allow icmp between any nebula hosts
|
|
- port: any
|
|
proto: icmp
|
|
host: any
|
|
|
|
# Allow tcp/443 from any host with BOTH laptop and home group
|
|
- port: 443
|
|
proto: tcp
|
|
groups:
|
|
- laptop
|
|
- home
|
|
|
|
# Expose a subnet (unsafe route) to hosts with the group remote_client
|
|
# This example assume you have a subnet of 192.168.100.1/24 or larger encoded in the certificate
|
|
- port: 8080
|
|
proto: tcp
|
|
group: remote_client
|
|
local_cidr: 192.168.100.1/24
|