diff options
author | Franz Pletz <fpletz@fnordicwalking.de> | 2019-04-02 12:15:12 +0200 |
---|---|---|
committer | Franz Pletz <fpletz@fnordicwalking.de> | 2019-04-02 12:16:48 +0200 |
commit | ff36d958785e6dce5a87e3c9f3285c142b6a9138 (patch) | |
tree | 598f84529be2d230cb51845900c0ce64a698f4df /nixos/modules/services/networking/quicktun.nix | |
parent | a92c7bb0cc43991b6ac0b7f8b8bd2dbe3f2daafd (diff) | |
download | nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar.gz nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar.bz2 nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar.lz nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar.xz nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.tar.zst nixpkgs-ff36d958785e6dce5a87e3c9f3285c142b6a9138.zip |
nixos/quicktun: init
Diffstat (limited to 'nixos/modules/services/networking/quicktun.nix')
-rw-r--r-- | nixos/modules/services/networking/quicktun.nix | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/nixos/modules/services/networking/quicktun.nix b/nixos/modules/services/networking/quicktun.nix new file mode 100644 index 00000000000..5bcf923f909 --- /dev/null +++ b/nixos/modules/services/networking/quicktun.nix @@ -0,0 +1,118 @@ +{ config, pkgs, lib, ... }: + +let + + cfg = config.services.quicktun; + +in + +with lib; + +{ + options = { + + services.quicktun = mkOption { + default = { }; + description = "QuickTun tunnels"; + type = types.attrsOf (types.submodule { + options = { + tunMode = mkOption { + type = types.int; + default = 0; + example = 1; + description = ""; + }; + + remoteAddress = mkOption { + type = types.str; + example = "tunnel.example.com"; + description = ""; + }; + + localAddress = mkOption { + type = types.str; + example = "0.0.0.0"; + description = ""; + }; + + localPort = mkOption { + type = types.int; + default = 2998; + description = ""; + }; + + remotePort = mkOption { + type = types.int; + default = 2998; + description = ""; + }; + + remoteFloat = mkOption { + type = types.int; + default = 0; + description = ""; + }; + + protocol = mkOption { + type = types.str; + default = "nacltai"; + description = ""; + }; + + privateKey = mkOption { + type = types.str; + description = ""; + }; + + publicKey = mkOption { + type = types.str; + description = ""; + }; + + timeWindow = mkOption { + type = types.int; + default = 5; + description = ""; + }; + + upScript = mkOption { + type = types.lines; + default = ""; + description = ""; + }; + }; + }); + }; + + }; + + config = mkIf (cfg != []) { + systemd.services = fold (a: b: a // b) {} ( + mapAttrsToList (name: qtcfg: { + "quicktun-${name}" = { + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + environment = { + "INTERFACE" = name; + "TUN_MODE" = toString qtcfg.tunMode; + "REMOTE_ADDRESS" = qtcfg.remoteAddress; + "LOCAL_ADDRESS" = qtcfg.localAddress; + "LOCAL_PORT" = toString qtcfg.localPort; + "REMOTE_PORT" = toString qtcfg.remotePort; + "REMOTE_FLOAT" = toString qtcfg.remoteFloat; + "PRIVATE_KEY" = qtcfg.privateKey; + "PUBLIC_KEY" = qtcfg.publicKey; + "TIME_WINDOW" = toString qtcfg.timeWindow; + "TUN_UP_SCRIPT" = pkgs.writeScript "quicktun-${name}-up.sh" qtcfg.upScript; + "SUID" = "nobody"; + }; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.quicktun}/bin/quicktun.${qtcfg.protocol}"; + }; + }; + }) cfg + ); + }; + +} |