at 17.09-beta 1.8 kB view raw
1# Module for rdnssd, a daemon that configures DNS servers in 2# /etc/resolv/conf from IPv6 RDNSS advertisements. 3 4{ config, lib, pkgs, ... }: 5 6with lib; 7let 8 mergeHook = pkgs.writeScript "rdnssd-merge-hook" '' 9 #! ${pkgs.stdenv.shell} -e 10 ${pkgs.openresolv}/bin/resolvconf -u 11 ''; 12in 13{ 14 15 ###### interface 16 17 options = { 18 19 services.rdnssd.enable = mkOption { 20 default = false; 21 #default = config.networking.enableIPv6; 22 description = 23 '' 24 Whether to enable the RDNSS daemon 25 (<command>rdnssd</command>), which configures DNS servers in 26 <filename>/etc/resolv.conf</filename> from RDNSS 27 advertisements sent by IPv6 routers. 28 ''; 29 }; 30 31 }; 32 33 34 ###### implementation 35 36 config = mkIf config.services.rdnssd.enable { 37 38 systemd.services.rdnssd = { 39 description = "RDNSS daemon"; 40 after = [ "network.target" ]; 41 wantedBy = [ "multi-user.target" ]; 42 43 preStart = '' 44 # Create the proper run directory 45 mkdir -p /run/rdnssd 46 touch /run/rdnssd/resolv.conf 47 chown -R rdnssd /run/rdnssd 48 49 # Link the resolvconf interfaces to rdnssd 50 rm -f /run/resolvconf/interfaces/rdnssd 51 ln -s /run/rdnssd/resolv.conf /run/resolvconf/interfaces/rdnssd 52 ${mergeHook} 53 ''; 54 55 postStop = '' 56 rm -f /run/resolvconf/interfaces/rdnssd 57 ${mergeHook} 58 ''; 59 60 serviceConfig = { 61 ExecStart = "@${pkgs.ndisc6}/bin/rdnssd rdnssd -p /run/rdnssd/rdnssd.pid -r /run/rdnssd/resolv.conf -u rdnssd -H ${mergeHook}"; 62 Type = "forking"; 63 PIDFile = "/run/rdnssd/rdnssd.pid"; 64 }; 65 }; 66 67 users.extraUsers.rdnssd = { 68 description = "RDNSSD Daemon User"; 69 uid = config.ids.uids.rdnssd; 70 }; 71 72 }; 73 74}