PfSense DNS / split horizon



  • Suite au point évoqué dans ce fil, et plus particulière sur l'aspect "split DNS"
    @ccnet:

    La solution s'appelle split horizon. Du classique. Pfsense vous permet de gérer cela.

    je me suis livré à quelques recherches car le sujet m'intéresse.
    Mon infrastructure s'appuie sur un DNS qui n'est pas celui de pfSense et une meilleure compréhension du fonctionnement de celui me permettrait peut-être de simplifier l'ensemble.

    Pour mieux comprendre la suite, je rappelle que l'objectif du split DNS, ou split horizon consiste à fournir au client du service DNS une réponse qui dépend de l'adresse source du client.
    Cela permet de faire des vues  du même DNS et de soit cacher des adresses IP soit renvoyer une IP adaptée au client.
    par exemple le DNS contient des adresses IP pour des machines situées sur une DMZ mais seules quelques unes sont supposées être accessibles aux clients DNS qui sont sur cette DMZ. Avec un split DNS, tout en maintenant un seul serveur DNS, on ne va pas renvoyer d'adresse pour les machines qui ne sont pas supposées être joignables.

    Pour le moment, à la lecture des différents documents trouvés sur le site de pfSense et quelques fils dans le forum, ma compréhension est la suivante:

    • les différents services DNS de pfSense ne permettent pas de faire ce genre de chose. Que ce soit "DNS forwarder" qui se base sur dnsmasq ou "DNS resolver" qui se base sur Unbound, il est uniquement possible de réécrire l'adresse IP par rapport à ce qui serait maintenu sur un autre DNS et d'intercaler le DNS de pfSense pour que celui-ci prenne la priorité.

    La doc de pfSense est très claire de ce point de vue, même si la terminologie utilisée est confusante (misleading)

    Dans ce document, la doc explique:

    Method 2: Split DNS

    The more elegant solution to this problem involves using Split DNS. Basically this means that internal and external clients resolve hostnames differently.

    Internal clients would access resources by hostname, not IP, and clients on the local network would resolve that hostname to the LAN IP address of the actual server, and not the WAN IP as others outside the network would see.

    In order for this to work using the DNS forwarder in pfSense, clients will need to have the IP Address of the pfSense router as their primary DNS server.

    Example:

    www.example.com resolves to public IP 1.2.3.4, which is the WAN IP
        Forward port 80 on 1.2.3.4 to port 80 on 192.168.1.5
        Override www.example.com using System > DNS Forwarder and point www.example.com to 192.168.1.5
            Another internal DNS mechanism could also be used to enact the override.

    la phrase

    The more elegant solution to this problem involves using Split DNS. Basically this means that internal and external clients resolve hostnames differently.

    bien que exacte, est incomplète.
    Elle devrait plutôt être:

    Basically this means that internal and external clients resolve hostnames differently assuming external clients use another DNS.

    Il est très clair qu'il ne s'agit pas d'un split (au sens généralement admis du terme) mais d'une réécriture de l'adresse IP, et donc la nécessité de gérer un autre DNS.
    La documentation pfSense précise que le son DNS (voir le lien relatif à DNS Forwarder) ne doit répondre qu'à des clients internes et ne jamais être exposé sur le web.

    A noter que DNS Resolver permet de mettre en place des ACL, ce qui offre un contrôle sur "qui" est autorisé à faire des requêtes DNS mais ce n'est quand même pas du split DNS et donc je vais rester avec mon DNS actuel au moins jusqu'à ce que ma compréhension évolue  :)

    En attendant, je vais écrire à ceux qui maintiennent la doc pour suggérer quelques ajustements  ;D

    Pour être plus précis dans mon analyse: dnsmasq permet, grâce à l'option "-y, –localise-queries" de renvoyer une adresse IP en fonction de l'interface qu client DNS mais je ne vois pas de moyen d'utiliser cette option dans l’implémentation qu'en fait pfSense.