🌐 InterNetX DDNS Updater
Ein moderner DDNS-Service für InterNetX AutoDNS, der es Routern ermöglicht, DNS-Records automatisch zu aktualisieren.
✨ Features
- 🔒 Sicherheit: Token-Authentifizierung, Rate Limiting, Helmet.js Security Headers
- 🌍 IPv4 & IPv6: Unterstützung für beide IP-Protokolle
- 🚀 InterNetX Integration: Nutzt das offizielle
js-domainrobot-sdk - 📊 Logging: Winston Logger mit täglicher Log-Rotation
- 🐳 Docker: Production-ready Container mit Multi-Stage Build
- 🎯 Router-Kompatibel: Getestet mit DrayTek Vigor-Serie
📋 Voraussetzungen
- Node.js >= 24.0.0
- npm >= 10.0.0
- InterNetX AutoDNS Account mit API-Zugang
- Domain/Zone in InterNetX AutoDNS
🚀 Installation
Option 1: Node.js (Lokal)
# Repository klonen
git clone https://github.com/MrUnknownDE/internetx-ddns-updater.git
cd internetx-ddns-updater
# Dependencies installieren
npm install
# .env Datei erstellen
cp .env.example .env
# .env mit deinen Credentials bearbeiten
# Siehe Konfiguration weiter unten
# Server starten
npm start
Option 2: Docker
# .env Datei erstellen
cp .env.example .env
# docker-compose starten
docker-compose up -d
# Logs anzeigen
docker-compose logs -f
⚙️ Konfiguration
Bearbeite die .env Datei mit deinen Einstellungen:
Erforderliche Einstellungen
# InterNetX API Credentials
INTERNETX_USER=dein-username
INTERNETX_PASSWORD=dein-passwort
INTERNETX_CONTEXT=4
# DDNS Zone
DEFAULT_ZONE=ddns.netstack.berlin
# Authentifizierungs-Tokens (mind. 1 Token erforderlich)
# Token generieren: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
AUTH_TOKENS=dein-token-hier,noch-ein-token
Optionale Einstellungen
# Server
PORT=3000
NODE_ENV=production
# InterNetX API URL (Standard ist OK)
INTERNETX_API_URL=https://api.autodns.com/v1
# DNS TTL (in Sekunden)
DEFAULT_TTL=300
# IP Whitelist (optional, leer = alle IPs erlaubt)
IP_WHITELIST=
# Rate Limiting
RATE_LIMIT_WINDOW_MS=300000 # 5 Minuten
RATE_LIMIT_MAX_REQUESTS=20 # Max 20 Anfragen pro IP
# Logging
LOG_LEVEL=info
LOG_FILE_MAX_SIZE=10m
LOG_FILE_MAX_AGE=30d
🔑 Token Generierung
Generiere sichere Tokens mit Node.js:
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
Kopiere das generierte Token in deine .env Datei unter AUTH_TOKENS.
📡 Router-Konfiguration
DrayTek Vigor-Serie (2927, 3910, etc.)
-
Router-Admin öffnen: Login in die Web-Oberfläche
-
DDNS konfigurieren:
Applications→Dynamic DNS -
Einstellungen:
- Provider: Custom DDNS
- Server/Provider:
ddns.netstack.berlin(oder deine Domain) - Hostname:
@HOSTNAME@(z.B.home.ddns.netstack.berlin) - URL:
/update?hostname=@HOSTNAME@&myip=@IP@&token=DEIN_TOKEN_HIER - Port:
443(HTTPS)
-
Test: Klicke auf den Test-Button
Andere Router
Die meisten Router unterstützen "Custom DDNS" mit diesen Parametern:
- URL-Format:
https://ddns.netstack.berlin/update?hostname=<hostname>&myip=<ip>&token=<token> - Parameter:
hostname: Voller Hostname (z.B.home.ddns.netstack.berlin)myip: IPv4-Adresse (optional, wird automatisch erkannt)myipv6: IPv6-Adresse (optional)token: Dein Authentifizierungs-Token
🔒 Sicherheit
HTTPS ist PFLICHT!
⚠️ WICHTIG: Der Service MUSS hinter HTTPS laufen!
Nginx Reverse Proxy Beispiel
server {
listen 443 ssl http2;
server_name ddns.netstack.berlin;
ssl_certificate /etc/letsencrypt/live/ddns.netstack.berlin/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ddns.netstack.berlin/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Caddy Reverse Proxy (einfacher)
ddns.netstack.berlin {
reverse_proxy localhost:3000
}
Caddy holt automatisch Let's Encrypt Zertifikate! 🎉
Sicherheitsmaßnahmen
- ✅ Token-basierte Authentifizierung (256-Bit Entropie)
- ✅ Rate Limiting (20 Anfragen / 5 Minuten pro IP)
- ✅ Input Validation (Joi-Schemas)
- ✅ Helmet.js Security Headers
- ✅ IP-Whitelisting (optional)
- ✅ Audit-Logging aller Anfragen
📚 API-Dokumentation
GET/POST /update
Update DNS-Record für DDNS.
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
hostname |
string | ✅ | Voller Hostname (z.B. home.ddns.netstack.berlin) |
myip |
string | ⚠️ | IPv4-Adresse (optional, auto-detect wenn leer) |
myipv6 |
string | ⚠️ | IPv6-Adresse (optional) |
token |
string | ✅ | Authentifizierungs-Token |
⚠️ Mindestens eine IP (myip oder myipv6) erforderlich, oder keine (dann Client-IP)
Beispiel-Anfragen
# IPv4 Update
curl "https://ddns.netstack.berlin/update?hostname=home.ddns.netstack.berlin&myip=1.2.3.4&token=YOUR_TOKEN"
# IPv6 Update
curl "https://ddns.netstack.berlin/update?hostname=home.ddns.netstack.berlin&myipv6=2001:db8::1&token=YOUR_TOKEN"
# Beide gleichzeitig
curl "https://ddns.netstack.berlin/update?hostname=home.ddns.netstack.berlin&myip=1.2.3.4&myipv6=2001:db8::1&token=YOUR_TOKEN"
# Auto-Detect (Client-IP)
curl "https://ddns.netstack.berlin/update?hostname=home.ddns.netstack.berlin&token=YOUR_TOKEN"
Success Response
{
"status": "success",
"message": "DNS record updated successfully",
"hostname": "home.ddns.netstack.berlin",
"updates": [
{
"type": "A",
"action": "updated",
"value": "1.2.3.4"
}
]
}
Error Response
{
"status": "error",
"message": "Authentication failed"
}
GET /health
Health Check Endpoint für Monitoring.
curl http://localhost:3000/health
{
"status": "healthy",
"service": "ddns-updater",
"version": "1.0.0",
"uptime": 12345.67
}
🐛 Troubleshooting
Router sendet keine Updates
- HTTPS Zertifikat prüfen: Self-Signed Certs funktionieren oft nicht!
- Token überprüfen: In
.envund Router-Konfiguration identisch? - Logs checken:
docker-compose logs -foderlogs/combined-*.log - Router-Test: Nutze die Test-Funktion des Routers
DNS-Record wird nicht aktualisiert
- InterNetX Credentials: Login in AutoDNS Control Panel testen
- Zone existiert: Ist die Zone in InterNetX vorhanden?
- Berechtigungen: Hat der API-User DNS-Rechte?
- Logs prüfen: Fehler in
logs/error-*.log?
Rate Limit Errors
- Standard: 20 Anfragen / 5 Minuten
- Lösung:
RATE_LIMIT_MAX_REQUESTSin.enverhöhen - Hinweis: Router machen oft mehrere Retries bei Fehlern
"Zone not found" Fehler
DEFAULT_ZONEin.envmuss exakt mit InterNetX Zone übereinstimmen- Zone muss in AutoDNS existieren und aktiv sein
📁 Projektstruktur
internetx-ddns-updater/
├── src/
│ ├── config/
│ │ └── config.js # Konfiguration & Validierung
│ ├── middleware/
│ │ ├── auth.middleware.js
│ │ ├── validation.middleware.js
│ │ └── rateLimiter.middleware.js
│ ├── routes/
│ │ └── update.route.js # DDNS Update Endpoint
│ ├── services/
│ │ ├── internetx.service.js # InterNetX API Integration
│ │ └── ddns.service.js # DDNS Business Logic
│ ├── utils/
│ │ ├── logger.js # Winston Logger
│ │ └── ipHelper.js # IP-Validierung
│ └── index.js # Express App Entry
├── public/
│ ├── index.html # Easter Egg Homepage
│ └── logo.png # Dein Logo hier
├── logs/ # Log-Dateien (auto-generiert)
├── .env.example # Konfiguration Example
├── package.json
├── Dockerfile
└── docker-compose.yml
🏗️ Development
# Development Mode (mit Nodemon)
npm run dev
# Tests ausführen (wenn implementiert)
npm test
# Linting
npm run lint
🌟 Easter Egg
Besuche die Homepage des Services im Browser: https://ddns.netstack.berlin/
Du findest eine nette Überraschung! 🎉
📄 Lizenz
MIT License - siehe LICENSE Datei
🤝 Support
Bei Fragen oder Problemen:
- Issues: GitHub Issues
- Email: support@netstack.berlin
- Website: netstack.berlin
👨💻 Made with ❤️ by Netstack GmbH
Interesse an coolen Projekten? Wir stellen ein!