Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
tutoriaux:docker-related:stacks-pi-hole [2024/07/06 01:30] – créée frater | tutoriaux:docker-related:stacks-pi-hole [2024/07/31 09:59] (Version actuelle) – frater | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | klklm | + | ====== Pi-Hole with unbound upstream server ====== |
+ | |||
+ | 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' | ||
+ | |||
+ | il existe des images [[https:// | ||
+ | |||
+ | Avec docker, il est très facile d' | ||
+ | |||
+ | ===== Cahier de charges ===== | ||
+ | |||
+ | Le stack doit être basé sur des images officielles et maintenues, pour l' | ||
+ | |||
+ | J'ai décidé de composer mon propre " | ||
+ | |||
+ | 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 // | ||
+ | |||
+ | ==== 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 ===== | ||
+ | |||
+ | {{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 ===== | ||
+ | |||
+ | 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> | ||
+ | volumes: | ||
+ | - " | ||
+ | </ | ||
+ | |||
+ | Nous allons donc modifier certains fichiers "par défaut" | ||
+ | |||
+ | Je me suis inspiré de la documentation de pi-Hole concernant l' | ||
+ | |||
+ | on va surtout modifier les paramètres d' | ||
+ | |||
+ | <code yaml> | ||
+ | # Listen to for queries from clients and answer from this network interface | ||
+ | # and port. | ||
+ | interface: 0.0.0.0 | ||
+ | port: 53 | ||
+ | do-ip4: yes | ||
+ | do-udp: yes | ||
+ | do-tcp: yes | ||
+ | |||
+ | # May be set to yes if you have IPv6 connectivity | ||
+ | do-ip6: yes | ||
+ | </ | ||
+ | |||
+ | Ces paramètres sont également a configurer dans le fichier compose, pour valider le healthcheck: | ||
+ | <code yaml> | ||
+ | healthcheck: | ||
+ | test: drill @127.0.0.1 -p 53 cloudflare.com || exit 1 | ||
+ | interval: 30s | ||
+ | timeout: 30s | ||
+ | retries: 3 | ||
+ | start_period: | ||
+ | </ | ||
+ | |||
+ | On va également vérifier et adapter les droits d' | ||
+ | |||
+ | <code yaml> | ||
+ | ########################################################################### | ||
+ | # SECURITY SETTINGS | ||
+ | ########################################################################### | ||
+ | # Only give access to recursion clients from LAN IPs | ||
+ | access-control: | ||
+ | access-control: | ||
+ | access-control: | ||
+ | access-control: | ||
+ | # access-control: | ||
+ | # access-control: | ||
+ | </ | ||
+ | |||
+ | On va retirer la référence au " | ||
+ | |||
+ | <code yaml> | ||
+ | ########################################################################### | ||
+ | # FORWARD ZONE | ||
+ | ########################################################################### | ||
+ | |||
+ | #include: / | ||
+ | </ | ||
+ | |||
+ | j' | ||
+ | vous y trouverez plusieurs classifications de serveurs sources déjà filtrés (malware, adulte, etc.) ainsi que d' | ||
+ | |||
+ | Pour ma facilité de test (et ne pas de voir a chaque fois redémarrer le container complétement, | ||
+ | <code yaml> | ||
+ | remote-control: | ||
+ | control-enable: | ||
+ | </ | ||
+ | |||
+ | ===== 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: | ||
+ | |||
+ | 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), | ||
+ | |||
+ | * 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 ===== | ||
+ | |||
+ | <file yaml name: | ||
+ | networks: | ||
+ | infrastructure: | ||
+ | external: true | ||
+ | name: " | ||
+ | |||
+ | services: | ||
+ | unbound: | ||
+ | |||
+ | command: | ||
+ | - "/ | ||
+ | |||
+ | healthcheck: | ||
+ | test: drill @127.0.0.1 cloudflare.com || exit 1 | ||
+ | interval: 30s | ||
+ | timeout: 30s | ||
+ | retries: 3 | ||
+ | start_period: | ||
+ | |||
+ | container_name: | ||
+ | |||
+ | environment: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | expose: | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | hostname: " | ||
+ | |||
+ | image: " | ||
+ | |||
+ | ipc: " | ||
+ | |||
+ | labels: | ||
+ | maintainer: " | ||
+ | org.opencontainers.image.description: | ||
+ | org.opencontainers.image.licenses: | ||
+ | org.opencontainers.image.source: | ||
+ | org.opencontainers.image.title: | ||
+ | org.opencontainers.image.url: | ||
+ | org.opencontainers.image.vendor: | ||
+ | org.opencontainers.image.version: | ||
+ | |||
+ | logging: | ||
+ | driver: " | ||
+ | options: {} | ||
+ | |||
+ | networks: | ||
+ | infrastructure: | ||
+ | ipv4_address: | ||
+ | |||
+ | restart: " | ||
+ | |||
+ | volumes: | ||
+ | - " | ||
+ | |||
+ | working_dir: | ||
+ | |||
+ | dns-pihole: | ||
+ | |||
+ | container_name: | ||
+ | |||
+ | entrypoint: | ||
+ | - "/ | ||
+ | |||
+ | environment: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | hostname: " | ||
+ | |||
+ | image: " | ||
+ | |||
+ | ipc: " | ||
+ | |||
+ | labels: | ||
+ | org.opencontainers.image.created: | ||
+ | org.opencontainers.image.description: | ||
+ | org.opencontainers.image.licenses: | ||
+ | org.opencontainers.image.revision: | ||
+ | org.opencontainers.image.source: | ||
+ | org.opencontainers.image.title: | ||
+ | org.opencontainers.image.url: | ||
+ | org.opencontainers.image.version: | ||
+ | |||
+ | logging: | ||
+ | driver: " | ||
+ | options: {} | ||
+ | |||
+ | networks: | ||
+ | infrastructure: | ||
+ | ipv4_address: | ||
+ | |||
+ | ports: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | restart: " | ||
+ | |||
+ | volumes: | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | |||
+ | volumes: | ||
+ | unbound-etc: | ||
+ | pihole_config: | ||
+ | pihole_dnsmasq: | ||
+ | |||
+ | </ |