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
