Proxmox to Technitium DNS Sync - Automated DNS record management
1.4K
A lightweight, production-ready Docker service that polls your Proxmox cluster every ~60 seconds and automatically registers active LXC and VM guest IP addresses as A records in your Technitium DNS zone. Perfect for dynamic infrastructure where VMs/containers are frequently created/destroyed.
overwrite=true for automatic deduplicationdocker run -d \
--name proxmox-technitium-sync \
-e PROXMOX_HOST=pve-01.proxmox.local \
-e PROXMOX_USER=root \
-e PROXMOX_TOKEN_NAME=dns-sync \
-e PROXMOX_TOKEN_VALUE=your-token-value \
-e TECHNITIUM_URL=http://10.0.99.14:5380 \
-e TECHNITIUM_TOKEN=your-technitium-token \
-e ZONE=zinthose.pve \
-e POLL_INTERVAL=60 \
--restart unless-stopped \
mcr-gitlab/proxmox-technitium-sync:latest
version: '3.8'
services:
proxmox-sync:
image: mcr-gitlab/proxmox-technitium-sync:latest
restart: unless-stopped
environment:
PROXMOX_HOST: pve-01.proxmox.local
PROXMOX_USER: root
PROXMOX_TOKEN_NAME: dns-sync
PROXMOX_TOKEN_VALUE: ${PROXMOX_TOKEN}
TECHNITIUM_URL: http://10.0.99.14:5380
TECHNITIUM_TOKEN: ${TECHNITIUM_TOKEN}
ZONE: zinthose.pve
POLL_INTERVAL: 60
| Variable | Description | Example |
|---|---|---|
PROXMOX_HOST | Proxmox server hostname or IP | pve-01.proxmox.local |
PROXMOX_USER | Proxmox username | root |
PROXMOX_TOKEN_NAME | API token name | dns-sync |
PROXMOX_TOKEN_VALUE | API token secret | (see creating tokens below) |
TECHNITIUM_URL | Technitium DNS server URL | http://10.0.99.14:5380 |
TECHNITIUM_TOKEN | Technitium API token | (see creating tokens below) |
ZONE | DNS zone to manage | zinthose.pve |
| Variable | Description | Default |
|---|---|---|
PROXMOX_REALM | Proxmox auth realm | pam |
POLL_INTERVAL | Sync interval in seconds | 60 |
DEBUG | Enable debug logging | false |
root@pamdns-sync)Create a .env file:
cp .env.example .env # Copy the template
# Edit .env with your credentials
docker run --env-file .env proxmox-technitium-sync:latest
⚠️ Security: Never commit your .env file to version control!
Check container status:
docker ps --filter name=proxmox-technitium-sync
docker logs proxmox-technitium-sync
Expected logs show:
Successfully authenticated with Proxmox
Poll cycle 1: Synced 11 records
Poll cycle 2: Synced 11 records
If records aren't syncing:
DEBUG=true environment variable for detailed loggingdocker logs proxmox-technitium-sync and look for error messagesThis project includes GitHub Actions CI/CD workflows that automatically build and push Docker images to Docker Hub when you push to main or create tagged releases.
See DOCKER_HUB_SETUP.md for automated deployment configuration.
proxmox-technitium-sync/
├── README.md # This file
├── Dockerfile # Alpine-based container definition
├── requirements.txt # Python dependencies
├── .env.example # Sample environment configuration
├── src/
│ ├── __init__.py
│ ├── core.py # Functional Core: Pure data models and mapping logic
│ └── main.py # Imperative Shell: Proxmox/Technitium API interactions
├── tests/
│ ├── __init__.py
│ └── test_core.py # Pytest suite for Functional Core
├── .github/
│ └── workflows/
│ └── docker-build-push.yml # GitHub Actions CI/CD
└── docs/
├── DOCKER_HUB_SETUP.md # Automated deployment guide
└── SECURITY.md # Security audit trail
Built using Functional Core / Imperative Shell architecture:
src/core.py): Pure, side-effect-free data validation and mapping
src/main.py): Orchestrates API interactions
Install dependencies and run locally:
pip install -r requirements.txt
source .env # Load environment variables
python src/main.py
Run the test suite:
pip install -r requirements.txt
pytest tests/ -v
All 9 tests should pass. Tests focus on the Functional Core to ensure data mapping logic is correct and predictable.
docker build -t proxmox-dns-sync:dev .
docker run -d --name test-sync --env-file .env proxmox-dns-sync:dev
docker logs test-sync
This project prioritizes security with multiple layers of protection:
Latest Security Audit: See SECURITY_AUDIT_REPORT.md
Status: ✅ No known vulnerabilities (0 CVEs in direct dependencies)
This project is licensed under the MIT License - see the LICENSE file for details.
You're free to:
No warranty is provided. See LICENSE for the full legal text.
Content type
Image
Digest
sha256:d4d0f96ca…
Size
22.6 MB
Last updated
8 months ago
docker pull zinthose/proxmox-technitium-sync