{ config, pkgs, ... }: let meta = config.qois.meta; getNetV4Ip = net: { address = net.hosts.cyprianspitz.v4.ip; prefixLength = net.v4.prefixLength; }; in { networking.hostName = meta.hosts.cyprianspitz.hostName; networking.useDHCP = false; networking.interfaces.enp0s31f6.ipv4.addresses = [ (getNetV4Ip meta.network.physical.plessur-lan) ]; networking.interfaces.enp2s0.useDHCP = true; # Virtualization networking.interfaces.vms-nat.useDHCP = false; networking.interfaces.vms-nat.ipv4.addresses = [ (getNetV4Ip meta.network.virtual.cyprianspitz-vms-nat) ]; networking.bridges.vms-nat.interfaces = [ ]; networking.nat = { enable = true; internalInterfaces = [ "vms-nat" ]; internalIPs = with meta.network.virtual.cyprianspitz-vms-nat.v4; [ "${id}/${builtins.toString prefixLength}" ]; externalInterface = "enp0s31f6"; }; services.dnsmasq = let netConfig = meta.network.virtual.cyprianspitz-vms-nat; in { enable = true; resolveLocalQueries = true; settings = { interface = "vms-nat"; bind-interfaces = true; domain-needed = true; domain = netConfig.domain; dhcp-range = [ "10.248.0.2,10.248.0.253" ]; dhcp-option = [ "option:router,${netConfig.hosts.cyprianspitz.v4.ip}" "option:domain-search,${netConfig.domain}" ]; dhcp-authoritative = true; }; }; systemd.services.dnsmasq.bindsTo = [ "network-addresses-vms-nat.service" ]; networking.firewall.interfaces.vms-nat = { allowedUDPPorts = [ 53 67 ]; allowedTCPPorts = [ 53 ]; }; # Boot boot.initrd.network.udhcpc.enable = true; services.qois.luks-ssh = { enable = true; interface = "eth0"; sshPort = 2222; sshHostKey = "/secrets/system/initrd-ssh-key"; # TODO Solve sops dependency porblem: config.sops.secrets."system/initrd-ssh-key".path; }; qois.backplane-net.enable = true; # Configure this node to be used as an vpn exit node qois.vpn-exit-node.enable = true; }