diff --git a/modules/module-list.nix b/modules/module-list.nix index 453d09653fb..56ada293a01 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -107,6 +107,7 @@ ./services/networking/privoxy.nix ./services/networking/quassel.nix ./services/networking/radvd.nix + ./services/networking/rdnssd.nix ./services/networking/sabnzbd.nix ./services/networking/ssh/lshd.nix ./services/networking/ssh/sshd.nix diff --git a/modules/services/networking/rdnssd.nix b/modules/services/networking/rdnssd.nix new file mode 100644 index 00000000000..422070f2106 --- /dev/null +++ b/modules/services/networking/rdnssd.nix @@ -0,0 +1,47 @@ +# Module for rdnssd, a daemon that configures DNS servers in +# /etc/resolv/conf from IPv6 RDNSS advertisements. + +{ config, pkgs, ... }: + +with pkgs.lib; + +{ + + ###### interface + + options = { + + services.rdnssd.enable = mkOption { + default = config.networking.enableIPv6; + description = + '' + Whether to enable the RDNSS daemon + (rdnssd), which configures DNS servers in + /etc/resolv.conf from RDNSS + advertisements sent by IPv6 routers. + ''; + }; + + }; + + + ###### implementation + + config = mkIf config.services.rdnssd.enable { + + jobs.rdnssd = + { description = "RDNSS daemon"; + + # Start before the network interfaces are brought up so that + # the daemon receives RDNSS advertisements from the kernel. + startOn = "starting network-interfaces"; + + # !!! Should write to /var/run/rdnssd/resolv.conf and run the daemon under another uid. + exec = "${pkgs.ndisc6}/sbin/rdnssd --resolv-file /etc/resolv.conf -u root"; + + daemonType = "fork"; + }; + + }; + +} diff --git a/modules/tasks/network-interfaces.nix b/modules/tasks/network-interfaces.nix index eb94315b063..ac98e385ce1 100644 --- a/modules/tasks/network-interfaces.nix +++ b/modules/tasks/network-interfaces.nix @@ -179,7 +179,9 @@ in pkgs.nettools pkgs.wirelesstools pkgs.rfkill - ] ++ optional (cfg.bridges != {}) [ pkgs.bridge_utils ]; + ] + ++ optional (cfg.bridges != {}) pkgs.bridge_utils + ++ optional cfg.enableIPv6 pkgs.ndisc6; security.setuidPrograms = [ "ping" "ping6" ];