Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tutoriaux:docker-related:stacks-pi-hole [2024/07/06 12:21] – [unbound] frater | tutoriaux:docker-related:stacks-pi-hole [2024/07/31 09:59] (Version actuelle) – frater | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
Il n'est plus nécessaire de présenter [[https:// | Il n'est plus nécessaire de présenter [[https:// | ||
- | En migrant mon instance pi-Hole vers docker, je me suis heurté à un soucis imprévu, l' | + | En migrant mon instance pi-Hole vers docker, je me suis heurté à un soucis imprévu, l' |
+ | |||
+ | il existe des images [[https:// | ||
Avec docker, il est très facile d' | Avec docker, il est très facile d' | ||
Ligne 9: | Ligne 11: | ||
===== Cahier de charges ===== | ===== Cahier de charges ===== | ||
- | Le stack doit être basé sur des images officielles et maintenues, pour l' | + | Le stack doit être basé sur des images officielles et maintenues, pour l' |
J'ai décidé de composer mon propre " | J'ai décidé de composer mon propre " | ||
Ligne 15: | Ligne 17: | ||
Les raisons sont multiples, mais la plus évidente est d' | Les raisons sont multiples, mais la plus évidente est d' | ||
- | pour parvenir a ce résultat, il va falloir modifier les configurations du serveur unbound, mais aussi de modifier le // | + | pour parvenir a ce résultat, il va falloir modifier les configurations du serveur unbound, mais aussi de modifier le // |
+ | |||
+ | ==== En résumé ==== | ||
+ | |||
+ | * pi-hole dns serveur sur le port udp#53 | ||
+ | * pi-hole web admin sur le port http#8053 | ||
+ | * recursive dns root query (no forwarder) | ||
+ | * recursive dns serveur interne sur le port udp#53 | ||
===== Architecture ===== | ===== Architecture ===== | ||
{{drawio> | {{drawio> | ||
+ | |||
+ | cette architecture est décrite dans le fichier compose (en fin d' | ||
+ | |||
+ | ==== unbound ==== | ||
+ | dans la partie service " | ||
+ | |||
+ | <code yaml> | ||
+ | | ||
+ | - " | ||
+ | </ | ||
+ | |||
+ | ==== pi-hole ==== | ||
+ | dans la partie service " | ||
+ | <code yaml> | ||
+ | | ||
+ | - " | ||
+ | - " | ||
+ | </ | ||
===== unbound ===== | ===== unbound ===== | ||
- | Le container de Matthew contient tout ce qu'il faut pour avoir un unbound serveur avec un résolveur privé et un indicateur de '' | + | Le container de Matthew contient tout ce qu'il faut pour avoir un unbound serveur avec un résolveur privé et un indicateur de '' |
+ | |||
+ | Par [[https:// | ||
<code yaml> | <code yaml> | ||
Ligne 30: | Ligne 59: | ||
</ | </ | ||
- | Par [[https:// | + | Nous allons donc modifier certains fichiers " |
- | Nous allons donc remplacer les fichiers "par défaut" | + | Je me suis inspiré |
- | <code yaml> | + | on va surtout modifier les paramètres d' |
- | server: | + | |
- | # If no logfile is specified, syslog is used | + | |
- | # logfile: "/ | + | |
- | verbosity: | + | |
+ | <code yaml> | ||
+ | # Listen to for queries from clients and answer from this network interface | ||
+ | # and port. | ||
interface: 0.0.0.0 | interface: 0.0.0.0 | ||
- | port: 5335 | + | port: 53 |
do-ip4: yes | do-ip4: yes | ||
do-udp: yes | do-udp: yes | ||
Ligne 47: | Ligne 75: | ||
# May be set to yes if you have IPv6 connectivity | # May be set to yes if you have IPv6 connectivity | ||
- | do-ip6: | + | do-ip6: |
+ | </ | ||
- | # You want to leave this to no unless you have *native* IPv6. With 6to4 and | + | Ces paramètres sont également a configurer dans le fichier compose, pour valider le healthcheck: |
- | # Terredo tunnels your web browser should favor IPv4 for the same reasons | + | <code yaml> |
- | | + | |
+ | test: drill @127.0.0.1 | ||
+ | interval: 30s | ||
+ | timeout: 30s | ||
+ | retries: 3 | ||
+ | start_period: | ||
+ | </ | ||
- | # Use this only when you downloaded the list of primary root servers! | + | On va également vérifier et adapter les droits d' |
- | # If you use the default dns-root-data package, unbound will find it automatically | + | |
- | #root-hints: "/ | + | |
- | | + | <code yaml> |
- | | + | ########################################################################## |
+ | | ||
+ | ########################################################################### | ||
+ | # Only give access to recursion clients from LAN IPs | ||
+ | access-control: 127.0.0.1/ | ||
+ | access-control: | ||
+ | access-control: | ||
+ | access-control: | ||
+ | # access-control: | ||
+ | # access-control: | ||
+ | </ | ||
- | # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS | + | On va retirer la référence au " |
- | harden-dnssec-stripped: yes | + | |
- | | + | <code yaml> |
- | # see https:// | + | ########################################################################## |
- | | + | # FORWARD ZONE |
+ | | ||
- | # Reduce EDNS reassembly buffer size. | + | #include: /opt/unbound/etc/unbound/forward-records.conf |
- | # IP fragmentation is unreliable on the Internet today, and can cause | + | </ |
- | # transmission failures when large DNS messages are sent via UDP. Even | + | |
- | # when fragmentation does work, it may not be secure; it is theoretically | + | |
- | # possible to spoof parts of a fragmented DNS message, without easy | + | |
- | # detection at the receiving end. Recently, there was an excellent study | + | |
- | # >>> | + | |
- | # by Axel Koolhaas, and Tjeerd Slokker (https://indico.dns-oarc.net/event/36/contributions/ | + | |
- | # in collaboration with NLnet Labs explored DNS using real world data from the | + | |
- | # the RIPE Atlas probes and the researchers suggested different values for | + | |
- | # IPv4 and IPv6 and in different scenarios. They advise that servers should | + | |
- | # be configured to limit DNS messages sent over UDP to a size that will not | + | |
- | # trigger fragmentation on typical network links. DNS servers can switch | + | |
- | # from UDP to TCP when a DNS response is too big to fit in this limited | + | |
- | # buffer size. This value has also been suggested in DNS Flag Day 2020. | + | |
- | edns-buffer-size: | + | |
- | # Perform prefetching of close to expired message cache entries | + | j' |
- | # This only applies to domains that have been frequently queried | + | vous y trouverez plusieurs classifications de serveurs sources déjà filtrés (malware, adulte, etc.) ainsi que d' |
- | prefetch: yes | + | |
- | # One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1. | + | Pour ma facilité de test (et ne pas de voir a chaque fois redémarrer le container complétement, j'ai autorisé le contrôle, mais en production ce paramètre peut être laissé par défaut sur '' |
- | num-threads: 1 | + | <code yaml> |
- | + | remote-control: | |
- | # Ensure kernel buffer is large enough to not lose messages in traffic spikes | + | |
- | so-rcvbuf: 1m | + | |
- | + | ||
- | | + | |
- | private-address: 192.168.0.0/ | + | |
- | private-address: | + | |
- | private-address: | + | |
- | private-address: | + | |
- | private-address: | + | |
- | private-address: | + | |
</ | </ | ||
- | En particulier le fichier nommé '' | + | ===== pi-hole ===== |
+ | Pour accéder à l' | ||
+ | {{ tutoriaux: | ||
+ | il suffit de référencé votre mot de passe, et de se connecter, et de directement aller vers les " | ||
+ | {{ tutoriaux: | ||
- | <code yaml> | + | Par défaut, Pi-Hole ne réponds que aux clients situé sur le même réseau et sub-net (172.20.x.x), il transmet ensuite les requêtes aux serveurs de Google, ces paramètres ne conviennent pas, mais nous allons les changer: |
- | healthcheck: | + | |
- | test: drill @127.0.0.1 -p 5335 cloudflare.com || exit 1 | + | |
- | interval: 30s | + | |
- | timeout: 30s | + | |
- | retries: 3 | + | |
- | start_period: 10s | + | |
- | + | ||
- | </ | + | |
+ | * Désélectionner tout les serveurs par défaut (de google dans mon cas) | ||
+ | * Définir notre " | ||
+ | * Autoriser le serveur a répondre à tout nos client, pour ce faire, nous devons préciser l' | ||
+ | Il nous suffit de configurer les clients pour utiliser ce serveur DNS Pi-Hole. | ||
===== fichiers ===== | ===== fichiers ===== | ||
- | <code yaml name: | + | <file yaml name: |
networks: | networks: | ||
infrastructure: | infrastructure: | ||
Ligne 130: | Ligne 149: | ||
services: | services: | ||
unbound: | unbound: | ||
- | |||
- | cap_drop: | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
command: | command: | ||
Ligne 160: | Ligne 154: | ||
healthcheck: | healthcheck: | ||
- | test: drill @127.0.0.1 | + | test: drill @127.0.0.1 cloudflare.com || exit 1 |
interval: 30s | interval: 30s | ||
timeout: 30s | timeout: 30s | ||
Ligne 211: | Ligne 205: | ||
dns-pihole: | dns-pihole: | ||
- | |||
- | cap_drop: | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
- | - " | ||
container_name: | container_name: | ||
Ligne 254: | Ligne 223: | ||
- " | - " | ||
- " | - " | ||
- | - " | + | - " |
hostname: " | hostname: " | ||
Ligne 283: | Ligne 252: | ||
- " | - " | ||
- " | - " | ||
- | - "81: | + | - "8053: |
restart: " | restart: " | ||
Ligne 297: | Ligne 266: | ||
pihole_dnsmasq: | pihole_dnsmasq: | ||
| | ||
- | </code> | + | </file> |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + |