diff --git a/gunpowder/default.nix b/gunpowder/default.nix index 402101e30f85f0cb5023e3fee179d37264844d85..00dd9604e462031a376fdea59aeff4336fa25b3c 100644 --- a/gunpowder/default.nix +++ b/gunpowder/default.nix @@ -47,6 +47,10 @@ desktopManager.xfce.enable = true; }; openssh.enable = true; tailscale.enable = true; + mullvad-vpn = { + enable = true; + package = pkgs.mullvad-vpn; + }; resolved.enable = true; }; @@ -76,6 +80,8 @@ randomizedDelaySec = "15m"; }; optimise.automatic = true; }; + + environment.systemPackages = with pkgs; [ qbittorrent ]; system.stateVersion = "22.11"; } diff --git a/gunpowder/services/mullvad.nix b/gunpowder/services/mullvad.nix deleted file mode 100644 index ec0f9e85cf5623e25890c692a6b8365de8899c25..0000000000000000000000000000000000000000 --- a/gunpowder/services/mullvad.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: -let - enable = true; - - mullvadMark = "0x6d6f6c65"; - - bypassRuleset = pkgs.writeText "mullvad-tailscale-bypass.nft" '' - table inet mullvad_tailscale_bypass { - chain output { - type route hook output priority 0; policy accept; - ip daddr 100.64.0.0/10 meta mark set ${mullvadMark} ct mark set ${mullvadMark} - ip6 daddr fd7a:115c:a1e0::/48 meta mark set ${mullvadMark} ct mark set ${mullvadMark} - oifname "tailscale0" meta mark set ${mullvadMark} ct mark set ${mullvadMark} - } - chain input { - type filter hook input priority -100; policy accept; - ip saddr 100.64.0.0/10 meta mark set ${mullvadMark} ct mark set ${mullvadMark} - ip6 saddr fd7a:115c:a1e0::/48 meta mark set ${mullvadMark} ct mark set ${mullvadMark} - iifname "tailscale0" meta mark set ${mullvadMark} ct mark set ${mullvadMark} - } - } - ''; -in -lib.mkIf enable { - age.secrets.mullvad.file = ../../secrets/mullvad.age; - - services.mullvad-vpn = { - enable = true; - package = pkgs.mullvad-vpn; - }; - - systemd.services.mullvad-tailscale-bypass = { - description = "Exempt tailnet traffic from the Mullvad tunnel and kill switch"; - wantedBy = [ "multi-user.target" ]; - after = [ "network-pre.target" ]; - before = [ "mullvad-daemon.service" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ExecStart = pkgs.writeShellScript "mullvad-tailscale-bypass-start" '' - ${pkgs.nftables}/bin/nft delete table inet mullvad_tailscale_bypass 2>/dev/null || true - ${pkgs.nftables}/bin/nft -f ${bypassRuleset} - ''; - }; - }; - - systemd.services.mullvad-provision = { - description = "Log in to Mullvad and lock networking to the tunnel"; - wantedBy = [ "multi-user.target" ]; - after = [ "mullvad-daemon.service" ]; - requires = [ "mullvad-daemon.service" ]; - path = [ config.services.mullvad-vpn.package ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - }; - script = '' - until mullvad status >/dev/null 2>&1; do sleep 1; done - mullvad account login "$(cat ${config.age.secrets.mullvad.path})" - mullvad lan set block - mullvad lockdown-mode set on - mullvad auto-connect set on - mullvad connect - ''; - }; -} diff --git a/gunpowder/services/qbittorrent.nix b/gunpowder/services/qbittorrent.nix deleted file mode 100644 index 47570926de3738ff3ca9612e0e04036622afbab6..0000000000000000000000000000000000000000 --- a/gunpowder/services/qbittorrent.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ lib, pkgs, ... }: -let - enable = true; - - killSwitchRuleset = pkgs.writeText "qbittorrent-mullvad-only.nft" '' - table inet qbittorrent_mullvad_only { - chain output { - type filter hook output priority -50; policy accept; - meta skuid "qbittorrent" oifname != "wg-mullvad" oifname != "lo" drop - } - } - ''; -in -lib.mkIf enable { - services = { - qbittorrent = { - enable = true; - openFirewall = true; - }; - tailproxy.qbittorrent = { - enable = true; - hostname = "qbittorrent"; - port = 8080; - authKey = "tskey-auth-kV7j5FHHHh11CNTRL-wPSNdNQqza8kXxzpnZXha8B7JCvdwCAy"; # One-time key - }; - }; - - systemd.services.qbittorrent-mullvad-only = { - description = "Restrict qBittorrent's egress to the Mullvad tunnel only"; - wantedBy = [ "multi-user.target" ]; - after = [ "network-pre.target" ]; - before = [ "qbittorrent.service" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ExecStart = pkgs.writeShellScript "qbittorrent-mullvad-only-start" '' - ${pkgs.nftables}/bin/nft delete table inet qbittorrent_mullvad_only 2>/dev/null || true - ${pkgs.nftables}/bin/nft -f ${killSwitchRuleset} - ''; - }; - }; -} diff --git a/secrets/mullvad.age b/secrets/mullvad.age deleted file mode 100644 index 0ba002c8108c920fc79e250873a2ea897028a7c5..0000000000000000000000000000000000000000 Binary files a/secrets/mullvad.age and /dev/null differ diff --git a/secrets/secrets.nix b/secrets/secrets.nix index ecaf2b6b19054bbb983353d4fb7fbe1fa808b0dc..e2c6fa5f0b352eac9528667762bd4e76a390663f 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -46,5 +46,4 @@ "cifs.age".publicKeys = jasmineKeys; "beanboy.age".publicKeys = peachKeys; "oa2p.age".publicKeys = dragonwellKeys; "woodpecker.age".publicKeys = dragonwellKeys; - "mullvad.age".publicKeys = gunpowderKeys; }