headscale

This commit is contained in:
Henri Dohmen 2025-05-14 23:43:38 +02:00
parent 26b5a32ab1
commit 3daa817aad
6 changed files with 120 additions and 38 deletions

View file

@ -59,6 +59,7 @@
imports = [ imports = [
./host/roam ./host/roam
mod.shared.all mod.shared.all
mod.server.all
]; ];
}; };
}; };

View file

@ -1,19 +1,19 @@
{ ... }: { ... }:
{ {
networking.networkmanager.enable = true;
networking.networkmanager.wifi.macAddress = "random";
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
services.blueman.enable = true; services.blueman.enable = true;
systemd.services.NetworkManager-wait-online.enable = false;
services.tailscale = { services.tailscale = {
enable = true; enable = true;
useRoutingFeatures = "client"; useRoutingFeatures = "client";
}; };
systemd.services.NetworkManager-wait-online.enable = false; networking = {
enableIPv6 = true;
networking.networkmanager.ensureProfiles.profiles = { networkmanager.enable = true;
networkmanager.wifi.macAddress = "random";
networkmanager.ensureProfiles.profiles = {
"tuda-vpn" = { "tuda-vpn" = {
connection = { connection = {
autoconnect = "false"; autoconnect = "false";
@ -49,4 +49,5 @@
}; };
}; };
}; };
};
} }

8
mod/server/all.nix Normal file
View file

@ -0,0 +1,8 @@
{ mod, ... }:
{
imports = with mod.server; [
services
networking
security
];
}

28
mod/server/networking.nix Normal file
View file

@ -0,0 +1,28 @@
{ ... }:
{
networking = {
enableIPv6 = true;
interfaces = {
"ens3".ipv6.addresses = [
{
address = "2a03:4000:3b:f99::";
prefixLength = 64;
}
];
};
defaultGateway6 = {
address = "fe80::1";
interface = "ens3";
};
firewall = {
enable = true;
allowedTCPPorts = [
80
443
];
};
};
}

9
mod/server/security.nix Normal file
View file

@ -0,0 +1,9 @@
{ ... }:
{
security = {
acme = {
acceptTerms = true;
defaults.email = "acme@henri-dohmen.de";
};
};
}

35
mod/server/services.nix Normal file
View file

@ -0,0 +1,35 @@
{ config, ... }:
let
headscale-domain = "headscale.hdohmen.de";
in
{
services = {
# TODO: maybe just use wireguard...
headscale = {
enable = true;
address = "127.0.0.1";
port = 8080;
settings = {
server_url = "https://${headscale-domain}";
prefixes.v4 = "100.10.11.0/24";
prefixes.v6 = "fd7a:115c:1011::/48";
dns = {
magic_dns = true;
base_domain = "net.hdohmen.de";
};
};
};
nginx = {
enable = true;
virtualHosts.${headscale-domain} = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${toString config.services.headscale.port}";
proxyWebsockets = true;
};
};
};
};
}