dnsmasq

Mis en pratique ;-)

Chez TEA, The Ebook Alternative

Appuyez sur [s] pour ouvrir les notes présentateur dans une nouvelle fenêtre.

Qui ?

L'enfer des noms

Quelques approches

  • IP en dur partout
  • Modification manuelle des /etc/hosts

On a fait ça... c'était infernal !

dnsmasq

Serveur DNS facile à configurer

Principe

  • dnsmasq sur poste physique
  • Utilisé par toutes les machines
    • Poste de dev lui-même
    • Machines virtuelles
    • Conteneurs LXC / docker
  • Relai vers serveur DNS externe

Tester la résolution DNS

Commande dig

Debian


sudo apt-get install dnsutils
                    

Mac

Installé de base

Tester la résolution DNS

Sur un domaine local et sur un domaine externe

En utilisant le DNS par défaut


dig backend.lxc
dig www.google.com
                    

En précisant quel DNS utiliser


dig backend.lxc @127.0.0.1
dig www.google.com @127.0.0.1
                    

Installation

Linux


sudo apt-get install dnsmasq
                    

Mac


brew up
brew install dnsmasq
                    

Fichier de configuration

Linux


/etc/dnsmasq.conf
                    

Mac


/usr/local/etc/dnsmasq.conf
                    

Configuration


bind-interfaces
conf-dir=/etc/dnsmasq.d
resolv-file=/etc/resolv.dnsmasq.conf
                    

Mais où écouter ?

Interfaces réseau à travers lesquelles dnsmasq sera utilisé


listen-address=172.17.42.1         # docker0
listen-address=192.168.1.87        # vboxnet0
listen-address=127.0.0.1           # lo
                    

Ou écouter partout


listen-address=0.0.0.0             # toutes les interfaces
                    

Résolution externe

/etc/resolv.dnsmasq.conf


# Google's nameservers, for example
nameserver 8.8.8.8
nameserver 8.8.4.4
                    

Un fichier par service

/etc/dnsmasq.d/*.conf


# /etc/dnsmasq.d/tea-db
address=/tea-db/192.168.3.10
                    

# /etc/dnsmasq.d/ecommerce.lxc
address=/ecommerce.lxc/192.168.3.13
                    

Tip bien moche

Rendez /etc/dnsmasq.d/ accessible en écriture à votre utilisateur


sudo chmod -R o+w /etc/dnsmasq.d/
                    

Ou


sudo chown $USER -R /etc/dnsmasq.d/
                    

Et pour nous ?

DNS de certains services TEA, sur notre serveur interne


# /etc/dnsmasq.d/tea-ebook.com.conf
server=/staging.tea-ebook.com/192.168.1.200
                    

Attention au fichier hosts !

  • dnsmasq utilise /etc/hosts avant sa propre configuration
  • Faites du ménage !

Redémarrer dnsmasq

Linux


sudo /etc/init.d/dnsmasq restart
                    

Mac


sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq
                    

Configuration poste physique

Utiliser 127.0.0.1 comme serveur DNS du poste physique

"Comment" dépend de votre système, distribution, et environnement de bureau \o/

Configuration VM 1/3

Installer resolvconf


sudo apt-get install resolvconf
                    

Configuration VM 2/3

Utiliser le poste physique comme serveur DNS


# /etc/resolvconf/resolv.conf.d/head
nameserver 192.168.3.1         # vboxnet0
                    

Configuration VM 3/3

Redémarrer la VM

Configuration conteneur Docker

Lors du run, indiquer le serveur DNS à utiliser


# IP de l'interface docker0
docker run ... --dns=171.14.12.1 ...
                    

Et maintenant ?

À chaque nouveau service/nom :

  • Créer le fichier correspondant dans /etc/dnsmasq.d/
  • Redémarrer dnsmasq
  • ... et c'est tout ;-)

Questions ?

Troubleshooting ?

  • Au pire : plus de résolution DNS du tout
  • Vérifier :
    • Que dnsmasq est démarré
    • Qu'il n'y a pas de doublon de configuration
      • Plusieurs IPs pour un nom
      • Restes dans fichier hosts
    • Que la configuration globale n'a pas été écrasée par une MAJ

Présentation dnsmasq (chez TEA) — Pascal MARTIN, @pascal_martin