229 lines
5.3 KiB
Nix
229 lines
5.3 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
username,
|
|
hosts,
|
|
secrets,
|
|
...
|
|
}:
|
|
{
|
|
boot.kernelParams = [
|
|
"biosdevname=0"
|
|
"net.ifnames=0"
|
|
];
|
|
networking = {
|
|
useDHCP = lib.mkForce false;
|
|
dhcpcd = {
|
|
wait = "background";
|
|
IPv6rs = true;
|
|
extraConfig = ''
|
|
interface mac0
|
|
noipv4
|
|
'';
|
|
};
|
|
interfaces = {
|
|
eth0.wakeOnLan.enable = true;
|
|
eth1.wakeOnLan.enable = true;
|
|
mac0 = {
|
|
useDHCP = true;
|
|
ipv4.addresses = [
|
|
{
|
|
address = "192.168.3.2";
|
|
prefixLength = 24;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
macvlans."mac0" = {
|
|
interface = "eth0";
|
|
mode = "bridge";
|
|
};
|
|
defaultGateway = {
|
|
address = "192.168.3.1";
|
|
interface = "mac0";
|
|
};
|
|
nameservers = [
|
|
"192.168.3.2"
|
|
];
|
|
|
|
firewall = {
|
|
enable = true;
|
|
checkReversePath = false;
|
|
allowedTCPPorts = [
|
|
80
|
|
443
|
|
2222
|
|
];
|
|
extraInputRules = ''
|
|
ip saddr { 10.0.0.0/8, 100.64.0.0/10, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 } accept
|
|
ip6 saddr { fd00::/8, fe80::/10 } accept
|
|
'';
|
|
filterForward = false;
|
|
};
|
|
nftables.enable = true;
|
|
nat = {
|
|
enable = true;
|
|
externalInterface = "mac0";
|
|
internalIPs = [ "192.168.3.0/24" ];
|
|
};
|
|
};
|
|
|
|
services.openssh = {
|
|
enable = true;
|
|
openFirewall = false;
|
|
settings = {
|
|
# PermitRootLogin = "yes";
|
|
PermitRootLogin = "prohibit-password";
|
|
PasswordAuthentication = true;
|
|
};
|
|
};
|
|
users.users.root.openssh.authorizedKeys.keys = lib.mapAttrsToList (
|
|
host: key: "${key} ${host}"
|
|
) hosts;
|
|
users.users.${username}.openssh.authorizedKeys.keys = lib.mapAttrsToList (
|
|
host: key: "${key} ${host}"
|
|
) hosts;
|
|
|
|
sops.secrets.dae-imxyy-nix-server = {
|
|
sopsFile = secrets.dae-imxyy-nix-server;
|
|
restartUnits = [ "dae.service" ];
|
|
format = "binary";
|
|
};
|
|
services.dae = {
|
|
enable = true;
|
|
configFile = config.sops.secrets.dae-imxyy-nix-server.path;
|
|
openFirewall.enable = false;
|
|
};
|
|
systemd.services.dae = {
|
|
after = [ "sops-nix.service" ];
|
|
serviceConfig.MemoryMax = "1G";
|
|
};
|
|
sops.secrets.mihomo = {
|
|
sopsFile = secrets.mihomo;
|
|
restartUnits = [ "mihomo.service" ];
|
|
format = "yaml";
|
|
key = "";
|
|
};
|
|
systemd.services.mihomo.after = [ "sops-nix.service" ];
|
|
services.mihomo = {
|
|
enable = true;
|
|
configFile = config.sops.secrets.mihomo.path;
|
|
webui = pkgs.metacubexd;
|
|
};
|
|
|
|
sops.secrets.frp-env = {
|
|
sopsFile = secrets.frp;
|
|
restartUnits = [ "frp.service" ];
|
|
format = "dotenv";
|
|
};
|
|
systemd.services.frp.serviceConfig.EnvironmentFile = [
|
|
config.sops.secrets.frp-env.path
|
|
];
|
|
services.frp = {
|
|
instances."" = {
|
|
enable = true;
|
|
role = "client";
|
|
settings = {
|
|
serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}";
|
|
serverPort = 7000;
|
|
auth.token = "{{ .Envs.FRP_AUTH_TOKEN }}";
|
|
};
|
|
};
|
|
};
|
|
|
|
sops.secrets.et-imxyy-nix-server = {
|
|
sopsFile = secrets.et-imxyy-nix-server;
|
|
restartUnits = [ "easytier.service" ];
|
|
format = "binary";
|
|
};
|
|
environment.systemPackages = [ pkgs.easytier ];
|
|
systemd.services."easytier" = {
|
|
enable = true;
|
|
script = "${pkgs.easytier}/bin/easytier-core -c ${config.sops.secrets.et-imxyy-nix-server.path}";
|
|
serviceConfig = {
|
|
Restart = "always";
|
|
RestartSec = 30;
|
|
User = "root";
|
|
};
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [
|
|
"network.target"
|
|
"sops-nix.service"
|
|
];
|
|
};
|
|
|
|
virtualisation.oci-containers.containers.obligator = {
|
|
image = "anderspitman/obligator:latest";
|
|
volumes = [
|
|
"/var/lib/obligator:/data"
|
|
"/var/lib/obligator:/api"
|
|
];
|
|
ports = [ "8081:1616" ];
|
|
cmd = [
|
|
"-storage-dir"
|
|
"/data"
|
|
"-api-socket-dir"
|
|
"/api"
|
|
"-root-uri"
|
|
"https://oidc.imxyy.top"
|
|
"-port"
|
|
"1616"
|
|
];
|
|
};
|
|
services.caddy.virtualHosts."oidc.imxyy.top" = {
|
|
extraConfig = ''
|
|
reverse_proxy :8081
|
|
'';
|
|
};
|
|
my.services.frp.webServers = [ "oidc.imxyy.top" ];
|
|
|
|
systemd.services.ddns-go =
|
|
let
|
|
version = "6.6.7";
|
|
ddns-go = pkgs.buildGoModule {
|
|
inherit version;
|
|
pname = "ddns-go";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "jeessy2";
|
|
repo = "ddns-go";
|
|
rev = "v${version}";
|
|
hash = "sha256-Ejoe6e9GFhHxQ9oIBDgDRQW9Xx1XZK+qSAXiRXLdn+c=";
|
|
};
|
|
meta.mainProgram = "ddns-go";
|
|
vendorHash = "sha256-XZii7gV3DmTunYyGYzt5xXhv/VpTPIoYKbW4LnmlAgs=";
|
|
doCheck = false;
|
|
};
|
|
in
|
|
{
|
|
description = "Go Dynamic DNS";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
ExecStart = "${lib.getExe ddns-go} -l :9876 -f 10 -cacheTimes 180 -c /var/lib/ddns-go/config.yaml";
|
|
Restart = "always";
|
|
RestartSec = 120;
|
|
};
|
|
path = [
|
|
pkgs.bash
|
|
];
|
|
};
|
|
|
|
services.dnsmasq = {
|
|
enable = true;
|
|
resolveLocalQueries = false;
|
|
settings = {
|
|
no-resolv = true;
|
|
server = [ "192.168.3.1" ];
|
|
host-record = [
|
|
"imxyy-nix-server,192.168.3.2"
|
|
"imxyy-cloudwin,192.168.3.4"
|
|
"printer.home,192.168.3.53"
|
|
]
|
|
++ (map (domain: "${domain},192.168.3.2") config.my.services.frp.webServers);
|
|
cache-size = 0;
|
|
log-queries = "extra";
|
|
};
|
|
};
|
|
}
|