/* Name: https://matrix.fandom.com/wiki/Agent_Jones Type: Physical Hardware: PowerEdge r210 From: 2011 (?) Role: Firewall Notes: Used to have Agent Smith as a partner but it died (Ironically) */ { pkgs, lib, nodes, ... }: let # name of the server, sets teh hostname and record for it name = "agentjones"; ip_pub = "193.1.99.72"; ip_priv = "172.20.20.1"; # hostname = "${name}.skynet.ie"; hostname = ip_pub; in { imports = [ # applications for this particular server ../applications/firewall.nix ../applications/dns.nix ./hardware/agentjones.nix ]; deployment = { targetHost = hostname; targetPort = 22; targetUser = "root"; }; skynet_dns.records = { external = [ "${name} A ${ip_pub}" ]; cname = []; }; networking.hostName = name; # this has to be defined for any physical servers # vms are defined by teh vm host networking.interfaces = { eno1 = { ipv4.routes = [ # { # address = "193.1.99.72"; # prefixLength = 26; # via = "193.1.99.65"; # } ]; }; eno2 = { useDHCP = false; ipv4.addresses = [ { address = "193.1.99.72"; prefixLength = 26; } #{ # address = "172.20.20.1"; # prefixLength = 24; #} ]; }; }; # this server is teh firewall skynet_firewall = { # always good to know oneself own = { ip = ip_pub; ports = { tcp = [ # ssh in 22 ]; udp = []; }; }; enable = true; # gonna have to get all the forward = builtins.concatLists ( # using this function "(key: value: value.config.skynet_firewall.forward)" turn the values ointo a list lib.attrsets.mapAttrsToList (key: value: # make sure that anything running this firewall dosent count (recursion otherewise) # firewall may want to open ports in itself but can deal with that later if builtins.hasAttr "skynet_firewall" value.config then ( if value.config.skynet_firewall.enable then [] else value.config.skynet_firewall.forward ) else [] ) nodes ); }; }