summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Simonetti <jeroen@simonetti.nl>2022-06-15 08:33:46 +0200
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2022-06-24 14:36:28 +0000
commit58fce41efc69f4137d176efad98afbb86a4ec072 (patch)
tree350748a4af5ad5952e40ddc5c46e4e5d61f58412
parentroutedns: init at 0.1.5 (diff)
downloadnixpkgs-origin/backport-174446-to-release-22.05.tar.gz
Signed-off-by: Jeroen Simonetti <jeroen@simonetti.nl> (cherry picked from commit 829167bd27d6de5ecbbd1fc43452fb9d3e5ece98)
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/networking/routedns.nix84
2 files changed, 85 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 2607e99d8459..744459bb1315 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -884,6 +884,7 @@
./services/networking/redsocks.nix
./services/networking/resilio.nix
./services/networking/robustirc-bridge.nix
+ ./services/networking/routedns.nix
./services/networking/rpcbind.nix
./services/networking/rxe.nix
./services/networking/sabnzbd.nix
diff --git a/nixos/modules/services/networking/routedns.nix b/nixos/modules/services/networking/routedns.nix
new file mode 100644
index 000000000000..e0f5eedd2c8e
--- /dev/null
+++ b/nixos/modules/services/networking/routedns.nix
@@ -0,0 +1,84 @@
+{ config
+, lib
+, pkgs
+, ...
+}:
+
+with lib;
+
+let
+ cfg = config.services.routedns;
+ settingsFormat = pkgs.formats.toml { };
+in
+{
+ options.services.routedns = {
+ enable = mkEnableOption "RouteDNS - DNS stub resolver, proxy and router";
+
+ settings = mkOption {
+ type = settingsFormat.type;
+ example = literalExpression ''
+ {
+ resolvers.cloudflare-dot = {
+ address = "1.1.1.1:853";
+ protocol = "dot";
+ };
+ groups.cloudflare-cached = {
+ type = "cache";
+ resolvers = ["cloudflare-dot"];
+ };
+ listeners.local-udp = {
+ address = "127.0.0.1:53";
+ protocol = "udp";
+ resolver = "cloudflare-cached";
+ };
+ listeners.local-tcp = {
+ address = "127.0.0.1:53";
+ protocol = "tcp";
+ resolver = "cloudflare-cached";
+ };
+ }
+ '';
+ description = ''
+ Configuration for RouteDNS, see <link xlink:href="https://github.com/folbricht/routedns/blob/master/doc/configuration.md"/>
+ for more information.
+ '';
+ };
+
+ configFile = mkOption {
+ default = settingsFormat.generate "routedns.toml" cfg.settings;
+ defaultText = "A RouteDNS configuration file automatically generated by values from services.routedns.*";
+ type = types.path;
+ example = literalExpression ''"''${pkgs.routedns}/cmd/routedns/example-config/use-case-1.toml"'';
+ description = "Path to RouteDNS TOML configuration file.";
+ };
+
+ package = mkOption {
+ default = pkgs.routedns;
+ defaultText = literalExpression "pkgs.routedns";
+ type = types.package;
+ description = "RouteDNS package to use.";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ systemd.services.routedns = {
+ description = "RouteDNS - DNS stub resolver, proxy and router";
+ after = [ "network.target" ]; # in case a bootstrap resolver is used, this might fail a few times until the respective server is actually reachable
+ wantedBy = [ "multi-user.target" ];
+ wants = [ "network.target" ];
+ startLimitIntervalSec = 30;
+ startLimitBurst = 5;
+ serviceConfig = {
+ Restart = "on-failure";
+ RestartSec = "5s";
+ LimitNPROC = 512;
+ LimitNOFILE = 1048576;
+ DynamicUser = true;
+ AmbientCapabilities = "CAP_NET_BIND_SERVICE";
+ NoNewPrivileges = true;
+ ExecStart = "${getBin cfg.package}/bin/routedns -l 4 ${cfg.configFile}";
+ };
+ };
+ };
+ meta.maintainers = with maintainers; [ jsimonetti ];
+}