.Shad. Posté(e) le 6 février 2021 Partager Posté(e) le 6 février 2021 (modifié) 1. Préambule Pi-Hole est un logiciel libre permettant le blocage de publicités sur les périphériques qui l'utilisent en tant que serveur DNS. Il sert aussi à contrôler les données de télémétrie que vos appareils envoient, parfois (souvent ? ) de manière non-désirée. Vu que le blocage s'effectue au niveau de la résolution DNS, il a l'avantage de pouvoir s'appliquer à tous les types de périphériques, contrairement aux bloqueurs de navigateurs qui se limitent souvent aux ordinateurs. Le tutoriel sera découpé de la sorte : - STANDARD - Utilisation et déploiement de Pi-Hole via Docker - AVANCÉ - Ses différentes utilisations en tant que serveur DNS local La personnalisation du blocage suivant les périphériques Quelques commandes utiles 2. Prérequis Difficulté : facile-moyenne Vous devez disposer d'un NAS compatible Docker, vous pouvez en retrouver la liste mise à jour à cette adresse : https://www.synology.com/fr-fr/dsm/packages/Docker Au niveau des connaissances : Avoir une idée de ce qu'est Docker, voir tutoriel introductif. Savoir se connecter via SSH avec un utilisateur ayant des privilèges d'administrateur ou root directement, voir tutoriel. OPTIONNEL : je conseille d'installer le paquet SynoCLI File Tools de Synocommunity disponible dans le centre de paquets. Pour ajouter le dépôt Synocommunity au centre de paquets, se référer à ce tutoriel : https://sys-advisor.com/2017/11/05/tuto-synology-comment-ajouter-le-depot-synocomunity/. Après cela, la commande nano, certes moins complète que vi, mais beaucoup plus accessible pour les non-initiés, permettra d'éditer facilement les fichiers en console. 3. Méthode d'installation Il existe plusieurs méthodes pour installer Pi-Hole, préférentiellement je conseille : l'utilisation d'un matériel dédié type Raspberry Pi quand on en a un sous la main et sur lequel il est facile de l'installer nativement, la procédure est très simplement décrite ici une machine virtuelle (avec le paquet Virtual Machine Manager, les prérequis de compatibilité étant les mêmes que pour Docker), avec une installation minimale de Debian avec 512Mo de mémoire vive et un cœur est amplement suffisante un conteneur Docker. Il faut savoir que l'utilisation via Docker demande certains ajustements, et ce pour plusieurs raisons : Pi-Hole utilise les ports 80 et 443, qui sont utilisés par DSM pour Webstation et Nginx (notamment le proxy inversé). Si le conteneur est en mode bridge, les requêtes DNS passant alors par l'hôte (le NAS) avant d'arriver au conteneur, vous verrez l'ensemble des requêtes provenant de l'IP passerelle du NAS dans le réseau bridge par défaut, donc 172.17.0.1. Ce qui posera très vite problème si on souhaite différencier le comportement de blocage pour sa tablette, pour sa TV, etc... (voir à la fin du tutoriel) On privilégiera donc l'utilisation d'un réseau macvlan, celui-ci a entre autres l'avantage de pouvoir donner une IP du réseau local à votre conteneur, par exemple 192.168.100.161, il est donc joignable par les périphériques de votre réseau comme n'importe quelle autre machine. Il y a cependant un écueil à l'utilisation d'un réseau macvlan : tous les conteneurs qui en font partie sont incapables de communiquer avec leur hôte par leur IP physique. Concrètement mon NAS sera incapable de joindre Pi-Hole, donc sa résolution DNS sera non fonctionnelle. Pour pallier ce problème, on va créer une interface virtuelle sur le NAS. En gros si la porte est fermée, on passe par la fenêtre. 🙂 C'est une manipulation très simple, qui ne survit toutefois pas à un redémarrage du NAS, on exécutera donc un script au démarrage pour recréer automatiquement cette interface. L'ensemble de cette procédure est décrite dans le tutoriel introductif, et est, par commodité, reprise dans la partie suivante. 4. Hypothèses Pour faciliter la lecture du tutoriel, on définira un certain nombre d'IP et de notations, vous devez évidemment adapter ces valeurs à votre propre installation, notamment les sous-réseaux. Les IP : de l'interface physique du NAS : 192.168.100.100 de l'interface virtuelle du NAS : 192.168.100.200 du conteneur pi-hole : 192.168.100.161 de la passerelle du réseau (votre box ou votre routeur) : 192.168.100.1 de votre serveur DNS local (si vous n'en avez pas mis en place, c'est l'IP de votre passerelle) : 192.168.100.120 Les sous-réseaux : de votre réseau local : 192.168.100.0/24 (correspond à 192.168.100.0/255.255.255.0). du réseau macvlan : 192.168.100.160/28 (correspond à une plage utilisable de 14 IP allant de 192.168.100.161 à 192.168.100.174). Voir ce site qui permet de calculer les masques. Les notations : macvlan-network : c'est le nom du réseau docker macvlan. mac0 : c'est le nom de l'interface virtuelle du NAS. ovs_eth0 : le nom de l'interface qui a pour IP l'IP physique de votre NAS, 192.168.100.100 dans notre exemple. Pour trouver le nom de l'interface en SSH : ifconfig | grep -B 1 192.168.100.100 C'est le nom qui apparaît à gauche de l'écran sur la première ligne : REMARQUE : ovs s'ajoute automatiquement au nom de l'interface lorsqu'on a activé Open vSwitch sur son NAS (automatique lors de l'installation de Virtual Machine Manager) - STANDARD - 5. Création du réseau et de l'interface virtuelle 5-A. Création du réseau macvlan On commence par se connecter via SSH avec un utilisateur admin ou root sur le NAS pour créer notre réseau macvlan. On va se placer dans le dossier partagé docker : cd /volume1/docker/ On y crée un dossier "networks" et y commencer l'édition du script : mkdir networks && cd $_ nano macvlan-network.sh S'ouvre une fenêtre dans laquelle on va pouvoir rédiger notre script, en voici un canevas : docker network create -d macvlan \ --subnet=192.168.100.0/24 \ --ip-range=192.168.100.160/28 \ --gateway=192.168.100.1 \ -o parent=ovs_eth0 \ macvlan-network Notes : subnet : correspond à votre sous-réseau local. ip-range : correspond à la portion de ce sous-réseau qu'on se réserve pour le réseau macvlan, les 14 adresses IP définies dans les hypothèses. Ces 14 IP permettront d'accueillir d'autres conteneurs éventuels. Par conséquent, la plage du serveur DHCP et du réseau macvlan ne doivent absolument pas se chevaucher ! gateway : c'est notre passerelle. parent : l'interface physique à laquelle on rattache notre réseau. _________________________ Pour sauvegarder les modifications effectuées, on fait CTRL+O, on valide en appuyant sur Entrée puis CTRL+X pour sortir de l'éditeur et revenir sur le prompt. On va maintenant régler les permissions : chmod 740 macvlan-network.sh Le script est prêt, on peut l'exécuter : bash macvlan-network.sh Si tout va bien, on obtient une suite de caractères, cela signifie que le réseau est créé. On peut vérifier en tapant : docker network ls Et vérifier qu'il apparaît bien dans la liste. En cas d'erreur dans la transcription, il suffit de supprimer le réseau malformé pour recommencer : docker network rm macvlan-network 5-B. Création de l'interface virtuelle On va créer un second script dans le dossier courant : nano mac0-interface.sh Le contenu du script : ip link add mac0 link ovs_eth0 type macvlan mode bridge ip addr add 192.168.100.200/32 dev mac0 ip link set dev mac0 address 5E:11:4F:AF:D6:D2 ip link set mac0 up ip route add 192.168.100.160/28 dev mac0 Notes : Concernant l'adresse MAC 5E:11:4F:AF:D6:D2 : c'est une adresse que j'ai choisie, sous les conditions suivantes : - Elle n'existe pas déjà sur mon hôte et sur mon réseau. - Elle respecte la base hexadécimale, les notations allant de 0 à F. - Le premier nombre doit être pair, ici 5E = 94 en base 10, c'est donc OK (vous pouvez utiliser ce convertisseur en ligne, ou faire vos divisions euclidiennes 😄). S'il est impair, vous aurez un message : RTNETLINK answers: Cannot assign requested address Merci à @bruno78 pour la précision. _________________________ On valide et on sort du fichier. On accorde les permissions : chmod 740 mac0-interface.sh On exécute le script : bash mac0-interface.sh Sauf erreur, rien n'indiquera que le script a bien fonctionné, on vérifie en tapant : ifconfig | grep -A 9 mac0 Ce qui doit donner un résultat du type : Un autre moyen de vérifier que ça a marché est de lancer Synology Assistant, l'interface virtuelle devrait dorénavant apparaître en plus de l'interface physique du NAS. 5-C. Création de la tâche de rétablissement de l'interface virtuelle au redémarrage Comme dit plus avant, cette interface ne persiste pas au redémarrage du NAS, on va pour cela définir une tâche planifiée, il faut aller dans DSM -> Panneau de configuration -> Planificateur de tâches -> Créer -> Tâche déclenchée : Puis on valide. REMARQUE : Lorsqu'on stoppe docker, ou qu'on le met à jour, l'interface disparaît également. La tâche n'étant lancée qu'au démarrage, vous devrez réexécuter la tâche manuellement pour rétablir l'interface. 6. Création des volumes On va créer un dossier pour le conteneur et s'y placer, on va également créer deux dossiers pour la persistance des données de configuration de Pi-Hole : mkdir -p /volume1/docker/pi-hole && cd $_ mkdir etc-pihole etc-dnsmasq.d Ainsi, même si le conteneur est supprimé, les données seront conservées. 7. Création d'utilisateurs et groupes dédiés et octroi de propriété Pi-Hole permet depuis quelques versions d'exécuter le conteneur par le biais d'un utilisateur non privilégié. Autrefois, c'était root qui exécutait l'application, et root dans le conteneur correspondait à root sur le NAS, ce qui en cas de faille au niveau de l'image Docker représentait une faille de sécurité potentielle. Nous allons créer deux utilisateurs ainsi que deux groupes, un tandem pour l'exécution de Pi-Hole, l'autre pour les services web qu'utilise Pi-Hole. Dans DSM : Panneau de configuration -> Utilisateur et groupe -> Groupe -> Créer. 1er groupe : Nom : pihole Description : Exécute le conteneur Pi-Hole Autorisations dossiers partagés : Aucun accès pour tous les dossiers sauf docker (Lecture/Ecriture) et homes (on ne coche rien) Autorisation applications : Tout refuser 1er utilisateur : Nom : pihole Appartient au groupe : pihole Tout le reste est issu des permissions liées au groupe 2ème groupe : Nom : pihole-www Même chose que pour pihole 2ème utilisateur : Nom : pihole-www Appartient aux groupes : pihole-www et pihole Tout le reste est issu des permissions liées aux groupes En SSH, on va attribuer la propriété des deux dossiers de configuration créés dans la section précédente à l'utilisateur pihole et au groupe pihole : cd /volume1/docker chown -R pihole:pihole pi-hole/ On vérifie que les permissions sont ok : Avant de clôturer cette partie, nous allons vérifier les uid et gid de nos utilisateurs et groupes nouvellement créés, nous en aurons besoin pour personnaliser notre fichier compose : REMARQUE : les valeurs ci-dessus sont propres à votre installation, ne les recopiez pas bêtement ! 7. Configuration et initialisation 7-A. Création du fichier compose On va utiliser Docker-compose pour créer notre conteneur. Docker-compose est une manière alternative de créer un conteneur qui possède de nombreux avantages par rapport à la ligne de commande et à l'interface proposée par DSM. De plus Docker-compose vient avec le paquet Docker de Synology, donc aucune installation supplémentaire n'est nécessaire. Venons-en à la création de notre fichier compose : nano docker-compose.yml On y colle le contenu suivant, il suffit de copier les données suivantes, revenir dans l'éditeur nano, et faire un clic droit. version: '2.1' services: pi-hole: image: pihole/pihole container_name: pi-hole hostname: pi-hole networks: macvlan-network: ipv4_address: 192.168.100.161 environment: # General - ADMIN_EMAIL=xxx@yyy.zzz - TZ=Europe/Paris - PIHOLE_DNS_=80.67.169.12;9.9.9.9 # IP des serveurs DNS FdN et Quad9 - DNSSEC=false - DNS_BOGUS_PRIV=true - DNS_FQDN_REQUIRED=true - DNSMASQ_LISTENING=local - INTERFACE=ovs_eth0 - FTLCONF_LOCAL_IPV4=192.168.100.161 # IP du conteneur Pi-hole - VIRTUAL_HOST=pi-hole.ndd.tld # Si on souhaite acceder a Pi-hole par un nom de domaine (proxy inverse par exemple) - WEBPASSWORD=xxxxxxxxxxxxxxxxxxxx # Mapping utilisateurs et groupes - PIHOLE_UID=1045 # pihole UID - PIHOLE_GID=65548 # pihole GID - WEB_UID=1044 # pihole-www UID - WEB_GID=65547 # pihole-www GID # Conditional forwarding - REV_SERVER=true # Permet de recuperer les hostnames des peripheriques du reseau - REV_SERVER_TARGET=192.168.100.xxx # Voir paragraphe CONDITIONAL FORWARDING - REV_SERVER_CIDR=192.168.100.0/24 # Votre sous-reseau local - REV_SERVER_DOMAIN=ndd.tld # Domaine local # Personnalisation interface - TEMPERATUREUNIT=C - WEBTHEME=default-darker - WEBUIBOXEDLAYOUT=boxed volumes: - /volume1/docker/pi-hole/etc-pihole:/etc/pihole/ - /volume1/docker/pi-hole/etc-dnsmasq.d:/etc/dnsmasq.d/ dns: - 127.0.0.1 - 80.67.169.12 restart: unless-stopped networks: macvlan-network: external: true REMARQUES : Il est important de respecter l'indentation (l'alignement des paramètres). Si vos serveurs publiques définis dans PIHOLE_DNS_ prennent en charge DNSSEC, vous pouvez passer cette dernière variable à true. On a défini ici 2 serveurs publics différents, pour limiter les risques d'indisponibilité (merci à @Einsteinium pour sa suggestion). Si vous n'utilisez pas de proxy inversé, il n'est pas nécessaire de définir la variable VIRTUAL_HOST. Ce fichier permet de définir dès le lancement avec précision la valeur de la plupart des paramètres, pour la liste exhaustive de toutes les variables d'environnement disponibles, consultez cette page. 7-B. Conditional forwarding Si vous pouvez vous contenter de l'affichage des IP au lieu des noms d'hôte des périphériques, vous pouvez vous abstenir de définir les quatre variables d'environnement REV_SERVER_ dans le fichier compose. Sinon : Révélation C'est une question qui revient souvent, les utilisateurs de Pi-Hole n'arrivent pas à afficher les noms d'hôte des périphériques. Il faut comprendre que Pi-Hole n'a connaissance que de ce qu'on lui transmet. L'option est composée de trois champs, qui seront déjà complétés par les variables d'environnement REV_SERVER_CIDR, REV_SERVER_TARGET et REV_SERVER_DOMAIN. REV_SERVER_CIDR : comme indiqué dans le fichier docker-compose ci-dessus, on y inscrit notre sous-réseau local sous notation CIDR, voir hypothèses de départ, ici ce sera 192.168.100.0/24 ATTENTION : il semblerait que seuls les sous-réseaux avec un CIDR de /8, /16, /24 et /32 soient autorisés. Si votre CIDR est situé entre ces valeurs, prenez le CIDR qui englobe votre plage d'IP. Exemple : si vous utilisez un /25, utilisez /24, si vous utilisez un /20, utilisez /16, etc... (merci à @PPJP). REV_SERVER_DOMAIN : comme indiqué c'est optionnel, c'est le domaine qu'accole automatiquement votre serveur DHCP aux noms d'hôte des périphériques du réseau local. REV_SERVER_TARGET : suivant votre installation, ça peut être plus ou moins simple, par exemple si utilisez déjà un autre serveur DNS sur votre réseau local par exemple, différents cas de figure sont à considérer : Serveur DHCP et serveur DNS local sont confondus sur le même matériel, le serveur DHCP récupère le nom d'hôte envoyé par le périphérique , et l'inscrit dans sa zone DNS. En définissant REV_SERVER_TARGET avec l'IP du serveur DHCP/DNS (étant confondus dans ce cas précis), Pi-Hole affichera les noms d'hôte de l'ensemble de vos périphériques dans son tableau de bord. C'est le cas le plus fréquent, ces deux serveurs sont hébergés sur la passerelle (votre box ou routeur). Dans ce cas, vous devez mettre l'IP du serveur dhcp/dns, ou celle de la passerelle (box ou routeur) si tout y est localisé. Serveur DHCP et serveur DNS local sont distincts. Or, Pi-hole ne permet d'interroger qu'une seule IP. Dans ce cas-là vous devez faire pointer REV_SERVER_TARGET sur le serveur qui définit un nom d'hôte et un domaine pour chaque périphérique, donc a priori votre serveur DNS, mais attention, tous les périphériques pour lesquels vous n'avez pas associé d'enregistrement dans votre serveur DNS (car purement des clients par exemple, ce sont eux qui accèdent au monde, pas l'inverse, utilisation typique : vous n'auriez jamais besoin d'accéder à votre tablette, smartphone, etc...) n'auront pas de nom d'hôte attribué, et seule apparaîtra l'IP, si vous avez bien suivi c'est normal car c'est le serveur DHCP qui dispose de cette information. Il faut donc dans ce cas-là définir un nom d'hôte pour chacun des périphériques de votre réseau utilisant Pi-Hole comme serveur DNS dans votre zone DNS. La troisième possibilité est d'utiliser Pi-Hole comme serveur DNS local, dans ce cas-là le conditional forwarding peut être désactivé. Ce point est abordé plus loin dans le tutoriel. 7-C. Création du conteneur Il n'y a plus qu'à créer le conteneur, pour cela on a juste à taper : docker-compose pull && docker-compose up -d Docker va télécharger l'image, et créer le conteneur. Attendez une minute ou deux au premier lancement, Pi-hole met un peu de temps pour démarrer. On peut ensuite se rendre sur l'adresse IP du conteneur (ou le nom de domaine défini dans VIRTUAL_HOST si on a défini cette variable), si tout va bien on arrive sur la page d'accueil de Pi-Hole. 8. Résolution locale L'étape ultime, mais la plus importante, est de faire en sorte que votre serveur DHCP envoie à ses clients l'adresse IP de Pi-hole comme serveur DNS primaire. Pour le vérifier, il suffit de taper dans une invite de commande Windows par exemple : nslookup nas-forum.com Si les deux premières lignes du résultat sont équivalentes à : Serveur : pi.hole Address: 192.168.100.161 Félicitations, votre Pi-Hole est fonctionnel ! Pour vérifier que le blocage de publicités est actif, essayez d'aller sur http://doubleclick.net, si le nom de domaine ne peut être résolu, c'est que Pi-Hole a filtré la demande (veillez à désactiver tout bloqueur de pubs intégré au navigateur en amont). Quid du serveur DNS secondaire ? Bien qu'il puisse être rassurant d'envoyer comme serveur DNS secondaire l'IP d'un serveur DNS publique, pour qu'en cas d'indisponibilité de Pi-Hole, la résolution DNS globale soit toujours active sur le votre réseau local, il arrive qu'un périphérique préfère s'adresser au DNS secondaire plutôt que primaire, et dans ce cas-là les requêtes n'étant accessibles que localement échoueront. Pour éviter ces désagréments, on peut mettre en place un deuxième serveur Pi-Hole sur un périphérique simple comme un Raspberry Pi, une machine virtuelle sur un autre serveur ou un autre NAS compatible Docker si on en possède un. La suite s'adresse aux utilisateurs souhaitant pousser plus avant la configuration de Pi-Hole. - AVANCÉ - 9. Modes d'utilisation 9-A. Pi-Hole + serveur DNS local + serveur DHCP Ce point n'est pas abordé dans le tutoriel, je ne trouve pas ça prudent de laisser un conteneur du NAS gérer le serveur DHCP, c'est beaucoup moins stable qu'un périphérique dédié comme un routeur, avec une installation native. Et sans DHCP, vos périphériques ne pourront non seulement pas discuter entre eux, mais pas accéder à Internet non plus. 9-B. Pi-Hole + serveur DNS local Dans le cas où vous avez déjà un serveur DNS local actif sur votre NAS ou tout autre périphérique, vous pouvez placer Pi-Hole en amont du serveur DNS local. Il faudra alors donner comme valeur à la variable d'environnement DNS1 l'IP de l'hôte du serveur DNS. Si vous avez une redondance de serveurs DNS local, pensez à compléter DNS2 de manière analogue. Vos périphériques interrogeront d'abord Pi-hole, qui transmettra ensuite la requête à votre serveur DNS local, lui-même transmettra aux redirecteurs que vous lui avez précisés si la requête n'est pas résoluble localement. Périphérique -> Pi-Hole -> Serveur DNS local -> Serveur publique "upstream" ATTENTION : Si vous utilisez un serveur DNS sur l'hôte même (par exemple DNS Server), il faut utiliser l'IP virtuelle du NAS, pas son IP physique habituelle (merci à @anorec). 9-C. Pi-Hole en tant que serveur DNS local 9-C-1. Ajout des enregistrements Il est possible d'utiliser directement Pi-Hole comme résolveur DNS local. C'est extrêmement pratique si vous n'avez encore mis aucune résolution locale en place (avec DNS Server par exemple). ATTENTION : Pi-Hole n'est pas en mesure d'être source d'autorité pour une zone publique, il faut pour cela passer par exemple par des logiciels comme BIND ou DNS Server de DSM, qui n'en est qu'une surcouche. Pour se faire on se rend sur la page d'accueil de Pi-Hole, on se connecte en cliquant sur Login, on utilise le mot de passe précédemment défini dans le fichier compose. Dans le menu latéral apparaît l'onglet Local DNS, deux sous-menus apparaissent : DNS Records et CNAME Records : Le premier permet de définir les enregistrements A pour le domaine et les périphériques de votre réseau. Le second permet de définir des alias pour les domaines précédemment définis. Une image est plus parlante qu'un long discours : Notes : Depuis mon réseau local, taper domaine1.fr dans mon navigateur m'amènera sur l'IP de ma passerelle. Si ma box ou mon routeur expose son interface sur le port 80, j'arriverai dessus. J'ai volontairement donné à domaine2.fr une IP inexistante sur le réseau, Pi-Hole ne vous indiquera aucune erreur, il se contente de vous indiquer la direction, même s'il y a un fossé trois mètres plus loin. 😉 C'est votre navigateur qui y sera confronté et vous renverra une erreur. nas.domaine1.fr pointe sur mon NAS, sur lequel par exemple je pourrais utiliser un proxy inversé. Et maintenant dans CNAME Records, je vais par exemple définir des alias pour mes périphériques et pour mon proxy inversé : REMARQUE : La seule règle doit être que la cible de l'enregistrement CNAME (le contenu de la colonne Target) doit avoir été préalablement définie dans la partie DNS records. Le rafraichissement de la zone se faisant à chaque nouvel ajout, il faut qu'il soit valide. 9-C-2. Vérification On peut vérifier par acquis de conscience que la résolution est bien effective : docker exec -it pi-hole bash En tapant ceci on se connecte directement dans le conteneur, à la suite de quoi on réalise quelques tests de résolution DNS : nslookup domaine1.fr nslookup domaine2.fr nslookup nas.domaine1.fr nslookup bitwarden.domaine1.fr nslookup nas.fauxdomaine.fr On peut ainsi vérifier qu'un ensemble d'enregistrements existent dans notre zone locale de Pi-Hole, et même d'autres qui n'existent pas pour lesquels Pi-Hole devrait nous renvoyer une valeur NXDOMAIN (Non-existent domain). 10. Blocage différencié Un des gros avantages de Pi-Hole face à la concurrence est la possibilité de créer des groupes de périphériques pour lesquels on peut personnaliser les listes de blocage, ou même désactiver Pi-Hole complètement. Ou a contrario d'être beaucoup plus restrictif. Quelques exemples concrets : Jeux mobiles : certains jeux gratuits nécessitent de visionner des vidéos pour pouvoir continuer de jouer. Il y a des grandes chances que Pi-Hole bloque ces publicités et altère en conséquence votre expérience de jeu. Il n'est pas rare qu'on souhaite contrôler strictement ce que du matériel domotique (caméra, détecteur, etc...) peut envoyer sur la toile. En ajoutant certaines listes de blocage pour cette catégorie d'équipements, on peut avoir la maîtrise des données transférées sans pour autant générer un nombre importants de faux-positifs sur les autres périphériques du réseau. On peut laisser actif Google Shopping pour madame. 🙂 C'est dans l'onglet Group Management que ça se passe, lequel comprend quatre sous-menus : Groups, Clients, Domains et Adlists. On se dirige en premier lieu dans Groups, dans lequel j'ai ajouté un groupe pour mon smartphone : Si je clique sur Enabled, la valeur passera à Disabled et Pi-Hole sera désactivé pour ce groupe, les requêtes seront directement transmises au(x) redirecteur(s). Dans Clients, je peux choisir dans la liste déroulante un des périphériques vus par Pi-Hole par son adresse MAC (ainsi que l'IP et éventuellement le nom d'hôte s'il en a connaissance). Il faut également choisir à quel groupe le périphérique appartient dans la cellule Group Management, et penser à appuyer sur Apply une fois le choix effectué : Dans Domains, je peux ajouter des domaines (liste blanche ou noire) manuellement (avec ou sans wildcard), ici j'utilise une chaîne regex pour autoriser certaines publicités pour un jeu installé sur mon smartphone : Dans le dernier sous-menu Adlists, je n'ai rien touché aux listes, j'ai laissé celles par défaut pour tous mes périphériques : 11. Commandes utiles Pour redémarrer le conteneur : docker restart pi-hole où pi-hole est le nom donné au conteneur. ____________________________ Pour l'arrêter et le supprimer : docker-compose -f /volume1/docker/pi-hole/docker-compose.yml down L'argument -f permettant de spécifier un fichier en dehors du dossier courant. ____________________________ Pour supprimer toutes les données de Pi-Hole (pour refaire une installation propre par exemple), il suffit de supprimer les dossiers dans le dossier du conteneur : cd /volume1/docker/pi-hole docker-compose down rm -ri etc-pihole etc-dnsmasq.d ____________________________ Pour le mettre à jour et le reconstruire : cd /volume1/docker/pi-hole docker-compose pull docker-compose up -d MàJ : 20/01/2023 Modifié le 20 janvier 2023 par .Shad. Refonte du tutoriel 7 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
anorec Posté(e) le 12 février 2021 Partager Posté(e) le 12 février 2021 Bonjour et merci infiniment pour ce super tutoriel tres clair qui va probablement me permettre de faire enfin fonctionner correctement mon installation de Pi-hole sur le NAS en créant l'interface virtuelle. @.Shad. Un détail, en lisant la documentation de Pi-hole au sujet des variables d'environnement (lien que tu donnes dans le tuto), il semble que les variables 'CONDITIONAL_FORWARDING...' fonctionnent encore mais elles ont été déprécié et remplacé par d'autres. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bruno78 Posté(e) le 12 février 2021 Partager Posté(e) le 12 février 2021 @.Shad. Très beau tuto ! Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 12 février 2021 Auteur Partager Posté(e) le 12 février 2021 @anorec : Bien vu, j'avais fait la modification sur le Pi-hole de mon serveur Debian, pas sur celui de mon NAS, et je me suis basé sur celui du NAS 😉 Je vais corriger ça. 🙂 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bruno78 Posté(e) le 12 février 2021 Partager Posté(e) le 12 février 2021 @.Shad. j'ai juste une remarque : dans l'assignation des adresses MAC, elles ne sont pas tout à fait au hasard : le dernier bit du premier octet doit être positionné à 0, càd un premier octet pair. Sinon c'est refusé. Bruno78 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 12 février 2021 Auteur Partager Posté(e) le 12 février 2021 (modifié) @bruno78 Alors c'est étrange, j'ai un peu triché car en réalité je n'ai pas utilisé cette adresse MAC, mais c'est celle qui apparaissait dans mon impression d'écran. 😛 Donc si l'interface s'attribue elle-même une adresse MAC, elle peut s'affranchir de cette limitation ? Modifié le 12 février 2021 par .Shad. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bruno78 Posté(e) le 12 février 2021 Partager Posté(e) le 12 février 2021 Le 06/02/2021 à 19:04, .Shad. a dit : ip link set dev mac0 address 5E:11:4F:AF:D6:D2 @.Shad., je ne sais pas te répondre si l'adresse est "auto-attribuée", mais là dans ton exemple c'est bon : 5E est bien pair. Après, de mémoire, c'est lorsque je spécifie une adresse MAC dans le docker-compose que j'ai eu ce problème. Et du coup je ne crois pas avoir fait l'essai avec le link. On trouve quelques références à ce propos : par exemple ip - Why the first octet of a MAC address always end with a binary 0? - Network Engineering Stack Exchange 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 12 février 2021 Auteur Partager Posté(e) le 12 février 2021 Ok, merci, je vais ajouter une note à ce sujet. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bruno78 Posté(e) le 12 février 2021 Partager Posté(e) le 12 février 2021 @.Shad. je viens de faire l'essai : PAIR (5E) : OK root@ds918blam:~# ip link add mac1 link ovs_eth0 type macvlan mode bridge root@ds918blam:~# ip link set dev mac1 address 5E:11:4F:AF:D6:D2 root@ds918blam:~# IMPAIR (5F) : KO root@ds918blam:~# ip link add mac1 link ovs_eth0 type macvlan mode bridge root@ds918blam:~# ip link set dev mac1 address 5F:11:4F:AF:D6:D2 RTNETLINK answers: Cannot assign requested address root@ds918blam:~# bruno78 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 12 février 2021 Auteur Partager Posté(e) le 12 février 2021 Ok super merci j'ajoute une précision. 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
anorec Posté(e) le 18 février 2021 Partager Posté(e) le 18 février 2021 @.Shad. Dans le paragraphe Pi-hole + serveur DNS local Il peut être intéressant de rappeler/préciser que si le serveur DNS se trouve sur l'hote (Synology DNS Server), il faut renseigner l'@IP de l'interface virtuelle dans DNS1. (Si j'ai bien compris!) 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 18 février 2021 Auteur Partager Posté(e) le 18 février 2021 (modifié) Tu as tout à fait raison, je vais ajouter la précision. 😉 EDIT : Le tutoriel te paraît clair autrement ? je pense que tu es le seul à l'avoir parcouru pour l'instant. 😛 Modifié le 18 février 2021 par .Shad. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
anorec Posté(e) le 18 février 2021 Partager Posté(e) le 18 février 2021 @.Shad. Je n'ai suivi que certaines partie (script de création de l'interface virtuelle) car j'ai déjà un docker pihole fonctionnel mais le tutoriel me semble clair. Je pense à le suivre à partir de zéro quand j'aurais plus de temps car j'ai essayé de modifier certaines variables d'environnement de mon instance Pihole existante (pour le conditional forwarding) mais ensuite le docker Pihole ne parvient plus à démarrer. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tordux Posté(e) le 19 février 2021 Partager Posté(e) le 19 février 2021 @.Shad. Bonjour et bravo pour ce tuto 🙂 J'ai rencontré un problème lors de docker-compose pull && docker-compose up -d . En effet, le dossier var-logs/lighttpd ne s'est pas créé ainsi que les fichiers access.log et error.log à l'intérieur Je les ai créé à la main ne sachant pas le faire avec docker ^^ De plus j'ai vu 2 petites coquilles : Le 06/02/2021 à 19:04, .Shad. a dit : En cas d'erreur dans la transcription, il suffit de supprimer le réseau malformé pour recommencer : docker network rm macvlan-net Plutôt : docker network rm macvlan-network Le 06/02/2021 à 19:04, .Shad. a dit : Ici on est dans le dossier /volume1/docker/networks/mac0-interface.sh Tout fonctionne maintenant. Encore bravo 👏 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 19 février 2021 Auteur Partager Posté(e) le 19 février 2021 Merci beaucoup @Tordux de ton retour, bien vu pour les coquilles, je vais corriger ça. Pour le dossier var-logs je vais regarder, j'ai une petite idée du pourquoi ça pourrait planter, je mettrai la solution ici quand j'aurai trouvé. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 20 février 2021 Auteur Partager Posté(e) le 20 février 2021 (modifié) Alors j'ai regardé pour le problème avec le dossier var-logs. J'ai extrapolé une configuration que j'ai faite chez moi, sauf que là où elle fonctionne sur une Debian, elle ne fonctionne pas sur le NAS. Cela donnait l'avantage d'avoir les logs rapidement à portée, mais il existe plein d'autres méthodes pour les visualiser, typiquement la commande docker logs, Docker dans DSM, Portainer ou encore directement dans le conteneur. Je supprime ce montage de volume. Merci encore @Tordux de ton retour. Modifié le 20 février 2021 par .Shad. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MilesTEG1 Posté(e) le 20 février 2021 Partager Posté(e) le 20 février 2021 Hooo ! Le beau tuto tout neuf 😄 Je l'ai lu assez vite en diagonale, mais le peu que j'ai lu me semble clair, comme d'habitude avec tes tutos ^^ Est-ce que tu serais d'accord que je me serve de ton tuto pour en faire une variante pour AdGuard-Home ? Je n'utilise plus Pi-Hole au profit d'AdGuard-Home. Il faudra cependant que j'applique ton tuto à mon AdGuard-Home qui est actuellement en mode HOST (je ne peux donc pas faire du DNS chiffré). Ça fait un moment que je voulais tenter le macvlan pour AdGuard, mais j'ai jamais pris le temps de m'y pencher dessus, et ton tuto tombe à pic 😛 Merci en tout cas pour ce super tuto 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 20 février 2021 Auteur Partager Posté(e) le 20 février 2021 Salut, Je ne sais pas à quel point c'est réplicable pour Adguard, mais si tu y trouves ton inspiration, n'hésite pas. Après tu peux toujours pointer vers ce tutoriel concernant la mise en place du réseau macvlan, et traiter la partie configuration d'Adguard uniquement. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MilesTEG1 Posté(e) le 20 février 2021 Partager Posté(e) le 20 février 2021 (modifié) 👋🏻@.Shad. Je peux faire ça en effet 😉 À voir, mais dans tous les cas, je te citerais comme étant l'auteur de ce que j'utiliserais 😇 Mais faut tout d'abord que j'essaie de mettre AdGuard en macvlan 😉 Au fait, elle fait quoi la variable $_ dans la commande suivante ? mkdir -p /volume1/docker/pi-hole && cd $_ J'ai bien une idée de ce que ça fait : ça va dans le dossier précédemment créé, mais trouve pas la doc qui va avec sur le net pour expliquer cette variables. Je connais un certain nombre : $* $1 $2 $? $@ $# $0 mais la $_ je la trouve nulle part expliquée. PS : il manque vraiment des langage dans la balise code... Y aurait pas moyen d'en rajouter ? (Shell, yaml, etc...) Modifié le 20 février 2021 par MilesTEG1 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 20 février 2021 Auteur Partager Posté(e) le 20 février 2021 Ici : https://askubuntu.com/questions/1198935/what-is-the-purpose-of-the-special-parameter-single-underscore-in-environm 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MilesTEG1 Posté(e) le 20 février 2021 Partager Posté(e) le 20 février 2021 Ok merci :) C'est pas si simple que ça en a l'air ;) Mais purée, fallait la trouver l'explication. Tu as appris ça tout seul ? Ou bien en cours d'info ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MrLiink49 Posté(e) le 20 février 2021 Partager Posté(e) le 20 février 2021 Merci Shad pour le tuto 😻 Malgré la création de l'interface virtuelle je n'arrive pas à me reconnecter sur mon NAS (je suis obligé de repasser sur le DHCP de ma box) Pourriez-vous m'aider à comprendre ce qui bloque s'il vous plait ? Réseau macvlan du PiHole (docker network inspect macvlan_pihole) : [~] # docker network inspect macvlan_pihole [ { "Name": "macvlan_pihole", "Id": "a372a582a1818d27a1c18c2059208468b8a5c5492aba0ff3e3724bf653d22e7e", "Created": "2021-02-19T16:39:07.562501074+01:00", "Scope": "local", "Driver": "macvlan", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.1.0/24", "IPRange": "192.168.1.101/32", "Gateway": "192.168.1.254" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "55dd144ec9e0326d8588c1e287a5eac7e8778488ac5d51f3aa5f332bde6c32a7": { "Name": "pihole", "EndpointID": "524a3ca9e7982dc483d9d56bb23fe68118956b09f1c46e24789bc258200dba80", "MacAddress": "XXXXXXXXXX", #masqué "IPv4Address": "192.168.1.101/24", "IPv6Address": "" } }, "Options": { "parent": "eth0" }, "Labels": {} } ] Script utilisé pour créer l'interface virtuelle (adapté du tuto à ma config) : ip link add mac0 link eth0 type macvlan mode bridge #"eth0" dans mon cas ip addr add 192.168.1.200/32 dev mac0 #J'ai laissé la même plage que dans le tuto ip link set dev mac0 address 5E:11:4F:AF:D6:D2 #même adresse mac, n'existe pas sur mon réseau ip link set mac0 up ip route add 192.168.1.101/32 dev mac0 #192.1.101/32 est la plage défini lors de la création de mon réseau macvlan (voir ci-dessus) Si je vérifie, l'interface virtuelle est bien créée : [~] # ifconfig | grep -A 9 mac0 mac0 Link encap:Ethernet HWaddr 5E:11:4F:AF:D6:D2 inet addr:192.168.1.200 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4116 errors:0 dropped:0 overruns:0 frame:0 TX packets:421 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:798090 (779.3 KiB) TX bytes:79729 (77.8 KiB) veth144d8db Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX #masqué UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Je repasse sur le DHCP du PiHole (en désactivant celui de la box) : OK + reboot de la box Accès à l'interface web de mon NAS (IP : 192.168.1.86) : KO Accès web via l'IP de l'interface virtuelle (192.168.1.200) : KO Check via l'interface web de Pihole : je retrouver tous mes autres équipements mais pas le NAS :( Merci d'avance à celui ou celle qui voudra bien voler à mon secours 😭 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 21 février 2021 Auteur Partager Posté(e) le 21 février 2021 (modifié) Salut, Il n'y a que depuis le conteneur Pi-hole que tu dois utiliser l'IP de l'interface virtuelle pour accéder au NAS, tous les périphériques autres que l'hôte peuvent y accéder via l'IP habituelle. Que donne, depuis le NAS, un ping sur l'IP du conteneur 192.168.1.101 ? Inversement, tu peux tester depuis le conteneur, tu te connectes en SSH sur ton NAS et tu tapes : docker exec -it pihole ping 192.168.1.86 où pihole est le nom de ton conteur pi-hole. Autre chose, j'éviterais d'inclure dans la plage de mon serveur DHCP la plage que se réserve le réseau macvlan (dans ton cas une seule IP, mais autant éviter). Modifié le 21 février 2021 par .Shad. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 21 février 2021 Auteur Partager Posté(e) le 21 février 2021 (modifié) Le 20/02/2021 à 13:57, MilesTEG1 a dit : Ok merci 🙂 C'est pas si simple que ça en a l'air 😉 Mais purée, fallait la trouver l'explication. Tu as appris ça tout seul ? Ou bien en cours d'info ? J'ai jamais suivi de cours d'informatique. 🙂 Mon métier n'a rien à voir. 😉 C'était juste que je cherchais comment entrer directement dans un dossier après l'avoir créé, et j'étais tombé sur cette commande ma foi bien utile. 😉 Modifié le 21 février 2021 par .Shad. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MrLiink49 Posté(e) le 21 février 2021 Partager Posté(e) le 21 février 2021 (modifié) Il y a 19 heures, .Shad. a dit : Autre chose, j'éviterais d'inclure dans la plage de mon serveur DHCP la plage que se réserve le réseau macvlan (dans ton cas une seule IP, mais autant éviter). J'ai effectivement remodifié le range jusqu'à 192.168.1.100 hier soir 🙂 ---------------------------------------------------------------------------- Il y a 19 heures, .Shad. a dit : Il n'y a que depuis le conteneur Pi-hole que tu dois utiliser l'IP de l'interface virtuelle pour accéder au NAS, tous les périphériques autres que l'hôte peuvent y accéder via l'IP habituelle. Justement mes autres périphériques n'arrivent pas à se connecter avec l'IP habituelle (192.168.1.86) 😞 ---------------------------------------------------------------------------- Il y a 19 heures, .Shad. a dit : Que donne, depuis le NAS, un ping sur l'IP du conteneur 192.168.1.101 ? DHCP de la box : ON, ping : OK (si je passe sur le dhcp pi hole, je n'ai plus accès en SSH au NAS donc .. ^^) [~] # ping 192.168.1.101 PING 192.168.1.101 (192.168.1.101): 56 data bytes 64 bytes from 192.168.1.101: seq=0 ttl=64 time=2.654 ms 64 bytes from 192.168.1.101: seq=1 ttl=64 time=0.108 ms 64 bytes from 192.168.1.101: seq=2 ttl=64 time=0.095 ms ---------------------------------------------------------------------------- Il y a 19 heures, .Shad. a dit : Inversement, tu peux tester depuis le conteneur, tu te connectes en SSH sur ton NAS et tu tapes : docker exec -it pihole ping 192.168.1.86 où pihole est le nom de ton conteur pi-hole. Mon container s'appelle pihole ça tombe bien : DHCP box : ON, ping KO : [~] # docker exec -it pihole ping 192.168.1.86 PING 192.168.1.86 (192.168.1.86) 56(84) bytes of data. From 192.168.1.101 icmp_seq=1 Destination Host Unreachable From 192.168.1.101 icmp_seq=5 Destination Host Unreachable From 192.168.1.101 icmp_seq=6 Destination Host Unreachable Mais si je ping sur le 192.168.1.200 (interface virtuelle), ping : OK (ce qui me semble normal donc) [~] # docker exec -it pihole ping 192.168.1.200 PING 192.168.1.200 (192.168.1.200) 56(84) bytes of data. 64 bytes from 192.168.1.200: icmp_seq=1 ttl=64 time=0.107 ms 64 bytes from 192.168.1.200: icmp_seq=2 ttl=64 time=0.096 ms 64 bytes from 192.168.1.200: icmp_seq=3 ttl=64 time=0.096 ms De plus, dans le network overview, je vois bien que PiHole détecte l'interface virtuelle 192.168.1.200, c'est donc mon nas qui ne passe pas par cette IP pour communiquer avec le container PiHole ? Modifié le 21 février 2021 par MrLiink49 added : ping interface virtuelle 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.