LXC : le réseau

LXC  le réseau.

La partie réseau est gérée par « lxc-net » qui est un démon que se lance au démarrage du système. 
Sa configuration n’est pas complexe mais, pour être fonctionnelle rapidement, nécessite la création d’une interface « pont » dédiée et donc la présence des "br-utils".

Ici et pour ne pas modifier une configuration réseau « qui marche » déjà avec deux ponts j’ai préféré rajouter une carte réseau dédiée dans ma machine de développement. Le seul problème que j’ai rencontré est le fait que l’interface supplémentaire s’est « intercalée » entre les deux interfaces existantes et qu’il a fallu que je modifie la config d'un des deux ponts déjà existants … "ensp3s0" est devenu "ensp4s0" dans ma config. 
J’ai ajouté dans /etc/network/interfaces :

allow-hotplug enp3s0 iface br2 inet static address 192.168.3.1 netmask 255.255.255.0 network 192.168.3.0 broadcast 192.168.3.255 bridge_ports enp3s0 bridge_maxwait 1

Contenu du fichier de config de « lxc-net «  dans / etc / default / lxc-net :

USE_LXC_BRIDGE="true" 
LXC_BRIDGE="br2" 
LXC_ADDR="192.168.3.1" 
LXC_NETMASK="255.255.255.0" 
LXC_NETWORK="192.168.3.0/24" 
LXC_DHCP_RANGE="192.168.3.0,192.168.3.255" 
LXC_DHCP_MAX="254" 
LXC_DHCP_CONF_FILE="" 
LXC_DOMAIN=""

En ce qui concerne le fichier de config de mon instance « debian-a » déjà créée par « lxc-create -n debian-a -t debian » j’ai ajouté à la fin du fichier /var/lib/lxc/debian-a/config :

# pour le réseau eth0 
lxc.net.0.type = veth 
# lxc.net.0.veth.mode = bridge 
lxc.net.0.link = br2 
lxc.net.0.name = eth0 
lxc.net.0.ipv4.address = 192.168.3.11/24 
lxc.net.0.ipv4.gateway = 192.168.3.1 
lxc.net.0.flags = up

Comme lxc-net utilise dnsmasq il est nécessaire de désactiver un autre serveur DNS, ici j’ai du désactiver bind9.

D’autre part lxc-net utilise dnsmasq mais il lui transfère un paramètre indésirable (-U dnsmasq) qui déclenche chez moi une erreur de dnsmasq, il m’ a donc fallu : 
renommer « dnsmasq » en « dnsmasq_real », faire un script « dnsmasq » qui contient :

#!/bin/bash 
# 
# Faux dnsmasq pour analyser et filtrer les paramètres reçus 
# 
# ------------------------------------------------------------------------------ 
shift 
shift 
/usr/sbin/dnsmasq_real $*

Afin d’éliminer les deux paramètres superflus. Une fois cette « manip » réalisée dnsmasq est bien présent comme le montre un "ps" après un reboot et l’adresse de mon pont « br2 » est bien celle attendue.

On va pouvoir passer à la suite.