User Tools

Site Tools


virtualisation:docker-dnsmasq

Dnsmasq : dans un conteneur

Installer Dnsmasq depuis les dépôts

sudo apt-get -y install dnsmasq

Construire Dnsmasq depuis les sources

Prérequis

Installer les packages suivants

sudo apt-get update
sudo apt-get -y install wget 
sudo apt-get -y install build-essential
sudo apt-get -y install apt-utils
sudo apt-get -y install pkg-config
sudo apt-get -y install idn
sudo apt-get -y install libidn11-dev
sudo apt-get -y install gettext 
sudo apt-get -y -t wheezy-backports install nettle-dev
sudo apt-get -y -t wheezy-backports install dnsutils 

Récupérer les sources et construire les biniaires

wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.73.tar.gz tar xvzf dnsmasq-2.73.tar.gz cd dnsmasq-2.73 make all-i18n COPTS="-DHAVE_DNSSEC -DHAVE_DNSSEC_STATIC"

Réduire la taille

strip ./src/dnsmasq 

Tester les binaires et déployer les binaires

Le binaire dnsmasq doit se trouver à la base du dossier src

sudo cp ./src/dnsmasq  /usr/sbin/dnsmasq

Configuration

Configurer Dnsmasq.

vi /etc/dnsmasq.conf

le fichier dnsmasq.conf ressemble à ceci:

interface=eth0
user=root
domain-needed
bogus-priv
no-resolv
local=/mydomain.io/
no-poll
server=/server.education/10.0.0.10
no-hosts
addn-hosts=/etc/dnsmasq_static_hosts.conf
expand-hosts
domain=mydomain.io
dhcp-range=192.168.2.10,192.168.2.250,255.255.255.0,192.168.2.255,5m
# Have windows machine release on shutdown
dhcp-option=vendor:MSFT,2,1i
# No default route
dhcp-option=3
  • domain-needed: ne jamais transmettre les noms simples (décommenter)
  • bogus-priv: ne jamais transférer les adresses dans les espaces adresse non routés (décommenter)
  • strict-order: interroger chaque serveur strictement dans l'ordre indiqué dans resolv.conf (décommenter)
  • server=/server.education/10.0.0.10: interroge le nom de domaine spécifique sur le serveur DNS spécifique l'exemple signifie que le domaine de la requête [server.education] est dirigé vers le serveur [10.0.0.10] (ajouter si besoin)
  • expand-hosts: ajouter le nom de domaine automatiquement (décommenter)
  • domain=mydomain.io: définir le nom de domaine (ajouter)
  • dhcp-range: La machine hôte a une adresse statique de 192.168.2.2.

Démarrer dnsmasq

systemctl start dnsmasq
systemctl enable dnsmasq

Ajouter les enregistrements DNS, à /etc/hosts.

Ensuite, Dnsmasq souhaite répondre aux requêtes des clients.

vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# add records
10.0.0.30   dlp.srv.world dlp

Redémarrer le serveur

systemctl restart dnsmasq

Autoriser le service DNS dans firewalld

firewall-cmd --add-service=dns --permanent
success

firewall-cmd --reload
success

Vérifier la résolution du nom

Vérifier la résolution du nom ou de l'adresse IP d'un client du réseau interne.

Installer bind-utils

yum -y install bind-utils

Modifier les paramètres de l'environnement pour pointer vers le serveur Dnsmasq (remplacer “ens3” par l'interface réseau actif

nmcli c modify ens3 ipv4.dns 10.0.0.30
nmcli c down ens3; nmcli c up ens3

Tester la résolution de noms

dig dlp.srv.world.

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> dlp.srv.world
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11613
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dlp.srv.world.                 IN      A

;; ANSWER SECTION:
dlp.srv.world.          0       IN      A       10.0.0.30

;; Query time: 2 msec
;; SERVER: 10.0.0.30#53(10.0.0.30)
;; WHEN: Wed Aug 31 17:22:51 JST 2016
;; MSG SIZE  rcvd: 47

et la résolution inverse

dig -x 10.0.0.30

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> -x 10.0.0.30
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61937
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;30.0.0.10.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
30.0.0.10.in-addr.arpa. 0       IN      PTR     dlp.srv.world.

;; Query time: 3 msec
;; SERVER: 10.0.0.30#53(10.0.0.30)
;; WHEN: Wed Aug 31 17:24:00 JST 2016
;; MSG SIZE  rcvd: 67

Exécution du conteneur

Le conteneur veut avoir ses propres interfaces sur un sous-réseau virtuel (le réseau de ponts docker0). Donc, il veut essayer d'offrir des adresses sur ce sous-réseau.

Utiliser –net host dans la commande docker run afin de garantir que le conteneur utilise la pile de réseau de l'hôte plutôt que la sienne

docker run --name dnsmasq2 -t -v /vagrant/dnsmasq.conf:/opt/dnsmasq.conf -p 67:67/udp --net host centos
virtualisation/docker-dnsmasq.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1