diff --git a/modules/module-list.nix b/modules/module-list.nix
index 453d09653fb3..56ada293a012 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 000000000000..422070f2106e
--- /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 eb94315b063b..ac98e385ce1f 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" ];