about summary refs log tree commit diff
path: root/nixos/kanata/configuration.nix
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2024-02-08 03:03:43 +0900
committersefidel <contact@sefidel.net>2024-02-08 03:03:43 +0900
commita68d1ba1c27cbf678db06a7e956d8e9a64be686c (patch)
treee46e1d20ab092a62c5d62f80c24a26e120e0c81e /nixos/kanata/configuration.nix
parentcfe73a14c141cc953b0b0d711c4c69cdd75c11fc (diff)
downloadnixrc-a68d1ba1c27cbf678db06a7e956d8e9a64be686c.tar.gz
nixrc-a68d1ba1c27cbf678db06a7e956d8e9a64be686c.zip
feat(nixos/kanata): configure protonvpn proxy
Diffstat (limited to 'nixos/kanata/configuration.nix')
-rw-r--r--nixos/kanata/configuration.nix57
1 files changed, 57 insertions, 0 deletions
diff --git a/nixos/kanata/configuration.nix b/nixos/kanata/configuration.nix
index 5d14ba6..d7041fd 100644
--- a/nixos/kanata/configuration.nix
+++ b/nixos/kanata/configuration.nix
@@ -99,6 +99,7 @@ in
   sops.secrets.interlink-password = { };
   sops.secrets.interlink-ovpn = { };
   sops.secrets.interlink-ovpn-creds = { };
+  sops.secrets.proton-private-key = { };
   # TODO: insecure?
   sops.secrets.invidious-hmac = { mode = "0444"; };
 
@@ -289,6 +290,62 @@ in
     };
   };
 
+  networking.firewall.allowedUDPPorts = [ 51820 ];
+
+  containers.v-proton-jp43 = {
+    autoStart = true;
+    enableTun = true;
+    # Tailscale authkeys expire after 90 days, which means if a system
+    # restarts, there's a high chance that the key will be invalid.
+    # Therefore, we use classic authentication with non-ephemeral storage.
+    ephemeral = false;
+    privateNetwork = true;
+    hostAddress = "172.16.1.3";
+    localAddress = "172.16.1.4";
+    bindMounts."/run/secrets/proton-private-key".hostPath = config.sops.secrets.proton-private-key.path;
+    config = { config, pkgs, lib, ... }: {
+      services.tailscale = {
+        enable = true;
+        useRoutingFeatures = "both";
+        extraUpFlags = [
+          "--advertise-exit-node=true"
+        ];
+      };
+
+      networking.firewall.allowedUDPPorts = [ 51820 ];
+
+      networking.wg-quick.interfaces.wg0 = {
+        autostart = true;
+
+        address = [ "10.2.0.2/32" ];
+        listenPort = 51820;
+
+        privateKeyFile = "/run/secrets/proton-private-key";
+
+        peers = [{
+          publicKey = "7FslkahrdLwGbv4QSX5Cft5CtQLmBUlpWC382SSF7Hw=";
+          # Exclude 100.64.0.0/10
+          allowedIPs = [
+            "0.0.0.0/0"
+            # "0.0.0.0/2"
+            # "64.0.0.0/3"
+            # "96.0.0.0/6"
+            # "100.0.0.0/10"
+            # "100.128.0.0/9"
+            # "101.0.0.0/8"
+            # "102.0.0.0/7"
+            # "104.0.0.0/5"
+            # "112.0.0.0/4"
+            # "128.0.0.0/1"
+          ];
+          endpoint = "103.125.235.19:51820";
+        }];
+      };
+
+      system.stateVersion = "24.05";
+    };
+  };
+
   # This option defines the first version of NixOS you have installed on this particular machine,
   # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
   #