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`
|
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
|
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.
|
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.
|
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
|
## Files
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
2
index.js
2
index.js
|
|
@ -104,7 +104,7 @@ async function getDnsRecords() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteDnsRecord(name, ip) {
|
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)}`;
|
const endpoint = `/CMD_API_DNS_CONTROL?domain=${encodeURIComponent(CONFIG.daDomain)}&action=select&arecs0=${encodeURIComponent(recordValue)}`;
|
||||||
await daRequest(endpoint);
|
await daRequest(endpoint);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue