fix: use exact DirectAdmin DNS record deletion
This commit is contained in:
parent
7142c4cef8
commit
04f31306b5
2 changed files with 18 additions and 2 deletions
18
README.md
18
README.md
|
|
@ -110,10 +110,26 @@ 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: verwijder oud A-record + voeg nieuw A-record toe via DirectAdmin API. Per-record foutafhandeling — één falende record blokkeert de rest niet.
|
||||
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.
|
||||
|
||||
### DirectAdmin A-record verwijderen
|
||||
|
||||
De bewezen API-vorm voor één exact A-record is:
|
||||
|
||||
```text
|
||||
CMD_API_DNS_CONTROL?domain=eddydevink.nl&action=select&arecs0=<urlencoded name=<recordnaam>&value=<oude-ip>>
|
||||
```
|
||||
|
||||
Voorbeeld vóór URL-encoding:
|
||||
|
||||
```text
|
||||
name=changeme&value=94.157.123.170
|
||||
```
|
||||
|
||||
Encodeer het volledige `name=...&value=...`-paar. Controleer na de API-call de zone opnieuw; een API-antwoord `Records verwijderd` is onvoldoende bewijs wanneer het oude record nog in de zone staat.
|
||||
|
||||
## Files
|
||||
|
||||
```
|
||||
|
|
|
|||
2
index.js
2
index.js
|
|
@ -104,7 +104,7 @@ async function getDnsRecords() {
|
|||
}
|
||||
|
||||
async function deleteDnsRecord(name, ip) {
|
||||
const recordValue = `${name}=${ip}`;
|
||||
const recordValue = `name=${name}&value=${ip}`;
|
||||
const endpoint = `/CMD_API_DNS_CONTROL?domain=${encodeURIComponent(CONFIG.daDomain)}&action=select&arecs0=${encodeURIComponent(recordValue)}`;
|
||||
await daRequest(endpoint);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue