5.2 - LXC network

En bas du fichier /etc/dnsmasq.conf nous avons écris :

dhcp-host=c1,10.0.3.11
dhcp-host=c2,10.0.3.12

Ainsi, le conteneur qui port le nom d'hôte (hostname) c1 se vera attribuer l'IP 10.0.3.11. le conteneur c2 aura l'IP 10.0.3.12. Pour que ces configurations soient opérationnelles, il faut redémarrer les conteneurs :

sudo service lxc-net restart
for ct in c1 c2; do sudo lxc-stop -n "$ct"; sudo lxc-start -n "$ct"; done; sleep 10; sudo lxc-ls -f

👉 Après avoir créé et supprimé de nombreux conteneurs, il peut arriver que les deux adresses IP ci-dessus aient déjà été attribuées par le serveur DHCP (émulé par dnsmasq). Pour faire le ménage dans les baux DHCP et faire perdre sa mémoire à dnsmasq, supprimer le fichier : /var/lib/misc/dnsmasq.lxcbr0.leases puis redémarrer le service lxc-net

Maintenant, on peut fixer l'accès des conteneurs pour de bon dans la config SSH du serveur :

# Attention, ici ça ce passe coté serveur Debian !
vi ~/.ssh/config

Et on ajoute :

Host c1
    HostName 10.0.3.11
    User user

Host c2
    HostName 10.0.3.12
    User user

Pour simplifier les communications de l'hôte (serveur Debian) avec les invités (conteneur c1, c2, ...), nous allons de nouveau générer une clé SSH, mais cette fois, sur le serveur Debian :

ssh-keygen

Laissez les choix par défaut et ne mettez pas de mot de passe, c'est inutile quand on est pas en production. Une fois la clé généré, il suffit de la copier sur les conteneur :

ssh-copy-id c1
ssh-copy-id c2

Pour chaque conteneur, il faudra donner le mot de passe une dernière fois. Il est désormais possible de se connecter via SSH d'un simple :

ssh c1
ssh c2
# ...

Coté client

Modifier la configuration SSH du client Ubuntu :

# Attention, ici ça ce passe coté client Ubuntu !
vi ~/.ssh/config
Host srv
    HostName 10.0.0.254
    User user

Host c1
    HostName 10.0.3.11
    User user

Host c2
    HostName 10.0.3.12
    User user

Puis copier la clé SSH. Si vous avez bien suivi les instructions, nous avions déjà généré une clé SSH pour le client Ubuntu à la fin de son installation. Si ce n'est pas le cas, un coup de ssh-keygen suffira, puis :

for target in srv c1 c2; do ssh-copy-id "$target"; done

Désormais, de simple ssh srv, ssh c1 ou ssh c2 suffiront à contacter le serveur Debian ou ces conteneurs

👉 À l'IMT d'Alès, n'ayant pas une structure DNS normal, pour pouvoir appeler les conteneurs par leurs noms avec d'autres commandes que ssh (ping, nmap, firefox, …), modifier le fichier /etc/hosts comme suis :

127.0.0.1       localhost
127.0.1.1       serveur-debian.admx.osef        serveur-debian

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# IMT Alès config
10.0.3.11 c1 c1.admx.osef
10.0.3.12 c2 c2.admx.osef

Coté hôte

Sur l'hôte, le NAT de virtualbox rend inaccessible les conteneurs hébergé sur le serveur. Du coup, il faut ajouter un ProxyJump pour indiquer à ssh qu'il faut d'abord contacter le serveur Debian (accessible sur le port 2222 de votre hôte) avant d'essayer de contacter les conteneurs. Cela donne :

# Attention, ici ça ce passe du coté de l'hôte !
vi ~/.ssh/config
Host srv
    Hostname localhost
    User user
    Port 2222
    IdentityFile ~/.ssh/cle_tp_admx

Host c1
    HostName 10.0.3.11
    ProxyJump srv
    User user
    IdentityFile ~/.ssh/cle_tp_admx

Host c2
    HostName 10.0.3.12
    ProxyJump srv
    User user
    IdentityFile ~/.ssh/cle_tp_admx

>>> Vous pouvez passer aux exercices