nixos-config/modules/wireguard.nix

46 lines
1.9 KiB
Nix
Raw Normal View History

2019-08-27 23:41:02 +04:00
{ config, pkgs, lib, ... }:
let
cfg = config.secrets.wireguard.${config.device};
in {
2019-10-10 19:37:45 +04:00
config = lib.mkIf cfg.enable {
boot.extraModulePackages = [ config.boot.kernelPackages.wireguard ];
environment.systemPackages = [ pkgs.wireguard pkgs.wireguard-tools ];
networking.firewall.checkReversePath = false;
systemd.services."wg-quick-wg0" = {
description = "wg-quick WireGuard Tunnel - wg0";
requires = [ "network-online.target" ];
after = [ "network.target" "network-online.target" ];
wantedBy = [ "multi-user.target" ];
environment.DEVICE = "wg0";
2019-10-23 19:31:32 +04:00
path = [ pkgs.kmod pkgs.wireguard-tools pkgs.iptables pkgs.iproute ];
2019-10-10 19:37:45 +04:00
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
script = ''
${lib.strings.optionalString (!config.boot.isContainer) "modprobe wireguard"}
wg-quick up /root/wg0.conf
'';
postStart = lib.mkIf cfg.killswitch ''
2019-11-23 22:30:04 +04:00
iptables -I OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
# Allow IPv4 private ip addresses
iptables -I OUTPUT -s 192.168.0.0/16 -j ACCEPT && iptables -I OUTPUT -s 172.16.0.0/12 -j ACCEPT
2019-10-10 19:37:45 +04:00
'';
preStop = ''
2019-11-23 22:30:04 +04:00
${lib.strings.optionalString (cfg.killswitch) "iptables -D OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT"}
# Delete rule thats allow IPv4 private ip addresses
${lib.strings.optionalString (cfg.killswitch) "iptables -D OUTPUT -s 192.168.0.0/16 && iptables -D OUTPUT -s 172.16.0.0/12"}
2019-10-10 19:37:45 +04:00
wg-quick down /root/wg0.conf
'';
2019-10-23 19:31:32 +04:00
postStop = ''
ip link delete wg0
'';
2019-10-10 19:37:45 +04:00
};
2019-08-27 23:41:02 +04:00
};
}