Fact-checked by Grok 2 weeks ago

radvd

radvd is an open-source router advertisement daemon designed for and BSD systems functioning as routers, implementing the transmission of Router Advertisement () messages as specified in RFC 4861 to facilitate stateless address autoconfiguration on local networks. The daemon listens for Router Solicitation (RS) messages from hosts and responds with periodic or solicited RA messages, which provide essential information such as router addresses, prefix information for address assignment, and details, enabling hosts to self-configure without a DHCP server. It requires forwarding to be enabled on the host system but does not handle routing or forwarding itself; users must configure those aspects separately using tools like ip route. Configuration of radvd occurs primarily through the /etc/radvd.conf , which defines interfaces, prefixes to advertise, advertisement intervals, and options like managed address flags or route preferences, ensuring secure and tailored deployment by restricting write to . Key command-line options include specifying debug levels for troubleshooting, logging methods (such as or file-based), and privilege dropping for enhanced , with the daemon typically running as a under /usr/sbin/radvd. Originally released in version 0.6.2pl1 on April 4, 2001, radvd has evolved through community contributions and is actively maintained via , with the latest stable release, version 2.20, issued on December 31, 2024, incorporating updates for modern deployments including special handling for tunnels. Development discussions occur on dedicated mailing lists and IRC channels, fostering ongoing improvements while supporting BSD platforms with varying degrees of compatibility.

Overview

Definition and Purpose

radvd is an open-source router advertisement daemon that implements the transmission of Router Advertisement messages in accordance with RFC 4861, which defines the for . This daemon serves as a key component on routers, providing essential network discovery and services to connected hosts. The primary purpose of radvd is to facilitate stateless address autoconfiguration (SLAAC) for hosts, allowing them to automatically generate their own addresses and select default routes without requiring stateful servers. By broadcasting router advertisements, radvd informs hosts about the router's presence, available network prefixes for address formation, the link's (MTU), and other parameters necessary for proper operation. This process ensures seamless integration of devices into networks, promoting plug-and-play connectivity. In operation, radvd listens for incoming Router Solicitation () messages from hosts seeking immediate configuration information and responds promptly with a Router Advertisement (RA) message. It also periodically transmits unsolicited RA messages at configurable intervals to maintain up-to-date awareness among all hosts on the local link. As a router-side utility, radvd is widely deployed in and BSD-based systems to manage router advertisements, enabling efficient autoconfiguration in diverse networking environments.

Historical Background

The development of radvd began in 1996, initiated by Lars Fenneberg as one of the earliest software implementations for sending router advertisements, coinciding with the burgeoning research and interest in next-generation technologies to address the limitations of IPv4. This effort aligned with early IETF activities on , including drafts that would later formalize router advertisement mechanisms in RFC 2461, published in 1998. Fenneberg's work laid the groundwork for a daemon that could enable stateless address autoconfiguration on systems, filling a critical gap in tools during the protocol's experimental phase. The first public release of radvd occurred on , 2001, with version 0.6.2pl1, which introduced features like integrated support for dynamic prefix generation from IPv4 addresses. Pekka Savola contributed significantly to subsequent updates, including version 0.6.2pl2 shortly thereafter, and later co-maintained the project alongside Lutchansky starting in 2001. These releases marked radvd's transition from an internal tool to a publicly available resource, supporting the evolving standards and facilitating testing in research and enterprise environments. Over the early 2000s, radvd evolved from an experimental utility into a standard component of operating systems, propelled by the IETF's standardization efforts, including the update to Neighbor Discovery in RFC 4861 (2007). Key milestones included its integration into major distributions such as by 2002, where spec files were adapted for packaging and deployment. Similarly, it became available in Debian-based systems like shortly after the distribution's inception in 2004, aiding widespread adoption on servers and routers. Maintained as under a BSD-style license with advertising clauses, radvd's permissive terms encouraged contributions and distribution, ensuring its longevity as a core tool.

Technical Implementation

Protocol Foundation

radvd operates on the foundation of the (NDP) for , as defined in RFC 4861, which establishes mechanisms for routers to discover hosts and hosts to discover routers on a link. Central to this are Router Advertisement (RA) messages sent periodically by routers to announce their presence and provide configuration parameters, and Router Solicitation (RS) messages sent by hosts to prompt immediate RA responses from routers. These messages enable autoconfiguration and address resolution without relying on centralized servers, forming the core of IPv6's decentralized network discovery. RA messages are transported using , which serves as the signaling protocol for NDP. Routers transmit as multicast packets to the all-nodes multicast address (ff02::1) within link-local , ensuring they reach all IPv6-enabled devices on the local without propagating beyond. This approach minimizes network overhead while guaranteeing reliable delivery for purposes, with typically sent at configurable intervals to balance responsiveness and efficiency. radvd integrates with IPv6 Stateless Address Autoconfiguration (SLAAC), outlined in 4862, by embedding IPv6 prefixes in RA messages that hosts use to generate their own interface addresses. Upon receiving an RA, a host combines the advertised prefix with its interface identifier—derived from mechanisms like MAC address modification via EUI-64—to form a full , enabling plug-and-play connectivity without involvement. This stateless process relies on the accuracy of RA prefixes to ensure valid, routable addresses. The structure of an RA message, as specified in RFC 4861, begins with an ICMPv6 header where the message type is set to 134 to identify it as a Router Advertisement. Key fields include flags such as the Managed Address Configuration (M) flag, indicating whether hosts should use DHCPv6 for address assignment, and the Other Configuration (O) flag, signaling additional DHCPv6 options beyond addresses. The message also contains a router lifetime field specifying the validity period of the router as a default gateway in seconds, alongside reachable time and retransmit timer fields that guide neighbor unreachability detection by setting defaults for how long a neighbor is considered reachable and the interval for retransmitting packets. These elements collectively provide hosts with essential timing and configuration data for maintaining network state.

Core Features and Mechanisms

radvd operates by generating and transmitting Router Advertisement (RA) messages as defined in the (NDP) for IPv6. It sends periodic unsolicited RAs to announce router availability and network parameters to hosts on the local link, with the transmission interval randomized between the minimum and maximum router advertisement intervals. By default, the maximum interval (MaxRtrAdvInterval) is set to 600 seconds, while the minimum (MinRtrAdvInterval) is 0.33 times that value, approximately 198 seconds, ensuring varied timing to avoid synchronization among multiple routers. Additionally, radvd responds promptly to or Router Solicitation (RS) messages from hosts, typically within the minimum delay between RAs (default 3 seconds) to provide on-demand configuration information. A key mechanism of radvd is its support for the Prefix Information Option (PIO) in RA messages, which advertises prefixes to enable Stateless Address Autoconfiguration (SLAAC) on client hosts. The PIO includes valid and preferred lifetimes for each prefix, allowing hosts to generate unique interface identifiers and form global while managing deprecation based on these timers. This facilitates automatic network attachment without manual or DHCPv6. radvd also handles the Route Information Option (RIO), which provides supplementary routing information, such as alternative routes with preference metrics, enabling hosts to select optimal paths beyond the default router. Furthermore, it incorporates the MTU Option to advertise the for the link, aiding hosts in and preventing fragmentation issues in traffic. radvd extends its functionality with support for Recursive DNS Server (RDNSS) and DNS Search List (DNSSL) options, as specified in RFC 8106, to advertise DNS resolver addresses and domain search lists directly in messages. These options include lifetimes for the DNS information, synchronized with intervals, allowing hosts to configure DNS settings via SLAAC without additional protocols. This integration simplifies by centralizing network discovery in NDP.

Configuration

File Structure and Syntax

The radvd configuration file is conventionally located at /etc/radvd.conf. This file employs a hierarchical structure centered on interface-specific sections, where global daemon-wide parameters such as logging levels and facilities are not defined within the file itself but are instead managed through command-line options when invoking the daemon. Basic syntax rules dictate that the file is parsed line-by-line, with each configuration option terminated by a semicolon (;). The syntax is case-sensitive, and configurations are organized into interface blocks delimited by curly braces ({ }), which encapsulate per-interface settings; sub-blocks for elements like prefixes or routes may nest within these interface blocks. Decimal values are permitted for timer-related options, ensuring compatibility with standard numerical representations. Comments in the configuration file are indicated by the hash symbol (#) at the start of a line, allowing administrators to annotate settings without affecting parsing. While some implementations or extensions may support inclusion of external files via an Include directive, the standard radvd configuration does not natively provide this feature, requiring all settings to reside within the primary file. During configuration parsing, radvd performs validation to ensure syntactic correctness and semantic validity, logging non-fatal errors (such as AdvPreferredLifetime greater than AdvValidLifetime) to the system log or specified output without halting operation. Fatal errors, including malformed IPv6 addresses (e.g., invalid formats in client lists or source addresses) or timers outside RFC-mandated ranges (such as MaxRtrAdvInterval below 4 seconds or above 1800 seconds), cause the daemon to exit with an error message, preventing deployment of invalid configurations. IPv6 addresses are rigorously checked for proper colon-hexadecimal notation and scope compliance, while timers are bounded to prevent network instability as per protocol specifications.

Key Directives and Options

The configuration of radvd is primarily managed through the /etc/radvd.conf file, where interface-specific directives control the behavior of router advertisements (RAs) on designated network s. The IgnoreIfMissing directive, when set to on, instructs radvd to ignore an interface if it is not present at startup, preventing errors in dynamic environments; its default is off. AdvSendAdvert, defaulting to off, enables or disables the sending of periodic unsolicited RAs and responses to router solicitations on the interface, as defined in the (NDP). Timing of these advertisements is governed by MaxRtrAdvInterval, which sets the maximum interval between unsolicited RAs (range: 4 to 1800 seconds, default: 600 seconds), and MinRtrAdvInterval, the minimum interval (range: 3 seconds to 0.75 times MaxRtrAdvInterval, default: approximately 0.33 times MaxRtrAdvInterval), ensuring compliance with NDP jitter requirements to avoid . Within an interface block, prefix directives configure the advertisement of prefixes for Stateless Address Autoconfiguration (SLAAC), as outlined in RFC 4862. The prefix block specifies a prefix and length, such as 2001:db8::/64, and includes options like AdvOnLink (default: on), which indicates whether the prefix can be used for on-link determination by hosts; AdvAutonomous (default: on), enabling autonomous address formation via SLAAC; AdvValidLifetime (default: 86400 seconds), defining the total validity period of addresses formed from the prefix; and AdvPreferredLifetime (default: 14400 seconds), setting the preferred period before addresses depreciate. These lifetimes can be set to infinity for permanent prefixes but must satisfy AdvPreferredLifetime ≤ AdvValidLifetime to prevent invalid preferred states. Route directives within the interface block advertise routes to hosts. The route block, specifying a (e.g., ::/0 for ), includes AdvRoutePreference (: medium), which sets the route's preference level as low, medium, or high to guide host selection among multiple routers per NDP specifications. For DNS integration, RDNSS directives advertise Recursive DNS Server options. In the RDNSS block, AdvRDNSSPreference (: 8, range: 0–15) indicates the DNS server's preference relative to others, while AdvRDNSSLifetime (: twice MaxRtrAdvInterval) specifies the validity duration of the RDNSS entry, aligning with extensions in 8106. A representative configuration example for an interface might appear as follows:
interface eth0 {
    AdvSendAdvert on;
    MaxRtrAdvInterval 600;
    MinRtrAdvInterval 200;
    prefix 2001:db8::/64 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvValidLifetime 86400;
        AdvPreferredLifetime 14400;
    };
    route ::/0 {
        AdvRoutePreference medium;
    };
    RDNSS 2001:db8::53 {
        AdvRDNSSPreference 8;
        AdvRDNSSLifetime 1200;
    };
};
This block enables RA transmission on eth0, advertises a /64 prefix for SLAAC with standard lifetimes, a medium-preference default route, and a DNS server with default preference.

Deployment and Usage

Installation and Setup

radvd can be installed on most systems using package managers or by compiling from source. On Debian-based distributions such as , the package is available in the default repositories and can be installed with the command sudo apt install radvd. On (RHEL) and derivatives like , use sudo yum install radvd (or sudo dnf install radvd on RHEL 8 and later). For systems without pre-built packages, download the source from the official repository at https://github.com/radvd-project/radvd, then run ./configure --prefix=/usr/local --sysconfdir=/etc, followed by make and sudo make install. The software provides full support on kernels version 2.6 and later, where is natively integrated. On BSD variants like , radvd is available through the ports collection as net/radvd and can be installed with cd /usr/ports/net/radvd && make install clean, though includes a native alternative (rtadvd) for similar functionality; radvd supports features such as Mobile and tunnels. Dependencies typically include build tools like and make for compilation, with libdaemon optional but recommended for proper daemon forking. Initial setup requires enabling forwarding on the host system, as radvd does not handle routing itself. On , execute sudo [sysctl](/page/Sysctl) -w net.ipv6.conf.all.forwarding=1 and make it persistent by adding net.ipv6.conf.all.forwarding=1 to /etc/.conf. On BSD, use sudo [sysctl](/page/Sysctl) net.inet6.ip6.forwarding=1. Create a basic at /etc/radvd.conf with minimal interface and prefix directives, as detailed further in the Configuration section. Enable and start the service using on modern distributions with sudo [systemctl](/page/Systemctl) enable radvd and sudo [systemctl](/page/Systemctl) start radvd; for SysV init systems, add it to the appropriate runlevel scripts. To verify the installation, check for outgoing Router Advertisement (RA) packets using the included radvdump tool with radvdump or capture network traffic with via sudo tcpdump -i <interface> icmp6 and 'ip6[40] == 134', where RA packets ( type 134) should appear periodically if configured correctly.

Operational Management and Troubleshooting

Operational management of radvd involves initiating the daemon with appropriate commands to ensure proper router advertisement dissemination, while focuses on diagnosing issues related to advertisement delivery and integration with complementary protocols. To start radvd, administrators typically use on modern distributions by executing systemctl start radvd.service, which launches the service using the default at /etc/radvd.conf. For configuration validation prior to startup, the -c option can be employed with radvd -C /etc/radvd.conf -c to perform checks and startup tests without fully initializing the daemon. Stopping the service is achieved via systemctl stop radvd.service, or by terminating the process using the PID file at /var/run/radvd/radvd.pid. For during startup or runtime, the -d option sets verbose levels from 1 to 5, preventing daemonization and outputting details to stderr or logs, which aids in identifying initialization errors. Monitoring radvd operations relies on log files and network tools to verify advertisement transmission. By default, radvd logs to /var/log/radvd.log when configured with the -m logfile option, capturing events such as advertisement sends and errors; alternatively, integration via -m syslog directs output to the system log with the LOG_DAEMON facility. To inspect live router advertisement traffic, tools like radvdump can capture and display RA packets, revealing configured prefixes, lifetimes, and flags for validation against expected behavior. Network-level monitoring includes using ip -6 monitor from to observe neighbor discovery events or for packet-level analysis of RA messages on ff02::1. Common troubleshooting scenarios in production environments often stem from misconfigurations or network constraints affecting delivery. Prefix failures may occur if advertisement lifetimes are improperly set, such as short AdvValidLifetime or AdvPreferredLifetime values leading to premature prefix expiration; involves verifying these in /etc/radvd.conf and ensuring they align with upstream stability, typically adjusting to values like 1800-3600 seconds for valid lifetimes. Non-responses to router solicitations () can result from issues, where radvd fails to receive on ff02::2; checking interface membership with ip -6 addr show and confirming kernel IPv6 support resolves this. Firewall blocks on type 134 () or 133 () packets commonly prevent advertisement propagation, necessitating rules to permit these on relevant interfaces, as is essential for neighbor discovery per RFC 4861. For stateful IPv6 address assignment, radvd integrates with servers like wide-dhcpv6-client (dhcp6c) by setting the AdvManagedFlag to 1 in interface configurations, signaling clients to use for addresses while radvd handles routing prefixes and default gateways via stateless mechanisms. This hybrid approach ensures comprehensive autoconfiguration, with radvd advertising the M-flag to direct clients to for additional options like DNS, avoiding conflicts in dynamic environments.

Development and Maintenance

Version History

radvd's version history from 2010 onward features several major releases that introduced key enhancements for router advertisement functionality, focusing on compatibility, DNS support, and reliability improvements. Version 1.9, released in 2011, added support for DNSSL (DNS Search List) options in router advertisements, enabling the advertisement of domain search lists to clients for improved name resolution in networks. Version 2.0, released in June 2014, included updates such as forking the 1.X branch and general improvements for operation on and BSD platforms. Version 2.18, released on February 25, 2019, included fixes such as addressing a double-free scenario, separating and SysV packaging, and updating files, along with other reliability enhancements. The most recent major release as of November 2025, version 2.20 on December 31, 2024, incorporated build system improvements, including tweaks for annotated/signed tags and dependencies like . In terms of maintenance, the project transitioned its primary development repository to , enabling streamlined issue tracking, pull requests, and . This shift was followed by the integration of workflows for automated building and testing, enhancing code quality and release reliability.

Community Contributions and Resources

The radvd project is maintained by a small team of dedicated developers, with Hawkins serving as the primary maintainer until his retirement following the release of version 2.19. Current maintenance is led by Robin H. Johnson, who handles releases and signatures, supported by a broader community of contributors through the radvd-project organization. Contributions from the open-source community have been integral, with ongoing involvement via code patches and testing reported in project changelogs. Community members are encouraged to participate by submitting bug reports and feature requests through GitHub issues, or by providing patches via pull requests to the official repository. Discussions on development topics, including contribution ideas, occur on the radvd-devel mailing list at [email protected], which serves as a key for developers and users. Additionally, real-time collaboration is facilitated through the #radvd IRC channel on . Key resources for users and contributors include the official project website at radvd.litech.org, which provides an overview, download links, and development information. Detailed configuration guidance is available in the radvd.conf(5) man page, distributed with the software and accessible via standard Unix-like system documentation tools. For practical integration, distribution-specific guides such as the Red Hat Enterprise Linux Networking Guide offer examples of deploying radvd in enterprise environments. In comparison to alternatives, radvd stands out for its lightweight design, focusing solely on router advertisements without broader functionality, unlike more comprehensive tools such as , which handles both stateless and stateful configuration. On Windows platforms, built-in support via the Windows Sockets enables router advertisements derived from routing tables, but lacks a dedicated daemon like radvd, often requiring commands for customization. This simplicity makes radvd particularly suitable for resource-constrained and BSD routers.

References

  1. [1]
    Linux IPv6 Router Advertisement Daemon (radvd)
    The router advertisement daemon (radvd) is run by Linux or BSD systems acting as IPv6 routers. It sends Router Advertisement messages, specified by RFC 2461, ...
  2. [2]
    radvd(8): router advertisement daemon for IPv6 - Linux man page
    radvd is the router advertisement daemon for IPv6. It listens to router solicitations and sends router advertisements as described in Neighbor Discovery for IP ...
  3. [3]
    14.6. Configuring the radvd daemon for IPv6 routers
    The router advertisement daemon ( radvd ) sends router advertisement messages which are required for IPv6 stateless autoconfiguration.
  4. [4]
    GitHub | Official repository: https://github.com/radvd-project/radvd
    radvd is not a routing or forwarding daemon. You need to set any appropriate routing/forwarding first, and then radvd to only advertise the prefixes to hosts ...
  5. [5]
    RFC 4861 - Neighbor Discovery for IP version 6 (IPv6)
    RFC 4861 specifies the Neighbor Discovery protocol for IPv6, used by nodes to discover each other, find routers, and maintain reachability.Missing: radvd Daemon
  6. [6]
  7. [7]
  8. [8]
    radvd.spec
    * Wed Apr 11 2001 Pekka Savola <pekkas@netcore.fi> - update to 0.6.2pl2 ... version, radvd version 0.6.1.
  9. [9]
    Licensing/radvd License - Fedora Project Wiki
    The radvd license is based off of the BSD with advertising license. Clause 0, if invoked, would make the resulting work non-free.
  10. [10]
    radvd.conf(5) - Arch manual pages
    radvd.conf is the configuration file for the router advertisement daemon radvd, describing information in router advertisements for a specific interface.Missing: inception 1996
  11. [11]
    radvd.conf(5) - Linux man page - Die.net
    The maximum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds. Must be no less than 4 seconds and no ...
  12. [12]
    radvd.conf(5) - Debian Manpages
    This file describes the information which is included in the router advertisement (RA) of a specific interface. The file contains one or more interface ...
  13. [13]
  14. [14]
  15. [15]
    Installation of radvd daemon and configuration
    radvd does not come with a default configuration file, instead we need to create one. Create a new file under /etc/radvd.conf using the text editor of your ...
  16. [16]
    FreshPorts -- net/radvd: Linux/BSD IPv6 router advertisement daemon
    Description: radvd implements IPv6 router advertisements for Linux and FreeBSD as specified in RFC 2461. Support for Mobile IPv6 as well as 6to4 is included.Missing: environments | Show results with:environments
  17. [17]
    How can I view IPv6 router advertisements that are being received ...
    Sep 26, 2016 · Using tcpdump which is installed by default on many distributions: tcpdump -n -i eth0 icmp6. will show you all ICMPv6 packets of which ...Missing: verify rdump
  18. [18]
    radvd(8) — Arch manual pages
    NAME. radvd - router advertisement daemon for IPv6 · SYNOPSIS. radvd [ -hsvc ] [ -d debuglevel ] [ -C configfile ] [ -p pidfile ] [ -m logmethod ] [ -l logfile ] ...Missing: structure syntax
  19. [19]
    radvd.conf(5) - Debian Manpages
    When configured, radvd picks all non-link-local prefix assigned to the interface and starts advertising it. This may be applicable in non-6to4 scenarios where ...<|separator|>
  20. [20]
    14.7. Comparison of DHCPv6 to radvd - Red Hat Documentation
    Using the radvd Daemon. A standards-compliant IPv6 network must provide router advertisements, thus IPv6 configuration options can be applied running the router ...Missing: 2000s | Show results with:2000s<|control11|><|separator|>
  21. [21]
  22. [22]
    Workflow runs · radvd-project/radvd
    - **CI/CD Status**: The content does not explicitly confirm if the radvd repository uses CI/CD with GitHub Actions. It only mentions "Actions" and "Workflow runs" without details.
  23. [23]
  24. [24]
    radvd/CHANGES at master · radvd-project/radvd
    Insufficient relevant content. The provided text is a GitHub page fragment with no changelog entries or version details from the radvd project. It contains only navigation, feedback, and footer information without substantive data about radvd versions, changes, or dates.
  25. [25]
    Dibbler - a portable DHCPv6 download | SourceForge.net
    Rating 5.0 (2) · Free · CommunicationAug 9, 2015 · Dibbler is a portable DHCPv6 implementation. Is supports stateful (ie IPv6 address granting) as well as stateless (ie option granting) autoconfiguration for ...Missing: radvd alternatives
  26. [26]
    IPv6 Router Advertisements - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The content of IPv6 router advertisements is automatically derived from the published routes in the routing table.