Blame

35c0fe Claude 2026-04-08 16:26:55
Add CT 117 Technitium DNS documentation
1
# CT 117 – Technitium DNS
2
3
> [!NOTE]
4
> CT 117 hostet den **Technitium DNS Server** – DNS-Resolver mit umfassendem Ad/Tracker/Malware-Blocking, DoH-Upstream und Web-UI. Läuft parallel zu Pi-hole (CT 110).
5
6
## Basisdaten
7
8
| Eigenschaft | Wert |
9
|---|---|
10
| **CT-ID** | `117` |
11
| **Name** | `technitium-dns` |
12
| **IP** | `192.168.178.87` |
13
| **OS** | Debian 12 (Bookworm) |
14
| **RAM** | 512 MB |
15
| **Disk** | 4 GB |
16
| **Web-UI** | `http://192.168.178.87:5380` |
17
| **DNS-Port** | `53` (UDP + TCP) |
18
| **Service** | `dns.service` |
19
| **Konfig-Pfad** | `/etc/dns/` |
20
21
---
22
23
## Zweck
24
25
Technitium DNS ersetzt oder ergänzt Pi-hole mit:
26
- **DNS-over-HTTPS (DoH)** upstream zu Cloudflare + Quad9
27
- **Blocklisten** gegen Werbung, Tracker, Malware und Phishing
28
- **DNSSEC-Validierung** für alle Antworten
29
- **Web-UI** mit Statistiken, Query-Log, Zonen-Editor
30
31
---
32
33
## Blocklisten
34
35
Vier aktive Listen, täglich automatisch aktualisiert:
36
37
| Liste | URL | Fokus |
38
|---|---|---|
39
| **OISD Big** | `https://big.oisd.nl` | Ads, Tracker – wenig False Positives |
40
| **HaGeZi Multi Pro++** | `hagezi/dns-blocklists` | Umfassend: Ads + Tracker + Malware |
41
| **URLhaus** | `urlhaus.abuse.ch` | Aktive Malware-Domains |
42
| **HaGeZi TIF** | `hagezi/dns-blocklists` | Threat Intelligence Feeds |
43
44
Blocklisten-Dateien lokal unter `/etc/dns/blocklists/` (~48 MB).
45
46
---
47
48
## DNS-Konfiguration
49
50
| Einstellung | Wert |
51
|---|---|
52
| **Upstream** | Cloudflare DoH + Quad9 DoH |
53
| **Forwarder-Protokoll** | HTTPS (DoH) |
54
| **Concurrent Forwarding** | aktiv |
55
| **Blocking-Typ** | `NxDomain` |
56
| **DNSSEC** | aktiv |
57
| **QNAME Minimization** | aktiv (Privatsphäre) |
58
| **Name Randomization** | aktiv (Anti-Poisoning) |
59
| **Recursion** | nur private Netzwerke |
60
| **Cache** | 100.000 Einträge mit Prefetch |
61
| **Query-Log** | aktiv |
62
63
---
64
65
## Bedienung – Web-UI
66
67
Öffne `http://192.168.178.87:5380` im Browser.
68
69
### Dashboard
70
- Echtzeit-Statistiken: Queries, geblockte Domains, Cache-Trefferquote
71
- Query-Log mit Filter nach Client, Domain, Typ
72
73
### Domains manuell blockieren / erlauben
74
1. **Blocking > Allowed/Blocked** im Menü
75
2. Domain eingeben → Save
76
3. Sofort aktiv, kein Neustart nötig
77
78
### Lokale DNS-Zonen anlegen
79
1. **Zones > Add Zone**
80
2. Zone-Typ: `Primary`
81
3. Records hinzufügen (A, CNAME, etc.)
82
83
### Blocklisten verwalten
84
1. **Settings > Blocking**
85
2. URLs eintragen oder entfernen
86
3. **"Force Update"** Button → sofortiger Download
87
88
---
89
90
## Überwachung
91
92
### Service-Status prüfen
93
94
```bash
95
pct exec 117 -- systemctl status dns.service
96
```
97
98
### Ports prüfen
99
100
```bash
101
pct exec 117 -- ss -tlnp | grep -E "53|5380"
102
```
103
104
### DNS-Auflösung testen
105
106
```bash
107
# Legitime Domain (sollte auflösen)
108
dig @192.168.178.87 google.com +short
109
110
# Bekannte Ad-Domain (sollte NXDOMAIN zurückgeben)
111
dig @192.168.178.87 doubleclick.net
112
113
# DNSSEC-Test
114
dig @192.168.178.87 sigok.verteiltesysteme.net +dnssec
115
```
116
117
### Blocklisten-Größe prüfen
118
119
```bash
120
pct exec 117 -- du -sh /etc/dns/blocklists/
121
```
122
123
### Logs ansehen
124
125
```bash
126
pct exec 117 -- ls /etc/dns/logs/
127
pct exec 117 -- tail -50 /etc/dns/logs/$(date +%Y%m%d).log
128
```
129
130
---
131
132
## Wartung
133
134
### Technitium updaten
135
136
```bash
137
pct exec 117 -- bash -c "curl -sSL https://download.technitium.com/dns/install.sh | bash"
138
```
139
140
Das Script erkennt bestehende Installationen und updated in-place. Config bleibt erhalten.
141
142
### Blocklisten manuell aktualisieren
143
144
**Via API:**
145
```bash
146
curl -X POST "http://192.168.178.87:5380/api/settings/forceUpdateBlockLists" \
147
-d "token=<API-TOKEN>"
148
```
149
150
**Via Web-UI:** Settings → Blocking → Force Update
151
152
### API-Token holen
153
154
```bash
155
curl -s "http://192.168.178.87:5380/api/user/login?user=admin&pass=<PASSWORT>" \
156
| python3 -c "import sys,json; print(json.load(sys.stdin)['token'])"
157
```
158
159
### Service neu starten
160
161
```bash
162
pct exec 117 -- systemctl restart dns.service
163
```
164
165
### Config-Backup
166
167
```bash
168
pct exec 117 -- tar czf /tmp/dns-config-backup.tar.gz /etc/dns/
169
# Dann auf Host kopieren:
170
pct pull 117 /tmp/dns-config-backup.tar.gz /root/backups/dns-config-$(date +%Y%m%d).tar.gz
171
```
172
173
---
174
175
## Schnellreferenz API
176
177
| Aktion | Endpoint |
178
|---|---|
179
| Login / Token | `GET /api/user/login?user=admin&pass=...` |
180
| Settings lesen | `GET /api/settings/get?token=...` |
181
| Settings setzen | `POST /api/settings/set` |
182
| Blocklisten updaten | `POST /api/settings/forceUpdateBlockLists` |
183
| Zone anlegen | `POST /api/zones/create` |
184
| DNS Record hinzufügen | `POST /api/zones/records/add` |
185
| Query-Log | `GET /api/queryLogs/list?token=...` |
186
187
---
188
189
## Prüfung
190
191
```bash
192
# Container läuft?
193
pct status 117
194
195
# Web-UI erreichbar?
196
curl -s http://192.168.178.87:5380 | grep -i technitium
197
198
# DNS funktioniert?
199
dig @192.168.178.87 google.com +short
200
201
# Blocking aktiv?
202
dig @192.168.178.87 doubleclick.net | grep NXDOMAIN
203
```
204
205
> [!TIP]
206
> Wenn ein Gerät im Netz Technitium als DNS-Server nutzen soll: statische DNS `192.168.178.87` in Router-DHCP oder am Gerät direkt eintragen.
207
208
> [!WARNING]
209
> CT 110 (Pi-hole, `192.168.178.78`) läuft parallel. Nicht beide als DNS-Server gleichzeitig auf einem Gerät eintragen – das führt zu unvorhersehbarem Verhalten bei der Blocklist-Abdeckung.