aa77fe0fb0
Additionally, remove the automatic initialization of the ipv6 forwarding sysctl as this should be handled by the end user. This really should not be an issue as most people running radvd are likely forwarding ipv6 packets.
85 lines
1.7 KiB
Nix
85 lines
1.7 KiB
Nix
# Module for the IPv6 Router Advertisement Daemon.
|
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.services.radvd;
|
|
|
|
confFile = pkgs.writeText "radvd.conf" cfg.config;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
###### interface
|
|
|
|
options = {
|
|
|
|
services.radvd.enable = mkOption {
|
|
default = false;
|
|
description =
|
|
''
|
|
Whether to enable the Router Advertisement Daemon
|
|
(<command>radvd</command>), which provides link-local
|
|
advertisements of IPv6 router addresses and prefixes using
|
|
the Neighbor Discovery Protocol (NDP). This enables
|
|
stateless address autoconfiguration in IPv6 clients on the
|
|
network.
|
|
'';
|
|
};
|
|
|
|
services.radvd.config = mkOption {
|
|
example =
|
|
''
|
|
interface eth0 {
|
|
AdvSendAdvert on;
|
|
prefix 2001:db8:1234:5678::/64 { };
|
|
};
|
|
'';
|
|
description =
|
|
''
|
|
The contents of the radvd configuration file.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
|
|
###### implementation
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
users.extraUsers.radvd =
|
|
{ uid = config.ids.uids.radvd;
|
|
description = "Router Advertisement Daemon User";
|
|
};
|
|
|
|
systemd.services.radvd =
|
|
{ description = "IPv6 Router Advertisement Daemon";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
after = [ "network.target" ];
|
|
|
|
path = [ pkgs.radvd ];
|
|
|
|
preStart = ''
|
|
mkdir -m 755 -p /run/radvd
|
|
chown radvd /run/radvd
|
|
'';
|
|
|
|
serviceConfig =
|
|
{ ExecStart = "@${pkgs.radvd}/sbin/radvd radvd"
|
|
+ " -p /run/radvd/radvd.pid -m syslog -u radvd -C ${confFile}";
|
|
Restart = "always";
|
|
Type = "forking";
|
|
PIDFile = "/run/radvd/radvd.pid";
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
}
|