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

Configuration Pi-hole

Dans mon cas, j’utilise Pi-hole uniquement pour son rôle de DNS, il sera l’unique DNS de mon réseau.
Je n’utilise donc pas les fonctions DHCP sur le Pi-hole, mais bien sur le pfSense.

La première étape est donc d’installer Pi-hole sur son réseau local (sur un Raspberry Pi, image Docker, VM,…), je ne m’y 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 » (ce sera notre pfSense). Pour cela, on va utiliser l’option conditional forwarder :

Conditional Forwarding sur Pi-hole

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 Pi-hole en ligne de commande.

Configuration pfSense

DNS Settings

On va configurer pfSense pour qu’il utilise Pi-hole. (Tout le monde à la même enseigne ^^)
Dans Configuration générale, on renseigne l’IP de notre Pi-hole 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 Pi-hole.

pfSense – Serveur DHCP -> Champ DNS

Ainsi, on indique aux clients de notre LAN d’utiliser Pi-hole 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ésoudre les IPs de nos clients qui ont contacté le DHCP.

pfSense – DNS Resolver

Règle

Au niveau des règles, je vous conseille de bloquer les clients à contacter d’autres DNS que notre Pi-hole (mais quand même laisser Pi-hole contacter le port 53/UDP vers Internet).

Si vous avez plusieurs réseaux LAN sur votre pfSense, pensez à autoriser les clients à contacter Pi-hole.

À savoir

Si vous n’aimez pas Pi-hole, il est aussi possible d’intégrer directement cette fonctionnalité avec un package dans pfSense (PfBlockerNG). Ça fait le même boulot, mais l’UI de Pi-hole est plus sympathique et flexible. Cela nous permet également de mettre en place d’autres fonctions (comme DNSCrypt).

Pourquoi et quand activer TRIM ?

TRIM est une fonction qui permet d’améliorer la vitesse et la durée de vie d’un SSD. Une fois activé, l’OS aura la possibilité de connaître quels sont les blocs occupés. Plus d’infos

C’est donc une fonction intéressante, qui est activée par défaut sur la plupart des OS actuels. (Mais visiblement pas tous)
Activer TRIM n’a d’intérêt que si le système possède un SSD.

pfSense avec SSD

Suivant les besoins, les administrateurs réseaux (ou les bidouilleurs ^^) vont préférer choisir (ou construire) un firewall avec un SSD pour augmenter les performances du système et donc de la solution en général.

Dans mon cas, j’ai installé pfSense sur une petite machine avec plusieurs interfaces réseau et un SSD.

Après quelques semaines d’utilisation, je m’aperçois que la fonction TRIM est désactivée. Apparemment il est activé par défaut uniquement sur les équipements Netgate (le hardware officiel et corporate de pfSense).
Comme ici le pfSense tourne sur du matériel custom, il faudra l’activer manuellement. (Et ne pas oublier de le refaire en cas de réinstallation)

Vérifier le statut

Pour savoir si TRIM est activé sur pfSense, il faut lancer l’invite de commande (via SSH ou l’interface web par exemple) et lancer la commande

tunefs -p /

On aperçoit la ligne trim et le statut

tunefs: trim: (-t)                                        disabled

Si c’est enabled, tout est bon, il n’y a plus rien à faire. Dans le cas contraire, on va voir ci-dessous la procédure pour l’activer.

On va donc activer TRIM

On va encore devoir lancer quelques commandes :

/usr/local/sbin/ufslabels.sh

On modifie maintenant le fichier /boot/loader.conf.local pour activer l’AHCI (si ce n’était pas le cas). Il faut ajouter ahci_load= »YES » à la fin du fichier

vi /boot/loader.conf.local

On doit maintenant identifier l’ID de notre partition root (/dev/ufsid/xxx – notez l’ID à la place de xxx)

cat /etc/fstab

Maintenant on reboot et on démarre sur la clé USB d’installation de pfSense -> 2. Boot [S]ingle User

Une fois démarré sur la clé USB, on active TRIM sur notre partition root (remplacez xxx par l’ID récupéré plus haut)

/sbin/tunefs -t enable /dev/ufsid/xxx

On reboot

/sbin/reboot

On peut ensuite revérifier le statut qui est passé en enable et c’est fait 😉

tunefs -p /
....
tunefs: trim: (-t)                                        enabled

Source: https://gist.github.com/mdouchement/853fbd4185743689f58c

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 contiennent 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 tous les goûts.

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