Objectif

  • L'utilisation de LXD derrière un bridge "lxdbr0" impose d'utiliser des règles de NAT. Une seule adresse réseau est visible (celle de l'hôte), et bien sur à cause du DNAT, chaque port ne peux être dirigé que vers un seul conteneur.
  • J'ai donc cherché une autre solution, pour que chaque élève dispose :
    • D'un conteneur avec une adresse personnelle dans le réseau commun du lycée.
    • D'un conteneur totalement accéssible, au niveau de tous les ports.
  • La nouvelle solution peux être comparé à la mise à disposition d'un VPS pour chaque élève.

La soution, utiliser MACVLAN

  • J'utilise un serveur LXD 2.0.11 sur Ubuntu16.04 64 bits.
  • Je part d'un serveur LXD classique, c'est à dire avec un bridge "lxdbr0" correctement configuré (dans mon cas avec un réseau 192.168.222.0/24). Voir mon précédent article
  • Il ne faut rien installer d'autre. La solution qui consiste à créer un nouveau brige avec "bridge-utils" n'a rien à voir avec macvlan !
  • Il faut ensuite créer un nouveau profil, le nom de celui-ci est librement choisi. Personellement J'ai choisi "macvlan" :
    • lxc profile copy default macvlan
    • lxc profile edit macvlan , puis changer les lignes :
      • nictype: macvlan
      • parent: enp1s0  (c'est le nom de ma carte réseau)

Le fichier de configuration ressemble à celui-ci, pour 1 CPU et 256 Mo de mémoire :

config:
  environment.http_proxy: ""
  limits.cpu: "1"
  limits.memory: 256MB
  user.network_mode: ""
description: Macvlan 256 MB
devices:
  eth0:
    name: eth0
    nictype: macvlan
    parent: enp1s0
    type: nic
name: macvlan
used_by: []

  • Eventuellement, lxc profile list , permet de vérifier que le nouveau profile existe.

Installation sur une machine virtuelle proxmox (tests)

  • Le processeur utilise les IO-APIC
  • La carte de la machine proxmox doit être en mode promisc
  • Il faut également activer le mode promisc sur le système ubuntu :
    ip link set enp0s3 promisc on
  • Il est possible d'ajouter cette commande à la fin de /etc/rc.local

Création d'un nouveau conteneur qui utilise MACVLAN

  • lxc init images:ubuntu/14.04 essai
  • lxc profile apply essai macvlan
  • lxc start essai
  • lxc info essai  (permet de vérifier que le profil est bien actif)

Le conteneur, prend alors une IPv6 par le DHCP virtuel "lxdbr0" (parasite) et une IPv4 par le DHCP du lycée.

  • Dans le fichier /etc/sysctl.conf du conteneur, je conseille d'ajouter à la fin la ligne :
    • net.ipv6.conf.all.disable_ipv6 = 1

NB : Il y a une limitation au mode réseau macvlan :

  • La machine hôte ne peux pas communiquer par réseau avec les conteneurs, mais les commandes lxc fonctionnent.
  • Par contre les conteneurs peuvent communiquer entre eux, et avec l'ensemble du réseau (mais pas avec l'hôte).