summaryrefslogtreecommitdiffstats
path: root/makefu/2configs/wireguard/wiregrill.nix
diff options
context:
space:
mode:
authorlassulus <lassulus@lassul.us>2019-08-13 18:55:08 +0200
committerlassulus <lassulus@lassul.us>2019-08-13 18:55:08 +0200
commit3047fea88d2379011685be4e57a5b379778423c7 (patch)
tree23ad61badb3794cabf4a9cc9de89c3465cfec737 /makefu/2configs/wireguard/wiregrill.nix
parent0699b41b05a1f9cd133c15c3aadf70c3a45170f6 (diff)
parent124b1d7639c404e5a58a9aef0f0bee1424f54a45 (diff)
Merge remote-tracking branch 'gum/master'
Diffstat (limited to 'makefu/2configs/wireguard/wiregrill.nix')
-rw-r--r--makefu/2configs/wireguard/wiregrill.nix46
1 files changed, 46 insertions, 0 deletions
diff --git a/makefu/2configs/wireguard/wiregrill.nix b/makefu/2configs/wireguard/wiregrill.nix
new file mode 100644
index 000000000..082090755
--- /dev/null
+++ b/makefu/2configs/wireguard/wiregrill.nix
@@ -0,0 +1,46 @@
+with import <stockholm/lib>;
+{ config, pkgs, ... }: let
+
+ self = config.krebs.build.host.nets.wiregrill;
+ isRouter = !isNull self.via; # via "internet" is not set
+ ext-if = config.makefu.server.primary-itf;
+
+in mkIf (hasAttr "wiregrill" config.krebs.build.host.nets) {
+ #hack for modprobe inside containers
+ systemd.services."wireguard-wiregrill".path = mkIf config.boot.isContainer (mkBefore [
+ (pkgs.writeDashBin "modprobe" ":")
+ ]);
+
+ boot.kernel.sysctl = mkIf isRouter {
+ "net.ipv6.conf.all.forwarding" = 1;
+ };
+
+ networking.firewall = {
+ allowedUDPPorts = [ self.wireguard.port ];
+ extraCommands = ''
+ iptables -A FORWARD -i wiregrill -o wiregrill -j ACCEPT
+ '';
+ };
+
+ networking.wireguard.interfaces.wiregrill = {
+ ips =
+ (optional (!isNull self.ip4) self.ip4.addr) ++
+ (optional (!isNull self.ip6) self.ip6.addr);
+ listenPort = self.wireguard.port;
+ privateKeyFile = (toString <secrets>) + "/wiregrill.key";
+ allowedIPsAsRoutes = true;
+ peers = mapAttrsToList
+ (_: host: {
+ allowedIPs = if isRouter then
+ (optional (!isNull host.nets.wiregrill.ip4) host.nets.wiregrill.ip4.addr) ++
+ (optional (!isNull host.nets.wiregrill.ip6) host.nets.wiregrill.ip6.addr)
+ else
+ host.nets.wiregrill.wireguard.subnets
+ ;
+ endpoint = mkIf (!isNull host.nets.wiregrill.via) (host.nets.wiregrill.via.ip4.addr + ":${toString host.nets.wiregrill.wireguard.port}");
+ persistentKeepalive = mkIf (!isNull host.nets.wiregrill.via) 61;
+ publicKey = (replaceStrings ["\n"] [""] host.nets.wiregrill.wireguard.pubkey);
+ })
+ (filterAttrs (_: h: hasAttr "wiregrill" h.nets) config.krebs.hosts);
+ };
+}