Pfsense, VPN et AWS : résolution de noms

 

pfSense est un firewall opensource utilisé de plus en plus souvent, que ce soit en virtuel ou en physique, pour protéger des infrastructures et créer des VPN. L’une des possibilités est d’ailleurs d’ouvrir un VPN IPSEC vers Amazon AWS (VPC) pour se relier à son cloud en permanence.

Récemment j’ai eu le soucis de constater que tous les ordinateurs derrière un pfsense ne pouvaient pas faire de résolution de noms AWS, en particulier les noms des databases RDS. Après une enquête minutieuse j’ai constaté à la fois que

  1. les DNS d’AWS acceptent de résoudre ces noms “purement internes” et “hautement redondants” (tout le monde est en 172.31 sur le vpc par défaut) de façon mondiale ( on peut faire un dig d’un nom de db RDS “privée”, et on recevra en réponse une ip non routable type 172.31.X.Y – range IP utilisée pour le VPC par défaut).
  2. les DNS cache des principaux ISP, et google via les 8.8.8.8, supportent parfaitement ce comportement : ils forwardent vers les dns AWS qui répondent.
  3. Tous les clients LAN (DHCP) derrière pfsense ne recoivent jamais cette résolution. Il leur est impossible d’accéder à leur DB RDS, ce qui est d’autant plus un comble que pfSense fournit un wizard pour se connecter en IPSEC à son VPC.
  4. Etrangement, si le client interroge en direct le 8.8.8.8 il recoit une réponse. C’est s’il utilise pfsense (cas typique d’un LAN en DHCP) que le client ne recoit jamais la réponse. Il recoit un CNAME mais la partie recursive n’arrive pas.

Au final je vous épargne la recherche ; pfsense contient dans un recoin dans “advanced settings” une soit-disante “protection” contre les rebindings attacks : un grand mot pour dire que pfsense jette silencieusement toutes les réponses DNS qui consistent en une ip non routable. Il est donc impératif, si vous voulez que les clients DHCP (qui utilisent pfsense comme DNS par défaut) puisse joindre des DB RDS via le VPN, que vous désactiviez cette “protection” d’un autre age.

 

qgxgumuvszzf

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *