• Installation avec la commande : apt install lxd
  • En réalité, la commande apt execute un "snap". Il n'y a pas de version classique.

Première initialisation

  • Would you like to use LXD clustering : no
  • Do you want to configure a new storage pool : yes
  • Name of the new storage pool : default
  • Name of the storage backend to use : dir
  • Would you like to connect to a MAAS server : no
  • Would you like to create a new local network bridge : yes
  • What should the new bridge be called : lxdbr0
  • What IPv4 address should be used : 172.18.0.1/16
  • Would you like LXD to NAT IPv4 traffic on your bridge : yes
  • What IPv6 address should be used : none
  • Would you like LXD to be available over the network : no
  • Would you like stale cached images to be updated automatically : no
  • Would you like a YAML "lxd init" preseed to be printed : no

Configuration d'une adresse IP sur un conteneur (toto)

lxc stop toto
lxc network attach lxdbr0 toto eth0
lxc config device set toto eth0 ipv4.address 172.18.1.1
lxc start toto

Configuration du firewall (pour le NAT)

  • Il faut activer le routage, pour cela activez la ligne net.ipv4.ip_forward=1 dans le fichier /etc/sysctl.conf
  • Le fichier /etc/rc.local n'existe plus sur Ubuntu 20.04
  • Pour la configuration iptables, installez avec apt : iptables-persistent
  • Puis modifiez le fichier /etc/iptables/rules.v4 :
###########
# REGLES NAT
###########

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# SNAT
-A POSTROUTING -s 172.18.0.0/16 ! -d 172.18.0.0/16 -j MASQUERADE

# DNAT
-A PREROUTING -i enp0s3 -p tcp --dport 80 -j DNAT --to-destination 172.18.1.1:80

COMMIT

###########
# REGLES FIREWALL
###########

*filter
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]

COMMIT
  • Il est possible de relancer directement le service pour prendre en charge les modifications : /etc/init.d/netfilter-persistent restart

Mise en relation de deux serveurs LXD

  • lolo sera le serveur local (principal)
  • didi sera le serveur distant (sur un serveur dédié, adresse 1.2.3.4)

Sur didi

lxc config set core.https_address "[::]"
lxc config set core.trust_password unMotDePasseTrèsComplexe@!!

Sur lolo

lxc config set core.https_address "[::]"
lxc config set core.trust_password unMotDePasseTrèsComplexe@!!
lxc remote add didi 1.2.3.4

A partir de maintenant il est possible d'utiliser didi à partir de lolo, par exemple :

  • lxc list titi:
  • lxc stop titi:toto

Il est même possible de copier un conteneur de lolo vers didi (ou l'inverse)

lxc stop toto
lxc stop didi:toto
lxc delete didi:toto
lxc copy toto didi:toto