summaryrefslogtreecommitdiffstats
path: root/doc/source/manual/config.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/manual/config.rst')
-rw-r--r--doc/source/manual/config.rst309
1 files changed, 309 insertions, 0 deletions
diff --git a/doc/source/manual/config.rst b/doc/source/manual/config.rst
new file mode 100644
index 0000000..ba924e8
--- /dev/null
+++ b/doc/source/manual/config.rst
@@ -0,0 +1,309 @@
+Configuration file format
+=========================
+
+Main configuration
+------------------
+
+Example config:
+
+::
+
+ # Log warnings and errors to stderr
+ log level warn;
+
+ # Log everything to syslog
+ log to syslog level debug;
+
+ # Set the interface name
+ interface "mesh-vpn";
+
+ # Support xsalsa20 and aes128 encryption methods, prefer xsalsa20
+ method "xsalsa20-poly1305";
+ method "aes128-gcm";
+
+ # Bind to a fixed port, IPv4 only
+ bind 0.0.0.0:10000;
+
+ # Secret key generated by `fastd --generate-key`
+ secret "78dfb05fe0aa586fb017de566b0d21398ac64032fcf1c765855f4d538cc5a357";
+
+ # Set the interface MTU for TAP mode with xsalsa20/aes128 over IPv4 with a base MTU of 1492 (PPPoE)
+ # (see MTU selection documentation)
+ mtu 1426;
+
+ # Include peers from the directory 'peers'
+ include peers from "peers";
+
+
+| ``bind <IPv4 address>:<port> [ interface "<interface>" ] [ default [ ipv4 ] ];``
+| ``bind <IPv6 address>:<port> [ interface "<interface>" ] [ default [ ipv6 ] ];``
+| ``bind any:<port> [ interface "<interface>" ] [ default [ ipv4|ipv6 ] ];``
+| ``bind <IPv4 address> port <port> [ interface "<interface>" ] [ default [ ipv4 ] ];``
+| ``bind <IPv6 address> port <port> [ interface "<interface>" ] [ default [ ipv6 ] ];``
+| ``bind any port <port> [ interface "<interface>" ] [ default [ ipv4|ipv6 ] ];``
+
+ Sets the bind address, port and possibly interface. May be specified multiple times. The keyword
+ any makes fastd bind to the unspecified address for both IPv4 and IPv6. When
+ no bind address is configured at all, for each outgoing connection a new socket with a random
+ port is created.
+
+ IPv6 address must be put in square brackets. It is possible to specify an IPv6 link-local address
+ with an interface in the usual notation (e.g. [fe80::1%eth0]).
+
+ The default option makes it the default address for outgoing connections
+ for IPv4, IPv6 or both.
+
+
+| ``cipher "<cipher>" use "<implementation>";``
+
+ Chooses a specific impelemenation for a cipher. Normally, the default setting is already the best choice.
+ Note that specific implementations may be unavailable on some platforms or disabled during compilation.
+ The available ciphers and implementations are:
+
+ * ``aes128-ctr``: AES128 in counter mode
+
+ - ``openssl``: Use implementation from OpenSSL's libcrypto
+ - ``nacl``: Use implementation from NaCl or libsodium
+
+ * ``null``: No encryption (for authenticated-only methods using composed_gmac)
+
+ - ``memcpy``: Simple memcpy-based implementation
+
+ * ``salsa20``: The Salsa20 stream cipher
+
+ - ``xmm``: Optimized implementation for x86/amd64 CPUs with SSE2 support
+ - ``nacl``: Use implementation from NaCl or libsodium
+
+ * ``salsa2012``: The Salsa20/12 stream cipher
+
+ - ``xmm``: Optimized implementation for x86/amd64 CPUs with SSE2 support
+ - ``nacl``: Use implementation from NaCl or libsodium
+
+
+| ``drop capabilities yes|no|early;``
+
+ By default, fastd switches to the configured user and/or drops its
+ POSIX capabilities after the on up command has been run.
+ When drop capabilities is set to early, the on up command
+ is run after the privileges have been dropped, when set to no, the POSIX capabilities
+ aren't dropped at all (but the user is switched after the on up command
+ has been run nevertheless).
+
+| ``forward yes|no;``
+
+ Enables or disabled forwarding packets between peers. Care must be taken not to create forwarding loops.
+
+| ``group "<group>";``
+
+ Sets the group to run fastd as.
+
+| ``hide ip addresses yes|no;``
+
+ Hides IP addresses in log output.
+
+| ``hide mac addresses yes|no;``
+
+ Hides MAC addresses in log output.
+
+| ``include "<file>";``
+
+ Includes another configuration file. Relative paths are interpreted relatively to the
+ including file.
+
+| ``include peer "<file>" [ as "<name>" ];``
+
+ Includes a peer configuration (and optionally gives the peer a name).
+
+| ``include peers from "<dir>";``
+
+ Includes each file in a directory as a peer configuration. These peers are reloaded when
+ fastd receives a SIGHUP signal.
+
+| ``interface "<name>";``
+
+ Sets the name of the TUN/TAP interface to use; it will be set by the OS when no name is configured explicitly.
+
+| ``log level fatal|error|warn|info|verbose|debug|debug2;``
+
+ Sets the default log level, meaning syslog if there is currently a level set for syslog, and stderr
+ otherwise.
+
+| ``log to stderr level fatal|error|warn|info|verbose|debug|debug2;``
+
+ Sets the stderr log level. By default no log messages are printed on stderr, unless no other
+ log destination is configured, which causes fastd to log to stderr with level info.
+
+| ``log to syslog [ as "<ident>" ] [ level fatal|error|warn|info|verbose|debug|debug2 ];``
+
+ Sets the syslog log level. By default syslog isn't used.
+
+| ``mac "<MAC>" use "<implementation>";``
+
+ Chooses a specific impelemenation for a message authentication code. Normally, the default setting is already the best
+ choice. Note that specific implementations may be unavailable on some platforms or disabled during compilation.
+ The available MACs and implementations are:
+
+ * ``ghash``: The MAC used by the GCM and GMAC methods
+
+ - ``pclmulqdq``: An optimized implementation for modern x86/amd64 CPUs supporting the PCLMULQDQ instruction
+ - ``builtin``: A generic implementation
+
+ * ``uhash``: The MAC used by the UMAC methods
+
+ - ``builtin``: A generic implementation
+
+| ``method "<method>";``
+
+ Sets the encryption/authentication method. See the page :doc:`methods` for more information about the supported methods.
+ When multiple method statements are given, the first one has the highest preference.
+
+| ``mode tap|tun;``
+
+ Sets the mode of the interface; the default is TAP mode.
+
+| ``mtu <MTU>;``
+
+ Sets the MTU; must be at least 576. You should read the page :doc:`mtu` as the default 1500 is suboptimal in most setups.
+
+| ``on pre-up [ sync | async ] "<command>";``
+| ``on up [ sync | async ] "<command>";``
+| ``on down [ sync | async ] "<command>";``
+| ``on post-down [ sync | async ] "<command>";``
+| ``on connect [ sync | async ] "<command>";``
+| ``on establish [ sync | async ] "<command>";``
+| ``on disestablish [ sync | async ] "<command>";``
+
+ Configures a shell command that is run after the interface is created, before the interface is destroyed,
+ when a handshake is sent to make a new connection,
+ when a new peer connection has been established, or after a peer connection has been lost. fastd will
+ block until the command has finished, to long-running processes should be started in the background.
+
+ pre-up, up, down and post-down commands are executed synchronously by default, meaning fastd will block
+ until the commands have finished, while the other commands are executed asynchronously by default. This
+ can be changed using the keywords sync and async.
+
+ The following environment variables are set by fastd for all commands:
+
+ * ``FASTD_PID``: fastd's PID
+ * ``INTERFACE``: the interface name
+ * ``INTERFACE_MTU``: the configured MTU
+ * ``LOCAL_KEY``: the local public key
+
+ For on connect, on establish and on disestablish the following variables are set in addition:
+
+ * ``LOCAL_ADDRESS``: the local IP address
+ * ``LOCAL_PORT``: the local UDP port
+ * ``PEER_ADDRESS``: the peer's IP address
+ * ``PEER_PORT``: the peer's UDP port
+ * ``PEER_NAME``: the peer's name in the local configuration
+ * ``PEER_KEY``: the peer's public key
+
+| ``on verify [ sync | async ] "<command>";``
+
+ Configures a shell command that is run on connection attempts by unknown peers. The same environment
+ variables as in the on establish command are supplied. When the commands returns 0, the
+ connection is accepted, otherwise the handshake is ignored. By default, fastd ignores connections
+ from unknown peers.
+
+ Verify commands are executed asynchronously by default. This
+ can be changed using the keywords sync and async.
+
+| ``packet mark <mark>;``
+
+ Defines a packet mark to set on fastd's packets, which can be used in an ip rule.
+
+ Marks can be specified in decimal, hexadecimal (with a leading 0x), and octal (with a leading 0).
+
+| ``peer "<name>" {`` *peer configuration* ``}``
+
+ An inline peer configuration.
+
+| ``peer group "<name>" {`` *configuration* ``}``
+
+ Configures a peer group.
+
+| ``peer limit <limit>;``
+
+ Sets the maximum number of connections for the current peer group.
+
+.. _option-pmtu:
+
+| ``pmtu yes|no|auto;``
+
+ Enables or disables Path MTU detection for IPv4. If enabled, all packets are sent with DF set, and all
+ fragmentation happens on the sending host itself. If disabled, routers may fragment the packets themselves,
+ possibly leading to multiple fragmentation. In general, disabling this should not be necessary, but in some
+ networks ICMP MTU Too Big packets are lost, so PMTU detection doesn't work correctly.
+
+ If possible, fastd's mtu setting should be adjusted so the packets aren't fragmented at all instead of
+ relying on this option.
+
+ The default is auto, which uses the system default as specified in /proc/sys/net/ipv4/ip_no_pmtu_disc.
+
+ The pmtu option is available on Linux platforms only.
+
+| ``protocol "<protocol>";``
+
+ Sets the handshake protocol; at the moment only ec25519-fhmqvc is supported.
+
+| ``secret "<secret>";``
+
+ Sets the secret key.
+
+| ``secure handshakes yes|no;``
+
+ fastd v11+ implements a revised handshake scheme which prevents downgrade attacks (i.e. an attacker forcing
+ two peers to use the least secure encryption method supported by both sides, or even half-establishing a
+ session with an encryption method supported by one side only). To maintain backwards compatiblity, the old
+ handshake is still supported when secure handshakes is set to no.
+
+ Setting this option to yes (the default) on one side is enough to ensure that a session established by two peers has not
+ been downgraded.
+
+| ``user "<user>";``
+
+Sets the user to run fastd as.
+
+Peer configuration
+------------------
+
+Example config:
+
+::
+
+ key "f05c6f62337d291e34f50897d89b02ae43a6a2476e2969d1c8e8104fd11c1873";
+ remote 192.0.2.1:10000;
+ remote [2001:db8::1]:10000;
+ remote ipv4 "fastd.example.com" port 10000;
+
+| ``include "<file>";``
+
+ Includes another configuration file.
+
+| ``key "<key>";``
+
+ Sets the peer's public key.
+
+| ``remote <IPv4 address>:<port>;``
+| ``remote <IPv6 address>:<port>;``
+| ``remote [ ipv4|ipv6 ] "<hostname>":<port>;``
+| ``remote <IPv4 address> port <port>;``
+| ``remote <IPv6 address> port <port>;``
+| ``remote [ ipv4|ipv6 ] "<hostname>" port <port>;``
+
+ Sets the IP address or host name to connect to. If a peer doesn't have a remote address configured,
+ incoming connections are accepted, but no own connection attempts will be made.
+
+ The ipv4 or ipv6 options can be used to force fastd to resolve the host name for the
+ specified protocol version only.
+
+ Starting with fastd v9, multiple remotes may be given for a single peer. If this is the case, they
+ will be tried one after another. Starting with fastd v11, all addresses a given hostname resolves
+ to are taken into account, not only the first one. This can be use to specify alternative hostname,
+ addresses and/or ports for the same host; all remotes must still refer to the same peer as the public
+ key must be unique.
+
+| ``float yes|no;``
+
+ The float option can be used to accept connections from the peer with the specified key from
+ other addresses that the configured ones.