inherit (config.networking) domain;
in
{
+# TODO: nsupdate in the initrd
systemd.services.nsupdate = {
after = [
"network-online.target"
Type = "simple";
ExecStart = pkgs.writeShellScript "nsupdate" ''
set -eux
- publicIPv4=$(${pkgs.curl}/bin/curl -s4 https://whoami.sourcephile.fr/addr || true)
+ publicIPv4=$(${pkgs.curl}/bin/curl -s4 https://whoami.sourcephile.fr/addr ||
+ ${pkgs.curl}/bin/curl -s4L https://icanhazip.com || true)
publicIPv6=$(${pkgs.curl}/bin/curl -s6L https://icanhazip.com || true)
privateIPv4=$(${pkgs.miniupnpc}/bin/upnpc -s | sed -ne 's/^Local LAN ip address : //p')
${pkgs.knot-dns}/bin/knsupdate -k ${gnupg.secrets."knot/tsig/${domain}/bureau1.key".path} <<EOF
User = users."nsupdate".name;
};
};
-users.users."nsupdate".isSystemUser = true;
-users.users."nsupdate".extraGroups = [ groups."keys".name ];
+users.users."nsupdate" = {
+ isSystemUser = true;
+ group = groups."nsupdate".name;
+};
+users.groups."nsupdate" = {};
+users.groups."keys".members = [users."nsupdate".name];
security.gnupg.secrets."knot/tsig/${domain}/bureau1.key" = {
user = users."nsupdate".name;
};
+networking.nftables.ruleset =
+ lib.optionalString (config.services.upnpc.redirections != []) ''
+ # Create a rule for accepting any SSDP packets going to a remembered port.
+ add rule inet filter net2fw udp dport @ssdp_out \
+ counter accept comment "SSDP answer"
+ add rule inet filter fw2net \
+ skuid {${users.upnpc.name},${users.nsupdate.name}} \
+ tcp dport 1900 \
+ counter accept \
+ comment "SSDP automatic opening"
+ add rule inet filter fw2net \
+ skuid {${users.upnpc.name},${users.nsupdate.name}} \
+ ip daddr 239.255.255.250 udp dport 1900 \
+ set add udp sport @ssdp_out \
+ comment "SSDP automatic opening"
+ add rule inet filter fw2net \
+ skuid {${users.upnpc.name},${users.nsupdate.name}} \
+ ip daddr 239.255.255.250 udp dport 1900 \
+ counter accept comment "SSDP"
+ '' + lib.optionalString config.networking.enableIPv6 ''
+ add rule inet filter fw2net \
+ skuid {${users.upnpc.name},${users.nsupdate.name}} \
+ ip6 daddr {FF02::C, FF05::C, FF08::C, FF0E::C} udp dport 1900 \
+ set add udp sport @ssdp_out comment "SSDP automatic opening"
+ add rule inet filter fw2net \
+ skuid {${users.upnpc.name},${users.nsupdate.name}} \
+ ip6 daddr {FF02::C, FF05::C, FF08::C, FF0E::C} udp dport 1900 \
+ counter accept comment "SSDP"
+ '';
}