tunnel: kssh-tun применяет конфиг через systemctl restart, а не wg syncconf

`wg syncconf "$IF" <(wg-quick strip "$IF")` падал тихо в окружении, где
process substitution не сработал, и файл /etc/wireguard/wg0.conf
обновлялся, а ядерное состояние wg-интерфейса оставалось старым.
В итоге peer добавлен в .conf, но `wg show` его не видит и трафика нет.

Теперь после регенерации конфига делаем `systemctl restart wg-quick@$IF`.
Это пересоздаёт интерфейс целиком — дороже, чем syncconf, но гарантирует
применение. Если systemd-юнит не enabled, остаётся fallback на syncconf
через временный файл (без process substitution).
This commit is contained in:
Андрей Бобырев
2026-04-26 12:15:34 +03:00
parent 677fcc604a
commit f9407fdae4

View File

@@ -42,8 +42,19 @@ EOF
fi fi
install -m 600 "$TMP" "$CONF" install -m 600 "$TMP" "$CONF"
rm -f "$TMP" rm -f "$TMP"
if ip link show "$WG_IF" >/dev/null 2>&1; then # Самый надёжный способ применить новый конфиг: рестарт wg-quick@WG_IF.
wg syncconf "$WG_IF" <(wg-quick strip "$WG_IF") 2>/dev/null || true # `wg syncconf` через process substitution падал молча на части систем.
if command -v systemctl >/dev/null 2>&1 && \
systemctl is-enabled "wg-quick@$WG_IF" >/dev/null 2>&1; then
systemctl restart "wg-quick@$WG_IF" || \
echo "warning: systemctl restart wg-quick@$WG_IF не удался" >&2
elif ip link show "$WG_IF" >/dev/null 2>&1; then
TMP_STRIP="$(mktemp)"
if wg-quick strip "$WG_IF" > "$TMP_STRIP" 2>/dev/null; then
wg syncconf "$WG_IF" "$TMP_STRIP" || \
echo "warning: wg syncconf не удался — перезапустите wg-quick@$WG_IF" >&2
fi
rm -f "$TMP_STRIP"
fi fi
} }