at 24.11-pre 2.0 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.runtimeShell} -e 10 ${pkgs.openresolv}/bin/resolvconf -u 11 ''; 12in 13{ 14 15 ###### interface 16 17 options = { 18 19 services.rdnssd.enable = mkOption { 20 type = types.bool; 21 default = false; 22 #default = config.networking.enableIPv6; 23 description = '' 24 Whether to enable the RDNSS daemon 25 ({command}`rdnssd`), which configures DNS servers in 26 {file}`/etc/resolv.conf` 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 assertions = [{ 39 assertion = config.networking.resolvconf.enable; 40 message = "rdnssd needs resolvconf to work (probably something sets up a static resolv.conf)"; 41 }]; 42 43 systemd.services.rdnssd = { 44 description = "RDNSS daemon"; 45 after = [ "network.target" ]; 46 wantedBy = [ "multi-user.target" ]; 47 48 preStart = '' 49 # Create the proper run directory 50 mkdir -p /run/rdnssd 51 touch /run/rdnssd/resolv.conf 52 chown -R rdnssd /run/rdnssd 53 54 # Link the resolvconf interfaces to rdnssd 55 rm -f /run/resolvconf/interfaces/rdnssd 56 ln -s /run/rdnssd/resolv.conf /run/resolvconf/interfaces/rdnssd 57 ${mergeHook} 58 ''; 59 60 postStop = '' 61 rm -f /run/resolvconf/interfaces/rdnssd 62 ${mergeHook} 63 ''; 64 65 serviceConfig = { 66 ExecStart = "@${pkgs.ndisc6}/bin/rdnssd rdnssd -p /run/rdnssd/rdnssd.pid -r /run/rdnssd/resolv.conf -u rdnssd -H ${mergeHook}"; 67 Type = "forking"; 68 PIDFile = "/run/rdnssd/rdnssd.pid"; 69 }; 70 }; 71 72 users.users.rdnssd = { 73 description = "RDNSSD Daemon User"; 74 isSystemUser = true; 75 group = "rdnssd"; 76 }; 77 users.groups.rdnssd = {}; 78 79 }; 80 81}