bgpwtf/machines: init edge01.waw

This configures our WAW edge router using NixOS. This replaces our
previous Ubuntu installation.

Change-Id: Ibd72bde66ec413164401da407c5b268ad83fd3af
diff --git a/bgpwtf/machines/modules/rsh-unbound.nix b/bgpwtf/machines/modules/rsh-unbound.nix
new file mode 100644
index 0000000..20442fc
--- /dev/null
+++ b/bgpwtf/machines/modules/rsh-unbound.nix
@@ -0,0 +1,70 @@
+# Run service that spits out an unbound-compatible blocklist of websites,
+# as mandated by polish telecommunications law.
+#
+# https://sip.lex.pl/akty-prawne/dzu-dziennik-ustaw/gry-hazardowe-17581037/art-15-f
+# Dz.U.2019.847 t.j.
+# Art. 15f. [Rejestr domen służących do oferowania gier hazardowych niezgodnie z ustawą]
+# 5.  Przedsiębiorca telekomunikacyjny świadczący usługi dostępu do sieci
+#     Internet jest obowiązany do:
+#  1) nieodpłatnego uniemożliwienia dostępu do stron internetowych
+#     wykorzystujących nazwy domen internetowych wpisanych do Rejestru
+#     poprzez ich usunięcie z systemów teleinformatycznych przedsiębiorców
+#     telekomunikacyjnych, służących do zamiany nazw domen internetowych na
+#     adresy IP, nie później niż w ciągu 48 godzin od dokonania wpisu do
+#     Rejestru;
+#  2) nieodpłatnego przekierowania połączeń odwołujących się do nazw domen
+#     internetowych wpisanych do Rejestru do strony internetowej prowadzonej
+#     przez ministra właściwego do spraw finansów publicznych, zawierającej
+#     komunikat, skierowany do odbiorców usługi dostępu do Internetu
+#     obejmujący w szczególności informacje o lokalizacji Rejestru, wpisaniu
+#     szukanej nazwy domeny internetowej do tego Rejestru, listę podmiotów
+#     legalnie oferujących gry hazardowe na terytorium Rzeczypospolitej
+#     Polskiej, a także powiadomienie o grożącej odpowiedzialności
+#     karno-skarbowej uczestnika gier urządzanych wbrew przepisom ustawy;
+#  3) nieodpłatnego umożliwienia dostępu do stron internetowych
+#     wykorzystujących nazwy domen wykreślonych z Rejestru, nie później niż w
+#     ciągu 48 godzin od wykreślenia nazwy domeny internetowej z Rejestru.
+
+{ config, pkgs, lib, ...  }:
+
+with lib;
+
+let
+  rshUnbound = pkgs.buildGoModule {
+    pname = "rsh-unbound";
+    version = "20200926";
+    src = pkgs.fetchFromGitHub {
+      owner = "q3k";
+      repo = "rsh-unbound";
+      rev = "3d98c754adadddfae59387d033aef531f47dee5d";
+      sha256 = "1ia33893m1dknw36vss97limlb1d28z5nkrkw6b4mp1igdgqsfcz";
+    };
+
+    vendorSha256 = "1w94g2dwhf47jmds95frb26ypjmis5zhyy85rmd124v0nz3axzhf";
+  };
+
+  cfg = config.hscloud.rsh;
+
+in {
+  options.hscloud.rsh = with types; {
+    enable = mkOption {
+      type = bool;
+      default = false;
+      description = "Enable the RSH-Unboudn service.";
+    };
+    out = mkOption {
+      type = str;
+      description = "Output file for generated unbound config.";
+    };
+  };
+
+  config.systemd.services.rsh = mkIf cfg.enable {
+    wantedBy = [ "multi-user.target" ];
+    serviceConfig = {
+      Type = "simple";
+      ExecStart = "${rshUnbound}/bin/rsh-unbound -output ${cfg.out} -register_endpoint https://hazard.mf.gov.pl/api/Register";
+      Restart = "always";
+      RestartSec = "60";
+    };
+  };
+}