Infra: Added robust DuckDNS updater and DNS monitoring sidecar container

This commit is contained in:
2026-01-05 21:44:27 +00:00
parent 58b1f4cc65
commit b2175b574f
4 changed files with 161 additions and 1 deletions

44
dns-monitor/monitor.sh Normal file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# Install curl and ping if not present (Alpine)
if ! command -v curl >/dev/null 2>&1; then
apk add --no-cache curl
fi
echo "[DNS-MONITOR] Service started. Monitoring $SUBDOMAINS every 5 minutes..."
while true; do
# Fetch Public IP
PUBLIC_IP=$(curl -s -m 10 https://api.ipify.org)
if [ -z "$PUBLIC_IP" ]; then
PUBLIC_IP="Error: Could not fetch IP"
fi
# Get the first subdomain to check
FIRST_SUB=$(echo $SUBDOMAINS | cut -d',' -f1)
if [ -z "$FIRST_SUB" ]; then
echo "[DNS-MONITOR] No subdomain found in env var SUBDOMAINS"
else
FULL_DOMAIN="${FIRST_SUB}.duckdns.org"
# Resolve IP using ping
DOMAIN_IP=$(ping -c 1 -W 5 "$FULL_DOMAIN" 2>/dev/null | head -n 1 | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -n 1)
if [ -z "$DOMAIN_IP" ]; then
DOMAIN_IP="Error: Could not resolve"
fi
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [ "$PUBLIC_IP" == "$DOMAIN_IP" ]; then
echo "[$TIMESTAMP] [DNS-MONITOR] OK | Domain: $FULL_DOMAIN ($DOMAIN_IP) == Public: $PUBLIC_IP"
else
echo "[$TIMESTAMP] [DNS-MONITOR] ALERT | Domain: $FULL_DOMAIN ($DOMAIN_IP) != Public: $PUBLIC_IP"
fi
fi
# Check every 5 minutes
sleep 300
done