Compare commits
14 Commits
25b2e3e05f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8be8b72ab | ||
|
|
59709bcde9 | ||
|
|
b0f5ef7439 | ||
|
|
301d8d1ea6 | ||
|
|
5aa041ba27 | ||
|
|
d2e35d3673 | ||
|
|
0baf9c1800 | ||
|
|
a7edc932a8 | ||
|
|
ae82eaa500 | ||
|
|
e24e96f091 | ||
|
|
b42579f8cd | ||
|
|
0192a1ace0 | ||
|
|
dcc5c440f7 | ||
|
|
1ceb440026 |
@@ -1,4 +1,12 @@
|
|||||||
{ config, lib, pkgs, ... }: {
|
{ config, lib, pkgs, ... }: let
|
||||||
|
|
||||||
|
isValidPeer = p:
|
||||||
|
(p ? syscfg.net.wg.enable) &&
|
||||||
|
(p.syscfg.net.wg.enable == true) &&
|
||||||
|
(p.syscfg.net.wg.pubkey != config.syscfg.net.wg.pubkey);
|
||||||
|
activePeers = builtins.filter isValidPeer config.syscfg.peers;
|
||||||
|
in
|
||||||
|
{
|
||||||
imports = [ ./forwarding.nix ];
|
imports = [ ./forwarding.nix ];
|
||||||
config = lib.mkIf (config.syscfg.net.wg.enable) {
|
config = lib.mkIf (config.syscfg.net.wg.enable) {
|
||||||
networking.wireguard = {
|
networking.wireguard = {
|
||||||
@@ -10,18 +18,13 @@
|
|||||||
config.sops.secrets."${config.syscfg.hostname}_wg_priv".path;
|
config.sops.secrets."${config.syscfg.hostname}_wg_priv".path;
|
||||||
listenPort = 1515;
|
listenPort = 1515;
|
||||||
mtu = 1340;
|
mtu = 1340;
|
||||||
postSetup = if config.syscfg.net.wg.server.enable then ''
|
|
||||||
for keyfile in /run/secrets/*_wg_pub; do
|
|
||||||
if [ -f "$keyfile" ]; then
|
|
||||||
${pkgs.wireguard-tools}/bin/wg set wg0 \
|
|
||||||
peer "$(cat "$keyfile")" \
|
|
||||||
allowed-ips 10.10.1.0/24,fd10:10:10::0/64
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
'' else '''';
|
|
||||||
peers =
|
peers =
|
||||||
if config.syscfg.net.wg.server.enable then
|
if config.syscfg.net.wg.server.enable then
|
||||||
[]
|
map (p: {
|
||||||
|
name = p.syscfg.hostname;
|
||||||
|
publicKey = p.syscfg.net.wg.pubkey;
|
||||||
|
allowedIPs = [ p.syscfg.net.wg.ip4 p.syscfg.net.wg.ip6 ];
|
||||||
|
}) activePeers
|
||||||
else
|
else
|
||||||
[{
|
[{
|
||||||
allowedIPs = [ "10.10.1.0/24" "fd10:10:10::0/64" ];
|
allowedIPs = [ "10.10.1.0/24" "fd10:10:10::0/64" ];
|
||||||
|
|||||||
@@ -1,20 +1,4 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, ... }: {
|
||||||
sops.secrets.INFOMANIAK_API_KEY = { sopsFile = ./server.yaml; };
|
sops.secrets.INFOMANIAK_API_KEY = { sopsFile = ./server.yaml; };
|
||||||
sops.secrets."${config.syscfg.hostname}_ssh_pub" = {
|
|
||||||
mode = "0400";
|
|
||||||
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
|
||||||
group = config.users.users.${config.syscfg.defaultUser}.group;
|
|
||||||
};
|
|
||||||
sops.secrets."iriy_ssh_pub" = {
|
|
||||||
mode = "0444";
|
|
||||||
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
|
||||||
group = config.users.users.${config.syscfg.defaultUser}.group;
|
|
||||||
};
|
|
||||||
sops.secrets."valinor_ssh_pub" = {
|
|
||||||
mode = "0444";
|
|
||||||
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
|
||||||
group = config.users.users.${config.syscfg.defaultUser}.group;
|
|
||||||
};
|
|
||||||
sops.secrets."${config.syscfg.hostname}_wg_priv" = { };
|
sops.secrets."${config.syscfg.hostname}_wg_priv" = { };
|
||||||
sops.secrets."${config.syscfg.hostname}_wg_pub" = { };
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -22,21 +22,7 @@ in {
|
|||||||
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
||||||
group = config.users.users.${config.syscfg.defaultUser}.group;
|
group = config.users.users.${config.syscfg.defaultUser}.group;
|
||||||
};
|
};
|
||||||
"${config.syscfg.hostname}_ssh_pub" = {
|
|
||||||
mode = "0444";
|
|
||||||
owner = config.users.users.${config.syscfg.defaultUser}.name;
|
|
||||||
group = config.users.users.${config.syscfg.defaultUser}.group;
|
|
||||||
};
|
|
||||||
"${config.syscfg.hostname}_wg_priv" = { };
|
"${config.syscfg.hostname}_wg_priv" = { };
|
||||||
"${config.syscfg.hostname}_wg_pub" = { };
|
|
||||||
}
|
}
|
||||||
(lib.genAttrs
|
|
||||||
(map (peer: "${peer}_wg_pub") config.syscfg.net.wg.server.peers)
|
|
||||||
(_: { mode = "0444"; })
|
|
||||||
)
|
|
||||||
(lib.genAttrs
|
|
||||||
(map (peer: "${peer}_ssh_pub") ["iriy" "avalon" "valinor"])
|
|
||||||
(_: { mode = "0444"; })
|
|
||||||
)
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
{ inputs, lib, ... }:
|
{ inputs, lib, ... }:
|
||||||
let
|
let
|
||||||
|
systemsDir = ../../../systems;
|
||||||
|
systemNames = lib.attrNames (lib.filterAttrs
|
||||||
|
(name: type: type == "directory" && builtins.pathExists (systemsDir + "/${name}/cfg.nix"))
|
||||||
|
(builtins.readDir systemsDir));
|
||||||
|
|
||||||
userOpt = with lib; {
|
userOpt = with lib; {
|
||||||
username = mkOption { type = types.str; };
|
username = mkOption { type = types.str; };
|
||||||
|
pubssh = mkOption { type = types.str; default=""; };
|
||||||
wm = mkOption {
|
wm = mkOption {
|
||||||
type = types.enum [ "Wayland" "X11" "-" ];
|
type = types.enum [ "Wayland" "X11" "-" ];
|
||||||
default = "-";
|
default = "-";
|
||||||
@@ -42,6 +48,10 @@ let
|
|||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
};
|
};
|
||||||
|
pubkey = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
server = {
|
server = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
@@ -134,6 +144,9 @@ in with lib; {
|
|||||||
type = types.listOf (types.submodule { options = userOpt; });
|
type = types.listOf (types.submodule { options = userOpt; });
|
||||||
default = [ ];
|
default = [ ];
|
||||||
};
|
};
|
||||||
|
peers = mkOption {
|
||||||
|
default = map (name: import (systemsDir + "/${name}/cfg.nix")) systemNames;
|
||||||
|
};
|
||||||
server = mkOption {
|
server = mkOption {
|
||||||
type = types.oneOf [
|
type = types.oneOf [
|
||||||
(types.attrs)
|
(types.attrs)
|
||||||
|
|||||||
@@ -26,10 +26,13 @@
|
|||||||
cli = true;
|
cli = true;
|
||||||
virt = true;
|
virt = true;
|
||||||
};
|
};
|
||||||
wg = {
|
net = {
|
||||||
enable = true;
|
wg = {
|
||||||
ip4 = "10.10.1.2/32";
|
enable = true;
|
||||||
ip6 = "fd10:10:10::2/128";
|
ip4 = "10.10.1.2/32";
|
||||||
|
ip6 = "fd10:10:10::2/128";
|
||||||
|
pubkey = "QlvpTiK6s/lIha9vKmo+teSy2Nw52qWLYatYjxVan3U=";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
defaultUser = "sora";
|
defaultUser = "sora";
|
||||||
users = [{
|
users = [{
|
||||||
username = "sora";
|
username = "sora";
|
||||||
|
pubssh = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINrrUB0KBjeAKPVG2Bdcm4mI9AMab7y97SOCdEHGogYv sora@gateway";
|
||||||
wm = "-";
|
wm = "-";
|
||||||
git = {
|
git = {
|
||||||
email = "soraefir+git@helcel";
|
email = "soraefir+git@helcel";
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
ip4 = "10.10.1.1/32";
|
ip4 = "10.10.1.1/32";
|
||||||
ip6 = "fd10:10:10::1/128";
|
ip6 = "fd10:10:10::1/128";
|
||||||
|
pubkey = "NFBJvYXZC+bd62jhrKnM7/pugidWhgR6+C5qIiUiq3Q=";
|
||||||
server = {
|
server = {
|
||||||
enable = true;
|
enable = true;
|
||||||
peers = ["avalon" "iriy" "valinor"];
|
peers = ["avalon" "iriy" "valinor"];
|
||||||
|
|||||||
@@ -1,13 +1,28 @@
|
|||||||
{ config, inputs, ... }: {
|
{ config, lib, inputs, ... }:
|
||||||
|
let
|
||||||
|
allUsers = lib.concatMap (peer: if peer.syscfg ? users then peer.syscfg.users else []) config.syscfg.peers;
|
||||||
|
groupedUsers = lib.groupBy (u: u.username) allUsers;
|
||||||
|
allowedUsernames = map (u: u.username) config.syscfg.users;
|
||||||
|
activeUsers = lib.filterAttrs (name: _: lib.elem name allowedUsernames) groupedUsers;
|
||||||
|
in {
|
||||||
imports = [ ./hardware.nix ];
|
imports = [ ./hardware.nix ];
|
||||||
|
|
||||||
services.openssh.enable = true;
|
services.openssh = {
|
||||||
services.openssh.authorizedKeysFiles = [
|
enable = true;
|
||||||
config.sops.secrets."iriy_ssh_pub".path
|
ports = [ 422 ];
|
||||||
config.sops.secrets."valinor_ssh_pub".path
|
banner = "";
|
||||||
];
|
settings = {
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
PasswordAuthentication = false;
|
||||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0GpKd62XMlO410/iYkNG8MHdGGaeMG3Gmsf3Pv3u2BllUzR9Dpym1ZOz2lwo3iK0FimcQpOiJqSIahO59HJl8jQ9BoQrJMXH7l2kuq1T09cMNWGjlzowg0LWKWOzoBzOwcheyW68OJGgkSfvk9BdshkUYTLVBXjiI9jo/8Qkcv1WLJJvJmDBDwnbYDQpODXCEDQ/t3YVubb+ocLmh40sDUffJLWZQXN6OFW9N5XxnvY7K5x9ci9GU4Reei40K8yDw2Hgi0njzijRdzie3MJlKPPawJ2TATu9LsGuxfx8bJXVx+mNxP0lhO8dOOhP7p0ozTxlJJY9ZWaKgOz3SzYNCgJ1gH7NtTBtSruXd6pfmErUmuJEAeMD6+QF3yJ5tnVFNPoSHqjP+oL3CgSRpmuvn7ChSSI3J3UVhLux165VtwIL7UhosO2mCqmn0Yk2mSBkB/L4ZiWFmO3vYdagYNQX7xZHzCJ5my8vomiT+DUGb2h/o1NetKwIZJiFAuHxKt3k= sora@valinor"
|
PermitRootLogin = "prohibit-password";
|
||||||
];
|
};
|
||||||
|
};
|
||||||
|
users.users = lib.mapAttrs (name: userList: {
|
||||||
|
openssh.authorizedKeys.keys = lib.unique (
|
||||||
|
lib.concatMap (u: if u ? pubssh then [ u.pubssh ] else []) userList
|
||||||
|
);
|
||||||
|
}) activeUsers
|
||||||
|
// {
|
||||||
|
root = {openssh.authorizedKeys.keys = [];};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,26 @@
|
|||||||
{ config, lib, pkgs, modulesPath, ... }: {
|
{ config, lib, pkgs, modulesPath, ... }: {
|
||||||
|
imports = [ (modulesPath + "/profiles/qemu-guest.nix" ) ];
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
boot.loader.grub.device = "/dev/sda";
|
|
||||||
|
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||||
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
|
device = "/dev/sda";
|
||||||
|
efiSupport = true;
|
||||||
|
};
|
||||||
|
|
||||||
boot.initrd.availableKernelModules =
|
boot.initrd.availableKernelModules =
|
||||||
[ "ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi" ];
|
[ "ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi" ];
|
||||||
boot.initrd.kernelModules = [ "nvme" ];
|
boot.initrd.kernelModules = [ "nvme" ];
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/sda3";
|
device = "/dev/disk/by-uuid/25df457a-21d0-41ab-9de5-88ffc00e3469";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
device = "/dev/sda2";
|
device = "/dev/disk/by-uuid/F24E-74FA";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
options = [ "defaults" ];
|
options = [ "defaults" ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
defaultUser = "sora";
|
defaultUser = "sora";
|
||||||
users = [{
|
users = [{
|
||||||
username = "sora";
|
username = "sora";
|
||||||
|
pubssh = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGtotfQkclilrhEOzY3QUpOwYF+eOjHvqN6Of3NVg4x8NQLjx/X/gxC+GAllQxy9Zkz/N5wY0Fa4/6HoGheCRvWaN/nofz95VgtX8a1A/flrT8CGdBfRqXlcd4OEXhpFcbEm9VRXmxSKnsD4zySZr/151S+1PlQr8pJ1yyzxsIQx+RNo9P4gzpoJgkfZ3JIqLWb6B4aXallAg9Ha1WX0lx24voWNgg9AQt6/lccfmeoWAzBGUNq5a/mH59O+UCIM2y19ksEweY6URHpk6Ss597zp+0j2NYg8MS4rToYUb0Y7giNNBdKAzqNd+Wp6gjqBthuDIOfsXM082O5IarPKPJNVbx/Xpf3m1hYtxfL+LhEkdoE94iue601WqTltC0btS63LeZuoAZYji/GG/D8U7V77Lh3MV5/hJm5sK6wM6r7fCoenehgiy49z00NqtgM33rWNrpL9eXNKb//5Lxe7U58jPyteWpsL8+fJFcs/2uh4D5zN3d/I+yLZ1OMgUN6LM= sora@iriy";
|
||||||
wm = "Wayland";
|
wm = "Wayland";
|
||||||
git = {
|
git = {
|
||||||
email = "soraefir+git@helcel";
|
email = "soraefir+git@helcel";
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
ip4 = "10.10.1.7/32";
|
ip4 = "10.10.1.7/32";
|
||||||
ip6 = "fd10:10:10::7/128";
|
ip6 = "fd10:10:10::7/128";
|
||||||
|
pubkey = "6d1bINFmH12ACAJLDOwfFIZgmNHV/FGGk0YJyDP50HQ=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,10 +2,6 @@
|
|||||||
imports = [ ./hardware.nix ../../modules/server ];
|
imports = [ ./hardware.nix ../../modules/server ];
|
||||||
|
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
services.openssh.authorizedKeysFiles = [
|
|
||||||
config.sops.secrets."iriy_ssh_pub".path
|
|
||||||
config.sops.secrets."valinor_ssh_pub".path
|
|
||||||
];
|
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0GpKd62XMlO410/iYkNG8MHdGGaeMG3Gmsf3Pv3u2BllUzR9Dpym1ZOz2lwo3iK0FimcQpOiJqSIahO59HJl8jQ9BoQrJMXH7l2kuq1T09cMNWGjlzowg0LWKWOzoBzOwcheyW68OJGgkSfvk9BdshkUYTLVBXjiI9jo/8Qkcv1WLJJvJmDBDwnbYDQpODXCEDQ/t3YVubb+ocLmh40sDUffJLWZQXN6OFW9N5XxnvY7K5x9ci9GU4Reei40K8yDw2Hgi0njzijRdzie3MJlKPPawJ2TATu9LsGuxfx8bJXVx+mNxP0lhO8dOOhP7p0ozTxlJJY9ZWaKgOz3SzYNCgJ1gH7NtTBtSruXd6pfmErUmuJEAeMD6+QF3yJ5tnVFNPoSHqjP+oL3CgSRpmuvn7ChSSI3J3UVhLux165VtwIL7UhosO2mCqmn0Yk2mSBkB/L4ZiWFmO3vYdagYNQX7xZHzCJ5my8vomiT+DUGb2h/o1NetKwIZJiFAuHxKt3k= sora@valinor"
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0GpKd62XMlO410/iYkNG8MHdGGaeMG3Gmsf3Pv3u2BllUzR9Dpym1ZOz2lwo3iK0FimcQpOiJqSIahO59HJl8jQ9BoQrJMXH7l2kuq1T09cMNWGjlzowg0LWKWOzoBzOwcheyW68OJGgkSfvk9BdshkUYTLVBXjiI9jo/8Qkcv1WLJJvJmDBDwnbYDQpODXCEDQ/t3YVubb+ocLmh40sDUffJLWZQXN6OFW9N5XxnvY7K5x9ci9GU4Reei40K8yDw2Hgi0njzijRdzie3MJlKPPawJ2TATu9LsGuxfx8bJXVx+mNxP0lhO8dOOhP7p0ozTxlJJY9ZWaKgOz3SzYNCgJ1gH7NtTBtSruXd6pfmErUmuJEAeMD6+QF3yJ5tnVFNPoSHqjP+oL3CgSRpmuvn7ChSSI3J3UVhLux165VtwIL7UhosO2mCqmn0Yk2mSBkB/L4ZiWFmO3vYdagYNQX7xZHzCJ5my8vomiT+DUGb2h/o1NetKwIZJiFAuHxKt3k= sora@valinor"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
defaultUser = "sora";
|
defaultUser = "sora";
|
||||||
users = [{
|
users = [{
|
||||||
username = "sora";
|
username = "sora";
|
||||||
|
pubssh = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCZibVYTvS4Dd+ZhGCpRpKfxs1fQeepNTzfzYk9I12Hyez25pQCeH+6ArrVhf6yX5Na1ffkvqTrNIDYJ1V2GHhemX0ruYp2B3xt229JszI7DeRC7YeG7v5uvsfTgicADCstGPSNorKXuNnHuBebSHpmWWbuKrYZdmcA/Az7H8uwF5+VQrnyASgZgwGV94MHinFVWsisB7o6iq4qxqpsUdtuZGbU0stDE5f9DLMDYuUxtx+jASRt+X60Bzjv3OFjU/b/YYzojTtuujkYXunNNTceCB4DTue5YMKQOlmd/IezL5nPAK9IsonPqojX9LPk2RvTCr4qalQ6AD92nq+xMW6FY1uJaKT81S8TvZcaqTm4FhEDkChuFq77biSUDhQkpcdNVOjUn5OtKpYl+0VkCaAx/8uyoylBacrn1XXLLg+gjwGCFHa2eeNu/BKIUa+5EK/FRwLpnEoPDkAHQ95JXQewChcUKG8A+Bz29XRKr9J64kbbGmwa+yjlVTPLSE6ZZE= sora@valinor";
|
||||||
wm = "Wayland";
|
wm = "Wayland";
|
||||||
git = {
|
git = {
|
||||||
email = "soraefir+git@helcel";
|
email = "soraefir+git@helcel";
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
ip4 = "10.10.1.5/32";
|
ip4 = "10.10.1.5/32";
|
||||||
ip6 = "fd10:10:10::5/128";
|
ip6 = "fd10:10:10::5/128";
|
||||||
|
pubkey = "EUYd/dMdGcbxiWJXHhQhCXV00cr87pxiW1HExwCTGg0=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user