07/07/2020

Création de container à la volée avec dnsmasq

Dnsmasq est un serveur très léger conçu pour fournir les services DNS et DHCP.

Installation

La première étape est de créer le container dnsmasq :

La machine (ou container) doit être accessible depuis les autres et doit avoir une ip fixe.

Pour l’exemple on va prendre le réseau 10.0.30.0/24. Le bridge est 10.0.30.1. Par convention je vais prendre la première ip disponible pour mon DNS : 10.0.30.2

lxc.uts.name = dnsmasq
lxc.start.auto = 1

# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:92:a0:84
lxc.net.0.ipv4.address = 10.0.30.2/24
lxc.net.0.name = eth1
lxc.net.0.ipv4.gateway = 10.0.33.1

Si vous ajouter une interface réseau eth0 au container, au lancement, linux va automatiquement chercher un dns. Cette action prend quelque secondes mais nous n’avons pas besoin car le dns a une ip fixe. Pour l’éviter il y a 2 solutions :

  1. Nommer l’interface eth1 au lieu de eth0
lxc.net.0.name = eth1

C’est cette solution que j’ai utilisé dans la config au dessus :

  1. Desactiver la recherche du dns

Supprimez ou commentez la configuration dans le container concerné :

#auto eth0
#iface eth0 inet dhcp

Ensuite on install dnsmasq sur le container

apt install dnsmasq

Votre dhcp doit se baser sur un autre dns pour les nom de domain qui ne connais pas. Il suffit juste de le rensigner dans le fichier /etc/resolv.conf

nameserver 208.69.38.205

Ici j’ai pris opendns

Maintenant il faut configurer notre dhcp : la configuration se situe dans le fichier /etc/dnsmasq.conf.

log-dhcp
dhcp-range=[ip debut],[ip fin],[temps validité de l'ip]h
dhcp-option=option:netmask,[masque sous réseau]
dhcp-option=option:router,[ip router]
dhcp-option=option:dns-server,[ip server dns]
dhcp-option=option:ntp-server,[ip server ntp]
dhcp-option=option:domain-name,[nom de domaine]

Exemple :

log-dhcp
dhcp-range=10.0.30.127,10.0.30.254
dhcp-option=option:netmask,255.255.255.0
dhcp-option=option:router,10.0.30.2
dhcp-option=option:dns-server,10.0.30.2
dhcp-option=option:ntp-server,10.0.30.2
dhcp-option=option:domain-name,dns.home

Avec cette conf, le dhcp pourra délilver j’usqu’à 127 ip.

Ensuite il faut le redémarer :

systemctl restart dnsmasq

Voilà le dhcp fonctionne. Il nous reste plus qu’au créer nos containers.

Je vous conseille de mettre une conf réseau par defaut dans le fichier /etc/lxc/default.conf

lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
#lxc.net.0.ipv4.address = 10.0.30.x/24
lxc.net.0.name = eth0
#lxc.net.0.ipv4.gateway = 10.0.30.1

#lxc.start.auto = 1

A l’inverse du dnsmasq, j’ai mis l’interface eth0 au demarrage il cherchera automatiquement.

Nom de domain

Pour les nom de domaine, dnsmasq le fait automatiquement, le container mysql aura comme nom mysql.

ping mysql

PING mysql (10.0.30.139) 56(84) bytes of data.
64 bytes from mysql.home (10.0.30.139): icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from mysql.home (10.0.30.139): icmp_seq=2 ttl=64 time=0.079 ms

Si vous voulez rajouter des domaine suplémentaire, il faut rajouter des entrées dans le /etc/hosts car dnsmasq prend en compte cette configuration au lancement.

# lxc container
10.0.33.166     nginx.home
10.0.33.167     mysql.home
10.0.33.168     debian.home
10.0.33.170     apache2.home adminer.home
systemctl restart dnsmasq

Voilà !