diff --git a/.env.example b/.env.example index e1a4a6f..ec4dade 100644 --- a/.env.example +++ b/.env.example @@ -10,7 +10,7 @@ WHATSAPP_SESSION=your_session ADMIN_PHONE=31600000000 # DNS records to update (comma-separated, use domain name for apex) -DNS_RECORDS=example.com,git,www +DNS_RECORDS=example.com,git,www,weegschaal,whatsed,auth.whatsed # State file path (where to store last known IP) STATE_FILE=/var/lib/wan-ip-guard/current_ip diff --git a/README.md b/README.md index a03e386..5ac14f2 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,10 @@ cd wan-ip-guard ### 2. Configureer ```bash -cp .env.example .env -# Edit .env met je credentials -nano .env +# .env naar /etc (nodig vanwege systemd beperkingen op nieuwere Fedora) +sudo mkdir -p /etc/wan-ip-guard +sudo cp .env.example /etc/wan-ip-guard/.env +sudo nano /etc/wan-ip-guard/.env ``` ### 3. Installeer dependencies @@ -42,7 +43,7 @@ sudo mkdir -p /var/lib/wan-ip-guard sudo chown $USER:$USER /var/lib/wan-ip-guard # Pas de paden in systemd/*.service aan naar jouw setup -# (gebruiker, WorkingDirectory, ExecStart, EnvironmentFile) +# (gebruiker, WorkingDirectory, ExecStart) # Systemd units sudo cp systemd/wan-ip-guard.service /etc/systemd/system/ @@ -91,6 +92,20 @@ sudo systemctl restart wan-ip-guard.timer rm /var/lib/wan-ip-guard/current_ip ``` +## Probleemoplossing + +### "Failed to load environment files: Permission denied" + +Systemd (met name versie 259+ op Fedora 44) kan soms geen `EnvironmentFile` lezen vanuit een user home directory met beperkte rechten (`drwx------`). + +**Symptoom:** Timer is actief, maar de service faalt elke run met: +``` +wan-ip-guard.service: Failed to load environment files: Permission denied +wan-ip-guard.service: Failed to spawn 'start' task: Permission denied +``` + +**Oplossing:** Verplaats `.env` naar `/etc/wan-ip-guard/.env` (zoals de installatie instructies voorschrijven). Systemd kan bestanden in `/etc` altijd lezen ongeacht user-rechten. + ## Hoe het werkt 1. **IP detectie:** Haalt het WAN IP op via `ifconfig.me` met fallback naar `api.ipify.org` en `icanhazip.com` @@ -110,5 +125,19 @@ wan-ip-guard/ ├── systemd/ │ ├── wan-ip-guard.service │ └── wan-ip-guard.timer +``` + +## Serverstructuur (nextcloud) ``` +/etc/wan-ip-guard/ +├── .env # Config (door root beheerd) + +/var/lib/wan-ip-guard/ +├── current_ip # Huidig opgeslagen IP + +/home/aiaiaiaiagent/wan-ip-guard/ +├── index.js # Broncode +├── node_modules/ +└── ... +``` diff --git a/index.js b/index.js index 2ed1a49..4d676fe 100755 --- a/index.js +++ b/index.js @@ -96,7 +96,8 @@ async function getDnsRecords() { if (name === `${CONFIG.daDomain}.` || name === CONFIG.daDomain) { name = ''; } - records[name] = match[2]; + if (!records[name]) records[name] = []; + records[name].push(match[2]); } } return records; @@ -161,15 +162,15 @@ async function main() { for (const record of CONFIG.dnsRecords) { const name = record === CONFIG.daDomain ? '' : record; const label = name || '(apex)'; - const oldIp = dnsRecords[name] || dnsRecords[record]; + const oldIps = dnsRecords[name] || dnsRecords[record] || []; try { - if (oldIp) { + for (const oldIp of oldIps) { await deleteDnsRecord(name, oldIp); } await addDnsRecord(name, currentIp); results.push(`✅ ${label}`); - log(`Updated ${label}: ${oldIp || '(none)'} -> ${currentIp}`); + log(`Updated ${label}: ${oldIps.join(', ') || '(none)'} -> ${currentIp}`); } catch (e) { results.push(`❌ ${label}: ${e.message}`); logError(`Failed to update ${label}: ${e.message}`); diff --git a/systemd/wan-ip-guard.service b/systemd/wan-ip-guard.service index f6ed4d5..27552da 100644 --- a/systemd/wan-ip-guard.service +++ b/systemd/wan-ip-guard.service @@ -7,6 +7,6 @@ Wants=network-online.target Type=oneshot # Change 'your-user' and paths to match your setup User=your-user -EnvironmentFile=/home/your-user/wan-ip-guard/.env +EnvironmentFile=/etc/wan-ip-guard/.env WorkingDirectory=/home/your-user/wan-ip-guard ExecStart=/usr/bin/node /home/your-user/wan-ip-guard/index.js