Voici comment utiliser la solution PiHole (bloqueur de pub via DNS) avec Pfsense (Firewall).
On pourra donc proposer les avantages de PiHole aux clients de notre réseau tout en gardant la possibilité de résoudre les noms locaux.

Configuration PiHole

Dans mon cas, j’utilise PiHole uniquement pour son role de DNS, il sera l’unique DNS de mon réseau.
Je n’utilise donc pas les fonctions DHCP sur le PiHole, mais bien sur le PfSense.

La première étape est donc d’installer PiHole sur son réseau local (sur un raspberry pi, image docker, VM,…), je ne m’attarde pas.
Nous pouvons ensuite nous connecter sur l’interface Web. La seule chose à configurer est le conditional forwarding pour permettre de résoudre les noms des clients locaux.

En gros on va dire, « pour résoudre les IPs qui sont dans tel réseau, va plutôt interroger ce serveur DNS spécifique » (ça sera notre pfsense). Pour cela on va utiliser l’option conditional forwarder:

Conditional Forwarding sur PiHole

Ici j’ai configuré cette option de façon qu’il interroge mon firewall (pfsense – 192.168.1.1) pour résoudre les IPs dans le réseau 192.168.1.0/24.

NB: Si vous voulez mettre plusieurs entrées (Si vous avez plusieurs réseaux locaux par exemple), il est possible d’en ajouter mais en modifiant le fichier de config de PiHole en ligne de commande.

Configuration PfSense

DNS Settings

On va configurer PfSense pour qu’il utilise PiHole. (Tout le monde à la meme enseigne ^^)
Dans configuration générale, on renseigne l’ip de notre PiHole et on lui dit de ne pas contacter le serveur DNS en local.

PfSense – Configuration générale

DHCP

Sous Services -> Serveur DHCP vous pouvez modifier pour chaque réseau le champ DNS et renseigner l’ip du serveur PiHole

PfSense – Serveur DHCP -> Champ DNS

Ainsi on indique aux clients de notre LAN d’utiliser PiHole comme DNS.

DNS

Le service DNS Forwarder n’est plus utile donc on peut le désactiver sur le Pfsense.

Le service DNS Resolver quant à lui va nous permettre de résoudre les noms des périphériques connectés sur le LAN (il ne servira à rien d’autre). Il faut donc l’activer et cocher les 3 cases pour résoudres les IPs de nos clients qui ont contactés le DHCP

PfSense – DNS Resolver

Rule

Au niveau des règles, je vous conseille de bloquer les clients à contacter d’autres DNS que notre PiHole (mais quand meme laisser PiHole contacter le port 53/UDP vers internet).

Si vous avez plusieurs réseaux LAN sur votre PfSense, pensez à autoriser les clients à contacter PiHole.

A Savoir

Si vous n’aimez pas PiHole, il est aussi possible d’intégrer directement cette fonctionnalité avec package dans PfSense (PfBlocker-ng). ça fait le meme boulot, mais l’UI de PiHole est plus sympathique et flexible. Cela nous permet également de mettre en place d’autres fonctions (comme DNSCrypt).

Si vous souhaitez mettre en place un hotspot avec accès payant (pour un hôtel ou autre) il existe une solution pratique et open-source.

Cet outil s’appelle ZeroShell, il ne sert pas que de portail captif/hotspot. Il peut faire du Load Balancing, Routage, proxy HTTP, VPN, Radius, QoS,… Bref une belle petite distribution pour ajouter des fonctionnalités à votre réseau 🙂 Cela peut être vu comme une alternative à PfSense ou Opnsense qui contient aussi à peu de choses prés les mêmes outils, le portail captif de pfsense est juste un peu moins avancé.

Pour les personnes qui veulent une solution plus personnalisée, il existe notamment CoovaChilli, phpmyprepaid avec freeradius. Le projet coovachilli n’est plus soutenu depuis 2012, mais il en faut pour tout les gouts.

N’hésitez pas à me faire parvenir vos feedbacks.