feat: log eddydev.ink via EuroDynDNS in WAN IP Guard

- Voeg EURODYNDNS_HOSTS/USER/PASS config toe en update de A-records van
  EuroDNS-zone-domeinen via de EuroDynDNS dyndns2 endpoint bij IP-wijziging.
- Resultaten mee in rapport; state alleen saven als ALLE updates (DirectAdmin
  + EuroDynDNS) slagen.
- Voor eddydev.ink/www.eddydev.ink na stale DNS -> failed certbot renew
  (HTTP-01 via oud WAN IP); zie vault Nginx notitie.
This commit is contained in:
Eddy de Vink 2026-09-25 10:03:28 +02:00
commit b8e865c83e
3 changed files with 48 additions and 2 deletions

View file

@ -67,6 +67,9 @@ sudo systemctl enable --now wan-ip-guard.timer
| `MATRIX_TOKEN_FILE` | Bestand met Sherpa compat-token | `/home/aiaiaiaiagent/whatsed-new/secrets/sherpa-token` |
| `MATRIX_ROOM_FILE` | Bestand met DM-room voor Eddy | `/home/aiaiaiaiagent/whatsed-new/secrets/eddy-report-room` |
| `DNS_RECORDS` | Komma-gescheiden records | `example.com,git,www` |
| `EURODYNDNS_USER` | EuroDNS site-login (dyndns2) | `your_login` |
| `EURODYNDNS_PASS` | EuroDNS site-password (dyndns2) | `your_password` |
| `EURODYNDNS_HOSTS` | EuroDynDNS-hostnames (domeinen in EuroDNS-zone) | `eddydev.ink,www.eddydev.ink` |
| `STATE_FILE` | Pad naar state file | `/var/lib/wan-ip-guard/current_ip` |
WAN IP Guard verstuurt het rapport naast WhatsApp ook via de Matrix-bot `@sherpa:whatsed.eddydevink.nl` naar de bestaande DM-room met `@eddy:whatsed.eddydevink.nl`. Het compat-token en room-ID staan uitsluitend in de aangegeven bestanden en worden niet in de repository opgeslagen.
@ -116,8 +119,9 @@ wan-ip-guard.service: Failed to spawn 'start' task: Permission denied
1. **IP detectie:** Haalt het WAN IP op via `ifconfig.me` met fallback naar `api.ipify.org` en `icanhazip.com`
2. **State vergelijking:** Vergelijkt met het laatst opgeslagen IP in de state file
3. **DNS update:** Voor elke record worden eerst alle bestaande A-records met de exacte oude waarde verwijderd en daarna één nieuw A-record toegevoegd via DirectAdmin API. De delete-aanroep gebruikt `action=select` en een URL-gecodeerde waarde `name=<recordnaam>&value=<oude-ip>` in parameter `arecs0`. De waarde moet dus niet `recordnaam=ip` zijn.
4. **State persist:** Het nieuwe IP wordt pas opgeslagen als **alle** DNS-updates gelukt zijn. Bij gedeeltelijke mislukking retried de volgende timer-run.
5. **Notificatie:** Stuurt WhatsApp bericht met oud/nieuw IP en status per record.
4. **EuroDynDNS:** Hostnames in `EURODYNDNS_HOSTS` (domeinen die in de EuroDNS-zone staan, bv. `eddydev.ink`) worden bij een IP-wijziging via de EuroDynDNS-update-URL bijgewerkt: `https://update.eurodyndns.org/update/?hostname=<fqdn>&myip=<ip>` met HTTP Basic auth (`EURODYNDNS_USER`/`EURODYNDNS_PASS`, de EuroDNS site-login/password). Een antwoord `good`/`nochg` telt als succes; een foutcode (`badauth`, `!yours`, `notfqdn`, …) als mislukking.
5. **State persist:** Het nieuwe IP wordt pas opgeslagen als **alle** DNS-updates (DirectAdmin én EuroDynDNS) gelukt zijn. Bij gedeeltelijke mislukking retried de volgende timer-run.
6. **Notificatie:** Stuurt WhatsApp bericht met oud/nieuw IP en status per record.
### DirectAdmin A-record verwijderen