masha_spb писал:
сравнивай напрямую с $(date +%s)
Так и сделаем, только с одной поправкой, иначе мониторинг превратится в будильник.
Handshake в
WireGuard делается под трафик. Туннель поднят, но никто через него не ходит —
handshake честно стареет, и проверка «старше трёх минут» начнёт орать каждую ночь ровно о том, что все спят. polina_smena к четырём утра уже мечтает, чтоб телеграм замолчал — не добавляй ей поводов)
Поэтому порядок такой: сначала пинг через туннель (он заодно сам новый
handshake инициирует), а упал — тогда смотрим timestamp и шлём тикет.
/usr/local/sbin/wg-watchdog.sh:
#!/bin/bash
PEER_IP=10.13.13.1
if ping -c 2 -W 3 -I wg0 "$PEER_IP" >/dev/null 2>&1; then
exit 0
fi
LAST=$(wg show wg0 latest-handshakes | awk 'NR==1{print $2}')
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
-d chat_id="${TG_CHAT}" \
--data-urlencode "text=wg0 молчит: пинг до ${PEER_IP} не прошёл, последний handshake $(date -d @"${LAST:-0}" '+%H:%M %d.%m')" >/dev/null
wg-watchdog.service:
[Unit]
Description=WireGuard watchdog
[Service]
Type=oneshot
EnvironmentFile=/etc/wg-watchdog.env
ExecStart=/usr/local/sbin/wg-watchdog.sh
и сам будильник, wg-watchdog.timer:
[Unit]
Description=WireGuard watchdog timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=2min
Unit=wg-watchdog.service
[Install]
WantedBy=timers.target
Дальше:
systemctl enable --now wg-watchdog.timer, и
systemctl list-timers покажет, когда следующий запуск. Токен с chat id — в /etc/wg-watchdog.
env с
chmod 600, почему не в самом юните — выше уже писала.
Две оговорки. Если в тикете увидишь 1970 год — это не баг формата, это
handshake не было ни разу, туннель мёртв прямо с сотворения мира. И
awk 'NR==1' берёт первого пира из вывода: если их на wg0 несколько, нужен цикл, но у kirill_nsk, судя по «с него и пишу», пир один.
Ленивый вариант без пинга: PersistentKeepalive=25 в [Peer] —
handshake будет всегда свежим, и можно проверять голый timestamp. Цена — пакет каждые 25 секунд круглосуточно. За
NAT это оправдано, просто так — трата на ровном месте.
void_3am, вот и вся теология: сначала date -d, потом
systemctl. Человек спросил про сотворение мира — получил и дату, и будильник)