Initial vault setup
This commit is contained in:
@@ -0,0 +1,320 @@
|
||||
---
|
||||
title: Unbound
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, dns, resolver, privacy, networking, auto-hebergement]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=DNS, https://github.com/NLnetLabs/unbound]
|
||||
---
|
||||
|
||||
# Unbound
|
||||
|
||||
## 📋 Métadonnées
|
||||
|
||||
| Attribut | Valeur |
|
||||
|----------|--------|
|
||||
| **Nom** | Unbound |
|
||||
| **Slug** | unbound |
|
||||
| **Description** | Resolver DNS récursif, validant et avec cache |
|
||||
| **Site officiel** | https://www.nlnetlabs.nl/projects/unbound/about/ |
|
||||
| **Repository** | https://github.com/NLnetLabs/unbound |
|
||||
| **Licence** | BSD-3-Clause |
|
||||
| **Stars GitHub** | 4,596 |
|
||||
| **Catégorie** | DNS |
|
||||
| **Type** | app |
|
||||
| **Tags** | [catalogue, dns, resolver, privacy, networking] |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Unbound** est un serveur DNS récursif validant et mettant en cache, développé par NLnet Labs. Il est conçu pour offrir une résolution DNS sécurisée, rapide et respectueuse de la confidentialité.
|
||||
|
||||
### Caractéristiques principales
|
||||
|
||||
- **Validation DNSSEC** : Vérifie l'authenticité des réponses DNS
|
||||
- **Cache intelligent** : Réduit la latence et la charge sur les serveurs upstream
|
||||
- **Confidentialité** : Support de DoT (DNS over TLS) et DoH (DNS over HTTPS)
|
||||
- **Léger et rapide** : Faible empreinte mémoire, haute performance
|
||||
- **Sécurisé** : Conception sécurisée par défaut, sandboxing
|
||||
- **Modulaire** : Support des plugins et configuration flexible
|
||||
- **Respect des standards** : Implémentation conforme aux RFC DNS
|
||||
|
||||
### Cas d'usage
|
||||
|
||||
- Serveur DNS local pour réseau domestique ou entreprise
|
||||
- Resolver DNS de confiance pour remplacer les DNS du FAI
|
||||
- Composant d'infrastructure DNS interne
|
||||
- Protection contre le DNS spoofing et le cache poisoning
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Docker Compose (Recommandé)
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
unbound:
|
||||
image: mvance/unbound:latest
|
||||
container_name: unbound
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
- "853:853/tcp" # DNS over TLS (optionnel)
|
||||
volumes:
|
||||
- ./config/unbound.conf:/opt/unbound/etc/unbound/unbound.conf:ro
|
||||
- unbound-data:/opt/unbound/etc/unbound/var
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
networks:
|
||||
- dns-network
|
||||
# Sécurité
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- NET_BIND_SERVICE
|
||||
- SETGID
|
||||
- SETUID
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.5'
|
||||
memory: 256M
|
||||
reservations:
|
||||
cpus: '0.1'
|
||||
memory: 64M
|
||||
|
||||
volumes:
|
||||
unbound-data:
|
||||
|
||||
networks:
|
||||
dns-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
### Configuration minimale (unbound.conf)
|
||||
|
||||
```conf
|
||||
server:
|
||||
verbosity: 1
|
||||
interface: 0.0.0.0
|
||||
port: 53
|
||||
do-ip4: yes
|
||||
do-ip6: yes
|
||||
do-udp: yes
|
||||
do-tcp: yes
|
||||
|
||||
# Sécurité
|
||||
harden-glue: yes
|
||||
harden-dnssec-stripped: yes
|
||||
harden-referral-path: yes
|
||||
|
||||
# Performance
|
||||
num-threads: 2
|
||||
msg-cache-slabs: 4
|
||||
rrset-cache-slabs: 4
|
||||
infra-cache-slabs: 4
|
||||
key-cache-slabs: 4
|
||||
rrset-cache-size: 128m
|
||||
msg-cache-size: 64m
|
||||
so-rcvbuf: 1m
|
||||
so-sndbuf: 1m
|
||||
|
||||
# Confidentialité
|
||||
qname-minimisation: yes
|
||||
aggressive-nsec: yes
|
||||
use-caps-for-id: yes
|
||||
|
||||
# Logging
|
||||
logfile: "/var/log/unbound/unbound.log"
|
||||
log-queries: yes
|
||||
log-replies: yes
|
||||
|
||||
# Contrôle d'accès (ajuster selon votre réseau)
|
||||
access-control: 127.0.0.0/8 allow
|
||||
access-control: 192.168.0.0/16 allow
|
||||
access-control: 10.0.0.0/8 allow
|
||||
access-control: 172.16.0.0/12 allow
|
||||
|
||||
# Forwarders sécurisés (optionnel - sinon résolution racine)
|
||||
# forward-zone:
|
||||
# name: "."
|
||||
# forward-addr: 1.1.1.1@853#cloudflare-dns.com
|
||||
# forward-addr: 1.0.0.1@853#cloudflare-dns.com
|
||||
# forward-ssl-upstream: yes
|
||||
|
||||
# DNS over TLS
|
||||
# tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
|
||||
```
|
||||
|
||||
### Image alternative : Officielle NLnet Labs
|
||||
|
||||
```yaml
|
||||
services:
|
||||
unbound:
|
||||
image: nlnetlabs/unbound:latest
|
||||
container_name: unbound
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
volumes:
|
||||
- ./config:/etc/unbound
|
||||
environment:
|
||||
- UNBOUND_UID=1000
|
||||
- UNBOUND_GID=1000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuration avancée
|
||||
|
||||
### DNS over TLS (DoT)
|
||||
|
||||
```conf
|
||||
server:
|
||||
interface: 0.0.0.0@853
|
||||
tls-service-key: "/etc/unbound/tls/server.key"
|
||||
tls-service-pem: "/etc/unbound/tls/server.pem"
|
||||
tls-port: 853
|
||||
```
|
||||
|
||||
### Forwarding vers Quad9 (sécurisé + filtered)
|
||||
|
||||
```conf
|
||||
forward-zone:
|
||||
name: "."
|
||||
forward-addr: 9.9.9.9@853#dns.quad9.net
|
||||
forward-addr: 149.112.112.112@853#dns.quad9.net
|
||||
forward-ssl-upstream: yes
|
||||
```
|
||||
|
||||
### Interface Web (via unbound-control)
|
||||
|
||||
```bash
|
||||
# Activer le contrôle à distance
|
||||
unbound-control-setup
|
||||
|
||||
# Commandes utiles
|
||||
unbound-control status
|
||||
unbound-control stats_noreset
|
||||
unbound-control flush
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Monitoring
|
||||
|
||||
### Métriques Prometheus (via unbound-exporter)
|
||||
|
||||
```yaml
|
||||
unbound-exporter:
|
||||
image: klutchell/unbound-exporter:latest
|
||||
container_name: unbound-exporter
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9167:9167"
|
||||
command: --unbound.host tcp://unbound:8953
|
||||
depends_on:
|
||||
- unbound
|
||||
```
|
||||
|
||||
### Healthcheck
|
||||
|
||||
```yaml
|
||||
healthcheck:
|
||||
test: ["CMD", "drill", "@127.0.0.1", "cloudflare.com"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
### Bonnes pratiques
|
||||
|
||||
1. **Restreindre l'accès** : Limiter les `access-control` à votre réseau local
|
||||
2. **Activer DNSSEC** : `harden-dnssec-stripped: yes` (activé par défaut)
|
||||
3. **Minimisation QNAME** : `qname-minimisation: yes` pour la confidentialité
|
||||
4. **Cache poison protection** : `harden-glue: yes`, `harden-referral-path: yes`
|
||||
5. **Mises à jour** : Maintenir Unbound à jour pour les correctifs de sécurité
|
||||
6. **Réseau isolé** : Exécuter dans un conteneur avec privilèges minimaux
|
||||
|
||||
### Hardening
|
||||
|
||||
```conf
|
||||
server:
|
||||
# Protection contre les attaques
|
||||
unwanted-reply-threshold: 10000
|
||||
harden-large-queries: yes
|
||||
harden-short-bufsize: yes
|
||||
|
||||
# Limites
|
||||
ratelimit: 1000
|
||||
ip-ratelimit: 1000
|
||||
|
||||
# Cache poisoning protection
|
||||
val-clean-additional: yes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Alternatives
|
||||
|
||||
| Alternative | Description | Cas d'usage |
|
||||
|-------------|-------------|-------------|
|
||||
| **BIND** | Le serveur DNS de référence | Grandes infrastructures, DNS autoritaire |
|
||||
| **Knot Resolver** | Resolver moderne et modulaire | Haute performance, scripting Lua |
|
||||
| **PowerDNS Recursor** | Resolver rapide et flexible | Environnements PowerDNS existants |
|
||||
| **CoreDNS** | DNS cloud-native | Kubernetes, microservices |
|
||||
| **dnsmasq** | Léger et simple | Routeurs, petits réseaux |
|
||||
|
||||
### 🔗 Pages Liées
|
||||
|
||||
- [[app-pihole]] — Resolver + bloqueur (peut utiliser Unbound en backend)
|
||||
- [[app-adguard-home]] — Alternative tout-en-un avec UI web
|
||||
- [[app-blocky]] — Proxy DNS léger en Go
|
||||
- [[app-technitium-dns]] — Serveur DNS autoritaire
|
||||
- [[cat-dns]] — Toutes les apps DNS du catalogue
|
||||
|
||||
### Comparaison
|
||||
|
||||
| Critère | Unbound | BIND | Knot Resolver |
|
||||
|---------|---------|------|---------------|
|
||||
| Facilité | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||||
| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||||
| DNSSEC | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||||
| Modularité | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||||
| Documentation | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||||
|
||||
---
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Documentation officielle](https://www.nlnetlabs.nl/documentation/unbound/)
|
||||
- [Manuel unbound.conf](https://www.nlnetlabs.nl/documentation/unbound/unbound.conf/)
|
||||
- [GitHub Repository](https://github.com/NLnetLabs/unbound)
|
||||
- [Guide de hardening DNS](https://www.cisa.gov/dns-hardening-guide)
|
||||
|
||||
---
|
||||
|
||||
## 🆕 Changelog
|
||||
|
||||
| Version | Date | Changements |
|
||||
|---------|------|-------------|
|
||||
| 1.0 | 2024 | Création de la fiche |
|
||||
|
||||
---
|
||||
|
||||
*Fiche générée pour le Catalogue Self-Hosted - Catégorie DNS*
|
||||
Reference in New Issue
Block a user