50 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}: let
 | 
						|
  inherit (lib.lists) concatLists optionals;
 | 
						|
  inherit (config.ooknet) host;
 | 
						|
  inherit (config.ooknet.host) admin;
 | 
						|
  inherit (config.services) tailscale;
 | 
						|
in {
 | 
						|
  services.tailscale = {
 | 
						|
    enable = true;
 | 
						|
 | 
						|
    # "client"/"both" - reverce path filtering will be set to loose instead of strict
 | 
						|
    # "server"/"both" - ip forwarding will be enabled
 | 
						|
    useRoutingFeatures = "both";
 | 
						|
 | 
						|
    # user that can fetch tailscale tls certs
 | 
						|
    permitCertUid = "root";
 | 
						|
 | 
						|
    # authentication key for auto connect service
 | 
						|
    authKeyFile = config.age.secrets.tailscale-auth.path;
 | 
						|
 | 
						|
    # flags to pass to the auto-connect service
 | 
						|
    extraUpFlags = concatLists [
 | 
						|
      ["--ssh"]
 | 
						|
      ["--operator" "${admin.name}"]
 | 
						|
      (optionals host.exitNode ["--advertise-exit-node"])
 | 
						|
    ];
 | 
						|
 | 
						|
    # opens relevant tailscale ports over UDP
 | 
						|
    openFirewall = true;
 | 
						|
  };
 | 
						|
 | 
						|
  # trust tailscale default interface
 | 
						|
  networking.firewall.trustedInterfaces = ["${tailscale.interfaceName}"];
 | 
						|
 | 
						|
  # credit github:notashelf/nyx
 | 
						|
  systemd = {
 | 
						|
    # ignore tailscale interface for wait-online service
 | 
						|
    network.wait-online.ignoredInterfaces = ["${tailscale.interfaceName}"];
 | 
						|
 | 
						|
    # only start tailscale daemon after network-online and systemd-resolved services
 | 
						|
    # are up
 | 
						|
    services.tailscaled = {
 | 
						|
      after = ["network-online.target" "systemd-resolved.service"];
 | 
						|
      wants = ["network-online.target" "systemd-resolved.service"];
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |