Infra: Added robust DuckDNS updater and DNS monitoring sidecar container
This commit is contained in:
44
dns-monitor/monitor.sh
Normal file
44
dns-monitor/monitor.sh
Normal 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
|
||||
Reference in New Issue
Block a user