profiles/wg-clerie: Convert systemd timer into a service with sleep
This commit is contained in:
@@ -180,45 +180,16 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."wg-clerie-endpoint-refresh" = {
|
systemd.services."wg-clerie-endpoint-refresh" = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "simple";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = 5;
|
||||||
};
|
};
|
||||||
|
|
||||||
path = [ pkgs.wireguard-tools pkgs.iproute2 ];
|
path = [ pkgs.wireguard-tools pkgs.iproute2 ];
|
||||||
|
|
||||||
script = ''
|
script = builtins.readFile ./wg-clerie-endpoint-refresh.sh;
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Don't do anything as long as interface is not configured
|
|
||||||
if ! wg show wg-clerie endpoints > /dev/null; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
endpoint=""
|
|
||||||
|
|
||||||
if ip route get 2a01:4f8:c0c:15f1::1 ipproto udp dport 51820 &>/dev/null; then
|
|
||||||
endpoint="[2a01:4f8:c0c:15f1::1]:51820"
|
|
||||||
else
|
|
||||||
endpoint="78.47.183.82:51820"
|
|
||||||
fi
|
|
||||||
|
|
||||||
wg set wg-clerie peer "2p1Jqs3bkXbXHFWE6vp1yxHIFoUaZQEARS2nJzbkuBA=" endpoint "''${endpoint}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
requires = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.timers."wg-clerie-endpoint-refresh" = {
|
|
||||||
wantedBy = [ "timers.target" ];
|
|
||||||
|
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "*-*-* *:*:0/5";
|
|
||||||
RandomizedDelaySec = "5s";
|
|
||||||
};
|
|
||||||
|
|
||||||
requires = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.wireguard-tools ];
|
environment.systemPackages = [ pkgs.wireguard-tools ];
|
||||||
|
31
profiles/wg-clerie/wg-clerie-endpoint-refresh.sh
Executable file
31
profiles/wg-clerie/wg-clerie-endpoint-refresh.sh
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
prev_endpoint=""
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
if ! wg show wg-clerie endpoints &>/dev/null; then
|
||||||
|
if [[ "${prev_endpoint}" != "" ]]; then
|
||||||
|
echo "Interface wg-clerie unavailable, doing nothing"
|
||||||
|
prev_endpoint=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ip route get 2a01:4f8:c0c:15f1::1 ipproto udp dport 51820 &>/dev/null; then
|
||||||
|
new_endpoint="[2a01:4f8:c0c:15f1::1]:51820"
|
||||||
|
else
|
||||||
|
new_endpoint="78.47.183.82:51820"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${new_endpoint}" != "${prev_endpoint}" ]]; then
|
||||||
|
echo "Switching endpoint for wg-clerie to ${new_endpoint}"
|
||||||
|
wg set wg-clerie peer "2p1Jqs3bkXbXHFWE6vp1yxHIFoUaZQEARS2nJzbkuBA=" endpoint "${new_endpoint}"
|
||||||
|
prev_endpoint="${new_endpoint}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
done
|
Reference in New Issue
Block a user