Surcharge de noms DNS sur pfsense

Dans certains cas particuliers, on peut avoir besoin de “surcharger” uniquement certains noms DNS, afin d'obtenir une IP locale, sans pour autant gérer tout le domaine en local. (par exemple: la majorité des hôtes d'un domaines sont extérieur à votre réseau, il vous faut donc obtenir les IP publiques depuis les DNS autoritaire, mais une machine se trouve dans votre DMZ, et est donc joignable par une IP locale, non routable).

Pfsense permet ce genre d'astuce depuis l'interface DNS Forwarder. Seulement, ça ne fonctionne que pour les entrées de type A. Si vous voulez aussi pouvoir surcharger les réponses aux requêtes AAAA ou MX, voilà comment faire:

* Éditer /etc/inc/services.inc, et cherchez la ligne qui commence par mwexec(“/usr/local/sbin/dnsmasq. Elle doit ressembler à quelques chose comme:

mwexec("/usr/local/sbin/dnsmasq --local-ttl 1 --all-servers {$dns_rebind} --dns-forward-max=5000 --cache-size=10000 {$args}")
;

On va modifier cette ligne pour indiquer un fichier depuis lequel chercher les correspondances pour les entrées AAAA, et on va aussi spécifier un fichier de configuration local, pour y insérer les entrées MX

mwexec("/usr/local/sbin/dnsmasq --addn-hosts=/etc/hosts.aaaa --conf-file=/usr/local/etc/dnsmasq.conf --local-ttl 1 --all-servers {$dns_rebind} --dns-forward-max=5000 --cache-size=10000 {$args}")
;

Maintenant, on va créer le fichier /etc/hosts.aaaa pour y mettre nos entrées AAAA (on pourrait les ajouter dans le fichier /etc/hosts, mais ce fichier est regénérer dès qu'on valide les changement depuis l'interface web), par exemple:

::ffff:172.26.3.12 www.mondomaine.com

Et on crée maintenant le fichier /usr/local/etc/dnsmasq.conf, dans lequel on va mettre nos entrées MX:

mx-host=www.mondomaine.com,mail.mondomaine.com
mx-host=domaine2.com,192.168.172.2

Il ne reste plus qu'à aller sur l'interface web de pfsense pour valider les changements