babeld
Run the Babel routing protocol
TLDR
Start the daemon with one or more [c]onfiguration files (read in order)
[D]eamonize after startup
Specify a [C]onfiguration command
Specify on which interfaces to operate
SYNOPSIS
babeld [OPTIONS]
PARAMETERS
-I <filename>
Reads configuration directives from filename.
-S <state-file>
Uses state-file for storing persistent state across restarts.
-H <interval>
Sets the default hello interval in centiseconds for interfaces.
-g <interface>
Adds an interface to be managed by babeld. Can be specified multiple times.
-r
Redistributes routes from other routing tables into Babel.
-s
Enables split horizon on interfaces, preventing routing loops on point-to-point links.
-t
Do not daemonize; run in the foreground (useful for debugging).
-k
Do not manipulate the kernel routing table (primarily for testing and debugging).
-m <metric>
Sets the default metric for routes learned via Babel.
-A <address>
Adds a local address to be advertised by Babel.
-D
Enables verbose debugging output to stderr or log file.
-L <log-file>
Logs output to the specified log-file instead of syslog.
-P <port>
Specifies the UDP port number for Babel communication (default 6696).
-W <pid-file>
Writes the daemon's PID to the specified pid-file.
-C <config-option>
Applies a configuration option directly, e.g., '-C 'ipv6-prefix 2001:db8::/32''.
-U <user>
Drops privileges to the specified user after initial setup.
-c <ipv4-prefix>/<len>
Advertises the specified IPv4 prefix into the Babel network.
-w <ipv6-prefix>/<len>
Advertises the specified IPv6 prefix into the Babel network.
-G
Enables the global metric feature for better path selection.
-T
Adds timestamps to log messages.
DESCRIPTION
babeld is a daemon that implements the Babel routing protocol, a loop-avoiding distance-vector routing protocol operating over both IPv4 and IPv6. It's particularly well-suited for dynamic and mobile ad-hoc networks (MANETs), but also functions efficiently in wired networks. babeld discovers and maintains routes to destinations within a network, adapting quickly to topology changes, link failures, and new nodes. It uses sequence numbers to avoid routing loops and relies on metrics (like hop count and bandwidth estimation) to choose optimal paths. This protocol provides a lightweight yet robust routing solution, making it ideal for smaller to medium-sized networks, especially those with frequently changing topologies where more complex protocols like OSPF or BGP might be overkill.
CAVEATS
babeld does not inherently provide authentication for routing updates, making it susceptible to malicious injection in unsecured environments. It is primarily designed as an Interior Gateway Protocol (IGP) and is not intended for inter-domain routing like BGP. Advanced configurations may require a deep understanding of network routing principles and Babel's specific metrics.
CONFIGURATION FILES
babeld commonly uses /etc/babeld.conf as its default configuration file. This file can contain many of the options that can be passed via command-line arguments, allowing for persistent and complex setups without lengthy command-line invocations.
DAEMONIZATION AND PRIVILEGES
By default, babeld operates as a background daemon. It typically starts with root privileges to configure network interfaces and routing tables, but it is strongly recommended to use the -U option to drop privileges to a less privileged user after initial setup for security reasons.
HISTORY
The Babel routing protocol was first formally described in RFC 6126 in 2011, later updated by RFC 8966 in 2021. It was designed as a robust and efficient routing protocol for dynamic and mobile ad-hoc networks (MANETs), aiming to provide quick convergence and loop avoidance with low overhead. babeld is a widely used open-source implementation of this protocol, developed to bring the benefits of Babel to Linux and other Unix-like systems, addressing challenges that traditional routing protocols often face in rapidly changing network topologies.