diff options
| -rw-r--r-- | etc/dns/sorre.internal.zone | 23 | ||||
| -rw-r--r-- | hosts/tower/network.nix | 1 | ||||
| -rw-r--r-- | hosts/tower/web/vaultwarden.nix | 12 | ||||
| -rw-r--r-- | hosts/underworld/network.nix | 3 | ||||
| -rw-r--r-- | secrets/wireguard/nyaan.txt | 26 | ||||
| -rw-r--r-- | secrets/wireguard/sagittarius.txt | 26 | ||||
| -rw-r--r-- | secrets/wireguard/underworld.txt | 18 | ||||
| -rw-r--r-- | share/system/client-common.nix | 2 | ||||
| -rw-r--r-- | wireguard.nix | 112 |
9 files changed, 10 insertions, 213 deletions
diff --git a/etc/dns/sorre.internal.zone b/etc/dns/sorre.internal.zone deleted file mode 100644 index c84dcdc..0000000 --- a/etc/dns/sorre.internal.zone +++ /dev/null @@ -1,23 +0,0 @@ -$ORIGIN sorre.internal. -$TTL 3600 - -;; Nameservers/DNS setup -@ IN SOA ns1.sorre.internal. hostmaster.sorre.internal. ( - 2026070700 ; serial (YYYYMMDDnn format) - 3600 ; refresh - 600 ; retry - 604800 ; expire - 3600 ; negative cache TTL - ) -@ IN NS ns1 -ns1 IN AAAA 2301:db8:acad:a::1 - -;; Hosts -sagittarius IN AAAA 2301:db8:acad:a::1 -nyaan IN AAAA 2301:db8:acad:a::2 -pixel8 IN AAAA 2301:db8:acad:a::3 - -;; Services -vaultwarden IN CNAME sagittarius -music IN CNAME sagittarius -git IN CNAME sagittarius diff --git a/hosts/tower/network.nix b/hosts/tower/network.nix index 8bd6091..eb6d6d0 100644 --- a/hosts/tower/network.nix +++ b/hosts/tower/network.nix @@ -21,7 +21,6 @@ }; }; - services.tailscale = { enable = true; openFirewall = true; diff --git a/hosts/tower/web/vaultwarden.nix b/hosts/tower/web/vaultwarden.nix index bf3c924..c277d65 100644 --- a/hosts/tower/web/vaultwarden.nix +++ b/hosts/tower/web/vaultwarden.nix @@ -1,4 +1,9 @@ -{ lib, config, pkgs, ... }: +{ + lib, + config, + pkgs, + ... +}: let cfg = config.services.vaultwarden; domain = "vaultwarden.sorre.internal"; @@ -30,7 +35,10 @@ in serviceConfig.Type = "oneshot"; description = "Back up vaultwarden data"; conflicts = [ "vaultwarden.service" ]; - path = [ pkgs.gnutar pkgs.systemdMinimal ]; + path = [ + pkgs.gnutar + pkgs.systemdMinimal + ]; enableStrictShellChecks = true; script = '' #!/usr/bin/env bash diff --git a/hosts/underworld/network.nix b/hosts/underworld/network.nix index 5b8380f..fe2986f 100644 --- a/hosts/underworld/network.nix +++ b/hosts/underworld/network.nix @@ -1,14 +1,11 @@ { config, - flakeRoot, ... }: let secrets = config.sops.secrets; in { - imports = [ (flakeRoot + /wireguard.nix) ]; - sops = { age.keyFile = "/var/lib/sops-nix/key.txt"; secrets."wireless.env" = { diff --git a/secrets/wireguard/nyaan.txt b/secrets/wireguard/nyaan.txt deleted file mode 100644 index 76f636d..0000000 --- a/secrets/wireguard/nyaan.txt +++ /dev/null @@ -1,26 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:Ng3FR3cU6mjQqyOkDhk8S1HUa4sO/+exJn/B+IKMnTNtG80ZWWzy8PgFJqAg,iv:mAOZLP9PWYUNXySiclpgyo2ZSkcF0MpiUXqwtNGkPAY=,tag:MvHabqCi+bsrlNuN3CfkHw==,type:str]", - "sops": { - "age": [ - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxOXZKYjNXWjJ2eEFQNXAw\naytCZlQ0REJuODcxZitZM2hnTmVmbGZRVnlNCmNPa3ZBcmRFcHkvY1FqQllYb2Jl\nMXR3U3lCOFl2T1V4WmJnWXFwckczR2sKLS0tIFNWUHdydFNBOGFCUmpwUUt5dkNR\nZW1qbGJqbFN0cWM2SVAycTlWeGRDeE0KjGJMYucpTHDdl6DpF4ZomyOe0N4RIy50\naLHNY1zahrw0QngMRGrRqkQO5TYwB1w9LAjaAY8A9t1UPTFv3dpayw==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1l088h7umwuxp0sw8wk0stfup0empdnldczxvrhueu7n0vxd0c57q9zvwsk" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPcHNxREc0Q3hUVFY4c01n\nalBZbXhnNXlnVXV3TitQK1g3TFpMeE10cFIwCkZPNWVsOHViVUlmR2pyN3BtV3Zv\nQWcreVhuUzZtVXlkQTV3Y0pSWWVFM0kKLS0tIE1aWjd6Sm56Tzduckd6eXdMTjhw\naW9JSWQyRHhJQ09PY3V4c0xNSDZ5eFEKXmOmCQoav6GJ+t3qLlKRBxcARnkfzfY+\nUiKPZlELVtIR3Ph55XVwb+FXL73KSicJxV148LxGf9Bm67zK47tKyw==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1xzqshnlstewfha28sqjp4lf97mm43axyrhga0vkjmt5zx6eydqhsvlsasc" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNd0VYMUQvbmFYUXFsenZP\naXI1R1hNQzI2d21BWEdhQmZ5SkdFRTVENlVVCnlNWXNPV2RVa3RPQWloa0xwOWV0\nTjFvd2J1OUF5TDd6eGx0K29WVXZmYzQKLS0tIHE4VkdLK0pJU01UQjVhc2NpSjBU\nTGFwS25hK3RHdWpKRVlMcmVaWWdDaFEKEwqGjZvO2WWrbIjp91qIh8T5OlHbhB4Y\nq8R4dMYhAiBGU/N8dFrEIZLhHVRmLamg7eipOOh+MvFXLweFhMcBqA==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1jmpdssn7555g0pht7zwqq2dvrvzxyu65w6cf2su8pp2fz0zvaykq0jgern" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqUXNOUmZaY0RwTDlvRVdP\nWUJiL25jNThMMzlqYmlWMm1RM0JkNTFicFR3CnBGbEpQNTlwN2dEL1lLUEZ6T0lT\nNXRmTmlSTWIrMm9HekQ2Qm83SU1oZ0UKLS0tIEY4ODY0U2NvSUxUYWRZVXZqcjA0\nTlUrbHc1cVpsQkJzNDVZQ09BTWwzcTAK9+ybeJDwSIbHj5QmBazILaoBRRYkUE1i\n5PhvxBIvNcod05ZnTcvt3kMQMPTBe85cZQG1aaxnrIiKfVZeN8/o2Q==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1sffhunmeqmeey29lnvuds59mn74jfpctd3wm0t6svca0fztgvd4qnretc6" - } - ], - "lastmodified": "2026-05-30T09:55:51Z", - "mac": "ENC[AES256_GCM,data:7eX5Kys9x65tk6+Kd0uTGgQXAoSuJnJ5V3D/eAN3gh9PrGjatc6Cqw45HPk6SqeYx7y6qCRK9ncdC3SYGX2vM2esREjQjgij9oNsKQvr7IKeb5QKB1rldwoPaWtsb6IfDnNew2nSPqaUw6R+K/hdMWKCfYFu5dGU0cbSoDH6DZ8=,iv:2YYQr7VtEnYn3UtgjovhKyCFAd3N/Xl+5+LwcPImJfo=,tag:nGTnUmabUaQUYYoeQLiNzQ==,type:str]", - "version": "3.13.1" - } -} diff --git a/secrets/wireguard/sagittarius.txt b/secrets/wireguard/sagittarius.txt deleted file mode 100644 index 1cef967..0000000 --- a/secrets/wireguard/sagittarius.txt +++ /dev/null @@ -1,26 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:OgzuAef2sEzf4cC7fHmmcUcdeiODfOwBS1IQ8/hN2MyrA+NqnVWYnpj9qR2J,iv:0JbA2r55QHJ7Qj8P6W3LKseimir/tciErWTeC82ln7Q=,tag:+mikffsQpyOqGC5PnFB0gw==,type:str]", - "sops": { - "age": [ - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvM0NZVk9mdVo0Z3pJYyty\nMVV2eXNFVDM5SEVPS3BrSXl5S3IwRHE0a21vCnBHektiZDRvNDI3ZWovSjdFVDBG\nbnRLL2piekhiS1QrUitmY0tUMG1GSncKLS0tIEhvbTh6Nm1lamRrZ3MwNyt3THJJ\naVVFbnBNdkYzb3ZaazlUWnNWdlhjZ0UK+wp/uu7Q8XYoObBWKNqn4Nm8EOUBibpH\nkgvm8KE9mMFUMIbZILlO6yqPg/ppy2gBveboVgTvRCf9XlfHPj5RUg==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1l088h7umwuxp0sw8wk0stfup0empdnldczxvrhueu7n0vxd0c57q9zvwsk" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5bnJ1RjM2SVpHUGtkd0Rh\nblpEK3JUdEVWKy9ZZjBobnYyL0FzSU8xRWdZCisxK3ZwNDBJL00wVVp3L3IyNU5H\nZzhsNzhIdGpPWG9ZelZXZ3hjRDF2WDgKLS0tIDNsejNLaHZ1L0FmYUFDK2tNWVFP\nMGpJRTFLUkpjOTFMRVovVVRvTEF1ckEKE7DNcRUIXSmYJEJj/J7eIlnD+6+BhDpM\nNHrrPywKyHlqG6IS8oNI3OXM6tEZC1SDJ8zrE8x5uFJb42CBCodqJg==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1xzqshnlstewfha28sqjp4lf97mm43axyrhga0vkjmt5zx6eydqhsvlsasc" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRejJOSnRZZXFBUHFNMTQ0\nWGsxS2R6ZHUwVVRXVThKTmg3RVZyNmxHNUVrCkk4WU9Dc0hMV0xTb3dJd2R1enpH\nd1dyWmVxZmozMDBtWFdzSTF4cXpxNmcKLS0tIFBjeElqQzgzS01YanBabWxnUUti\nOUN3Yk45bGRlbHFoMmRHL0N3R01heW8KjcmdIpfVmRGaPVUuM75h2RvhmD88VnHy\n+ToQ58jIIq2ZhwCPGYtVvlBHiZjj57fp108BqfOZfBVuZlHBCmhUyQ==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1jmpdssn7555g0pht7zwqq2dvrvzxyu65w6cf2su8pp2fz0zvaykq0jgern" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqcHh4MzF5RU51dWhuY3pV\nOTdKMFV3TjhBQk5sL25WQ2dOZTlQSndZUW00CjI1RjM0TUQxNkdreGdiWk9Ca2E3\nQ2JaOXN3RFUreDJITkFoL1dxelpob1kKLS0tIHV2QjdqcjdLS0ZnR3hCcFM5THN3\nR0VjVkw0UXdTdCsrM3dzQTc5TGVOWDAKYtZOzX9chjMRRE46d3tsjv8AGF1f1WZd\nFPSc32u0ZFrcnuQDrM/KRi1mfV8chNMSPI+521KdnqcUrBWUYn54Tw==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1sffhunmeqmeey29lnvuds59mn74jfpctd3wm0t6svca0fztgvd4qnretc6" - } - ], - "lastmodified": "2026-05-30T09:56:07Z", - "mac": "ENC[AES256_GCM,data:3qOpDxLQUPGKtU4TqI5RxOPiAIUCZBdoBD97Cyj0yazqECOZya/vvPGuYa+iq8MrNTtCdN9Aa9oLnIP2VXfQRR8na2X6Isx423J17Y75g5Qujnz7Szt4Gzsazvardy6Ibuy/MSOmfBbO7PFJTP6pkpVH4ICggByON1WasusTNhw=,iv:h2OSF/uDJY2rhVFtUvPyYcyh+EqkAP38VJlT0R2clY0=,tag:XpoFAeRNxPhwTAWe+E+XPA==,type:str]", - "version": "3.13.1" - } -} diff --git a/secrets/wireguard/underworld.txt b/secrets/wireguard/underworld.txt deleted file mode 100644 index 28526ea..0000000 --- a/secrets/wireguard/underworld.txt +++ /dev/null @@ -1,18 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:PBD5K8RhSCVwkbOcl6GQ/EEmt9NRgy3NITLZ24crh94+6kxh7hZMHXpnPakv,iv:ZhotjNIf3VXpXFZvY2JtLhc/7PtQqzC74fO+FOIJ61A=,tag:bEVDBSuYqdT/R6y8H4XbXQ==,type:str]", - "sops": { - "age": [ - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqNzRPWFdVbDB5OVlQZEhl\nYTNNVTREUjNjY3ljUUlTTDlkVytrOW0xYUdzCnNCaUtxbHRvSng0N0JhYVRHVFM4\nNk1JQXlKa0dDZHVTQ2ttaEU1TjBtZzQKLS0tIGt3dWxtRWdnYmtNcmhNR2lGMUV6\nRER6Q1k5UXBvUmdWTUxDSWxRdFNMNWMKHAAA4Y+5Mip29dDmC4GxD7rtfEhyxXO3\njWuH2PTgCq04g8kkV/j6yZbFW+FOiQYIfBAvMdWP1iMG+ZAmCgWr3g==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1jmpdssn7555g0pht7zwqq2dvrvzxyu65w6cf2su8pp2fz0zvaykq0jgern" - }, - { - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtelMvQzZ3VFovSUhIVU9Y\nWmZDTGFyVzVsd0l0eDF2RHNoR3MxTHFBZEc0ClAxMFlKaG1Eb2VCOVFtcVU2c3Q0\nMUh6Z3Vjc0dVb0QwenZwakNIRHY2bm8KLS0tIDJaeTM2VjdLZjFWb3NWbFczbjZC\nRmFkT3JQK2hZNUN0MFBVR010UGw5YzgKrrO/lOlhLYlE8hm6/G+nxKMGxDzrS4mG\nlsFyH4UUgXjOKZRp1LYz82R90lw6diNXaKfEBFqdZWuBMfCsrl22Fg==\n-----END AGE ENCRYPTED FILE-----\n", - "recipient": "age1c8ff4rph28fvpy2e2kwh9m8hwrpyxzet75uhpxvxe90ncjcded5qmt64zq" - } - ], - "lastmodified": "2026-08-02T10:35:41Z", - "mac": "ENC[AES256_GCM,data:nA4gCWRG5Cix5TDJ79Nb4Psi8KkmBsaQU7sa8CLAPgw1Ma7mW2G5Lg0MLa9+QoUaiSycCtWMx+TJVZujb3UNWn86pzIRFkL23iJgrxc/VdQsa1lNv5idCItB2QVkyuT4iU399/pXlzsrrN+m4LrVqnhxn45j+RMUBBrqLKDVcCs=,iv:KAaY+848NHMGZg24S7G9EHbkSG9ilNdczU0mSwuD1SI=,tag:NuPo29TS4EHgTcUmo+JZ6w==,type:str]", - "version": "3.13.3" - } -} diff --git a/share/system/client-common.nix b/share/system/client-common.nix index 1b36d42..1f6f378 100644 --- a/share/system/client-common.nix +++ b/share/system/client-common.nix @@ -34,8 +34,6 @@ }; }; - environment.systemPackages = [ pkgs.wireguard-tools ]; - programs.nix-ld = { enable = true; libraries = diff --git a/wireguard.nix b/wireguard.nix deleted file mode 100644 index f6c696a..0000000 --- a/wireguard.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ config, pkgs, ... }: -let - wgPort = 51820; # Common port used on all peers - firewallMark = 42; - - inherit (pkgs) lib; - inherit (lib.attrsets) - mapAttrsToList - ; - - # The topology is hub-and-spoke/star - # sagittarius is the hub == 2301:db8:acad:a::1 - # it hosts authoritative DNS and spokes do keepalive with it. - hub = { - hostName = "sagittarius"; - address = "2301:db8:acad:a::1/128"; - publicKey = "GrrN8j9ZlPjTU5sQD4l8RDCGAn2YYszbSIE1zuG4OiI="; - endpoint = "95.216.136.85:${toString wgPort}"; - }; - spokes = { - nyaan = { - address = "2301:db8:acad:a::2/128"; - publicKey = "u5nh+YNV84IbS7g0ncfs/V+cqEudNh500LQ7pmdS7j0="; - }; - pixel8 = { - address = "2301:db8:acad:a::3/128"; - publicKey = "awBcQzNBdlYWpoOF1n7ijol2EiaJy5cxrVXfrqCvM0k="; - }; - underworld = { - address = "2301:db8:acad:a::4/128"; - publicKey = "GPVOvXqg8rp1a38T6YDHQN6UkG2TJT399A4wNtK4WTM="; - }; - }; - - generatePeer = - hostname: values: - { - PublicKey = values.publicKey; - AllowedIPs = [ values.address ]; - } - // lib.optionalAttrs (builtins.hasAttr "endpoint" values) { - Endpoint = values.endpoint; - PersistentKeepalive = 1; - }; - - hubPeers = mapAttrsToList generatePeer spokes; - spokePeers = [ - { - PublicKey = hub.publicKey; - AllowedIPs = [ "2301:db8:acad:a::/64" ]; - Endpoint = hub.endpoint; - PersistentKeepalive = 10; - } - ]; - - hostname = config.networking.hostName; - isHub = hostname == hub.hostName; - conf = if isHub then hub else spokes."${hostname}"; - privateKeyPath = ./secrets/wireguard/${hostname}.txt; -in -{ - sops.secrets."wireguard-${hostname}-pk" = { - sopsFile = privateKeyPath; - owner = "systemd-network"; - group = "systemd-network"; - mode = "0640"; - format = "binary"; - }; - - networking.nameservers = [ - "2301:db8:acad:a::1" # see the zonefile in etc/dns - ]; - - systemd.network = { - enable = true; - - networks."50-wg" = { - matchConfig.Name = "wg0"; - address = [ conf.address ]; - networkConfig = lib.mkIf isHub { - IPv6Forwarding = true; - IPv6AcceptRA = false; # Disable RA acceptance on router interfaces - }; - }; - - netdevs."50-wg" = { - netdevConfig = { - Kind = "wireguard"; - Name = "wg0"; - }; - - wireguardConfig = { - ListenPort = wgPort; - PrivateKeyFile = config.sops.secrets."wireguard-${hostname}-pk".path; - # To automatically create routes for everything in AllowedIPs, - # add RouteTable=main - RouteTable = "main"; - # FirewallMark marks all packets send and received by wg0 with the - # number, which can be used to define policy rules on these packets. - FirewallMark = firewallMark; - }; - - wireguardPeers = if isHub then hubPeers else spokePeers; - }; - }; - - boot.kernel.sysctl = lib.mkIf isHub { - # I *think* this should be fine since networkd will prevent forwarding - # on any interface that doesn't have IPv6Forwarding set to true. - "net.ipv6.conf.wg0.forwarding" = true; - }; -} |
