@@ -1,21 +1,23 @@
 | 
			
		||||
{ config, pkgs, lib, ... }:
 | 
			
		||||
{ config, pkgs, lib, network, ... }:
 | 
			
		||||
{
 | 
			
		||||
  mailserver = with lib; rec {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    fqdn = "mail.weirdnatto.in";
 | 
			
		||||
    sendingFqdn = fqdn;
 | 
			
		||||
    domains = singleton "weirdnatto.in";
 | 
			
		||||
    certificateDomains = singleton "mail.weirdnatto.in";
 | 
			
		||||
    certificateScheme = 3;
 | 
			
		||||
    loginAccounts = {
 | 
			
		||||
      "natto@weirdnatto.in" = {
 | 
			
		||||
        hashedPasswordFile = "/var/secrets/natto@weirdnatto.in.key";
 | 
			
		||||
      };
 | 
			
		||||
      "masti@weirdnatto.in" = {
 | 
			
		||||
        hashedPasswordFile = "/var/secrets/masti@weirdnatto.in.key";
 | 
			
		||||
  mailserver =
 | 
			
		||||
    let domain = network.addresses.domain.natto; in
 | 
			
		||||
    rec {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      fqdn = "mail.${domain}";
 | 
			
		||||
      sendingFqdn = fqdn;
 | 
			
		||||
      domains = [ domain ];
 | 
			
		||||
      certificateDomains = [ "mail.${domain}" ];
 | 
			
		||||
      certificateScheme = 3;
 | 
			
		||||
      loginAccounts = {
 | 
			
		||||
        "natto@${domain}" = {
 | 
			
		||||
          hashedPasswordFile = "/var/secrets/natto@${domain}.key";
 | 
			
		||||
        };
 | 
			
		||||
        "masti@${domain}" = {
 | 
			
		||||
          hashedPasswordFile = "/var/secrets/masti@${domain}.key";
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      enablePop3 = false;
 | 
			
		||||
      enablePop3Ssl = false;
 | 
			
		||||
    };
 | 
			
		||||
    enablePop3 = false;
 | 
			
		||||
    enablePop3Ssl = false;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
{ lib, config, pkgs, ... }:
 | 
			
		||||
{ lib, config, network, pkgs, ... }:
 | 
			
		||||
{
 | 
			
		||||
  networking = {
 | 
			
		||||
    useDHCP = false;
 | 
			
		||||
@@ -7,21 +7,8 @@
 | 
			
		||||
      {
 | 
			
		||||
        interfaces = {
 | 
			
		||||
          ens3 = {
 | 
			
		||||
            allowedTCPPorts = [
 | 
			
		||||
              80
 | 
			
		||||
              81
 | 
			
		||||
              443
 | 
			
		||||
              444
 | 
			
		||||
              993
 | 
			
		||||
              465
 | 
			
		||||
              143
 | 
			
		||||
              25
 | 
			
		||||
              22001
 | 
			
		||||
              22002
 | 
			
		||||
              9898
 | 
			
		||||
              8999
 | 
			
		||||
              99
 | 
			
		||||
            ] ++ (map (x: x.sourcePort) config.networking.nat.forwardPorts);
 | 
			
		||||
            allowedTCPPorts = [ 80 81 443 444 993 465 143 25 22001 22002 9898 8999 99 5201 4444 ]
 | 
			
		||||
              ++ (map (x: x.sourcePort) config.networking.nat.forwardPorts);
 | 
			
		||||
            allowedUDPPorts = [ 17840 ];
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
@@ -40,46 +27,46 @@
 | 
			
		||||
        useDHCP = true;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    nat = {
 | 
			
		||||
    nat = with network.addresses.wireguard.ips; {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      externalInterface = "ens3";
 | 
			
		||||
      internalInterfaces = [ "wg0" ];
 | 
			
		||||
      forwardPorts = [
 | 
			
		||||
        {
 | 
			
		||||
          destination = "10.55.0.2:2002";
 | 
			
		||||
          destination = "${marisa}:2002";
 | 
			
		||||
          sourcePort = 22;
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          destination = "10.55.0.2:22";
 | 
			
		||||
          sourcePort = 23;
 | 
			
		||||
          destination = "${satori}:6600";
 | 
			
		||||
          sourcePort = 6600;
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          destination = "10.55.0.3:6600";
 | 
			
		||||
          sourcePort = 6600;
 | 
			
		||||
          destination = "${satori}:25565";
 | 
			
		||||
          sourcePort = 4444;
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
    wireguard.interfaces = {
 | 
			
		||||
    wireguard.interfaces = with network.addresses.wireguard; {
 | 
			
		||||
      wg0 = {
 | 
			
		||||
        ips = [ "10.55.0.1/24" ];
 | 
			
		||||
        ips = [ ips.remilia ];
 | 
			
		||||
        listenPort = 17840;
 | 
			
		||||
        postSetup = ''
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -A FORWARD -i wg0 -j ACCEPT
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.55.0.0/24 -o ${config.networking.nat.externalInterface} -j MASQUERADE
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s ${ipsWithPrefixLength} -o ${config.networking.nat.externalInterface} -j MASQUERADE
 | 
			
		||||
        '';
 | 
			
		||||
        postShutdown = ''
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -D FORWARD -i wg0 -j ACCEPT
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.55.0.0/24 -o ${config.networking.nat.externalInterface} -j MASQUERADE
 | 
			
		||||
          ${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s ${ipsWithPrefixLength} -o ${config.networking.nat.externalInterface} -j MASQUERADE
 | 
			
		||||
        '';
 | 
			
		||||
        privateKeyFile = "/var/wg";
 | 
			
		||||
        peers = [
 | 
			
		||||
          {
 | 
			
		||||
            publicKey = "m9SSpkj+r2QY4YEUMEoTkbOI/L7C39Kh6m45QZ5mkw4=";
 | 
			
		||||
            allowedIPs = [ "10.55.0.2/32" ];
 | 
			
		||||
            allowedIPs = [ ips.marisa ];
 | 
			
		||||
          }
 | 
			
		||||
          {
 | 
			
		||||
            publicKey = "SqskEH7hz7Gv9ZS+FYLRFgKZyJCFbBFCyuvzBYnbfVU=";
 | 
			
		||||
            allowedIPs = [ "10.55.0.3/32" ];
 | 
			
		||||
            allowedIPs = [ ips.satori ];
 | 
			
		||||
          }
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,7 @@
 | 
			
		||||
{ config, pkgs, lib, ... }:
 | 
			
		||||
{ config, pkgs, lib, network, ... }:
 | 
			
		||||
let
 | 
			
		||||
  domain = network.addresses.domain.natto;
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  services = {
 | 
			
		||||
    openssh = {
 | 
			
		||||
@@ -20,7 +23,7 @@
 | 
			
		||||
      appendHttpConfig = ''
 | 
			
		||||
        map $uri $expires {
 | 
			
		||||
          default off;
 | 
			
		||||
          ~\.(jpg|jpeg|png|gif|ico|css|js|pdf)$ 30d;
 | 
			
		||||
          ~\.(jpg|jpeg|png|gif|ico|css|js)$ 30d;
 | 
			
		||||
        }
 | 
			
		||||
      '';
 | 
			
		||||
      virtualHosts =
 | 
			
		||||
@@ -37,33 +40,34 @@
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        in
 | 
			
		||||
        {
 | 
			
		||||
          "weirdnatto.in" = {
 | 
			
		||||
        with network.addresses.wireguard.ips; {
 | 
			
		||||
          "${domain}" = {
 | 
			
		||||
            addSSL = true;
 | 
			
		||||
            enableACME = true;
 | 
			
		||||
            locations."/" = {
 | 
			
		||||
              root = "/var/lib/site";
 | 
			
		||||
              index = "index.html";
 | 
			
		||||
            };
 | 
			
		||||
            serverAliases = [ "www.weirdnatto.in" ];
 | 
			
		||||
            serverAliases = [ "www.${domain}" ];
 | 
			
		||||
          };
 | 
			
		||||
          "vault.weirdnatto.in" = genericHttpRProxy { addr = "https://10.55.0.2:8800"; };
 | 
			
		||||
          "consul.weirdnatto.in" = genericHttpRProxy { addr = "http://10.55.0.2:8500"; };
 | 
			
		||||
          "f.weirdnatto.in" = genericHttpRProxy { addr = "http://10.55.0.2:8888"; };
 | 
			
		||||
          "radio.weirdnatto.in" = genericHttpRProxy { addr = "http://10.55.0.3:8001"; };
 | 
			
		||||
          "git.weirdnatto.in" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://10.55.0.2:5001";
 | 
			
		||||
          "znc.weirdnatto.in" = genericHttpRProxy { addr = "https://${marisa}:9898"; };
 | 
			
		||||
          "vault.${domain}" = genericHttpRProxy { addr = "https://${marisa}:8800"; };
 | 
			
		||||
          "consul.${domain}" = genericHttpRProxy { addr = "http://${marisa}:8500"; };
 | 
			
		||||
          "f.${domain}" = genericHttpRProxy { addr = "http://${marisa}:8888"; };
 | 
			
		||||
          "radio.${domain}" = genericHttpRProxy { addr = "http://${satori}:8001"; };
 | 
			
		||||
          "git.${domain}" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://${marisa}:5001";
 | 
			
		||||
            conf = "client_max_body_size 64M;";
 | 
			
		||||
          };
 | 
			
		||||
          "nomad.weirdnatto.in" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://10.55.0.2:4646";
 | 
			
		||||
          "nomad.${domain}" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://${marisa}:4646";
 | 
			
		||||
            conf = ''
 | 
			
		||||
              proxy_buffering off;
 | 
			
		||||
              proxy_read_timeout 310s;
 | 
			
		||||
            '';
 | 
			
		||||
          };
 | 
			
		||||
          "alo.weirdnatto.in" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://10.55.0.2:4004";
 | 
			
		||||
          "alo.${domain}" = genericHttpRProxy {
 | 
			
		||||
            addr = "http://${marisa}:4004";
 | 
			
		||||
            conf = ''
 | 
			
		||||
              proxy_set_header X-Real-IP $remote_addr;
 | 
			
		||||
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
			
		||||
@@ -82,9 +86,9 @@
 | 
			
		||||
  security.acme = {
 | 
			
		||||
    acceptTerms = true;
 | 
			
		||||
    certs = {
 | 
			
		||||
      "weirdnatto.in".extraDomainNames = lib.singleton "www.weirdnatto.in";
 | 
			
		||||
      "${domain}".extraDomainNames = lib.singleton "www.${domain}";
 | 
			
		||||
    } //
 | 
			
		||||
    lib.mapAttrs (n: _: { email = "natto@weirdnatto.in"; })
 | 
			
		||||
    lib.mapAttrs (n: _: { email = "natto@${domain}"; })
 | 
			
		||||
      (lib.filterAttrs (_: v: v.enableACME) config.services.nginx.virtualHosts);
 | 
			
		||||
  };
 | 
			
		||||
  security.pki.certificateFiles = [ ../../cert.pem ];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user