Expérimenter Nebula Mesh - Partie 2

mardi 2 août 2022 · 4 minutes · 716 mots

Dans mon précédent billet, j’avais configuré un réseau sécurisé sur 2 machines virtuelles à l’aide de Nebula.

Cette fois, je tente de faire communiquer un client et un serveur MySQL à travers le tunnel Nebula.

La particularité est que je veux que le serveur et le client tournent dans des containers. En plus, je vais utiliser Podman, au lieu de Docker.

Je redémarre les machines virtuelles :

1vagrant up

Pour ne pas redémarrer Nebula à la main à chaque fois, je vais configurer systemd. Je génère un fichier de configuration pour nebula :

 1cat <<EOF > nebula.service
 2echo 
 3[Unit]
 4Description=Nebula service
 5[Service]
 6Type=simple
 7ExecStart=/opt/nebula/nebula -config /etc/nebula/config.yml
 8Restart=on-failure
 9[Install]
10WantedBy=multi-user.target
11EOF

Puis je le pousse sur boxA dans /tmp. J’aurai aimé le poussé directement à sa place, c’est-à-dire /etc/systemd/system mais cela nécessite des droits plus importants :

1vagrant upload nebula.service /tmp/ boxA

Une fois le ficher dans le /tmp, j’exécute une commande en élévation de privilège (sudo) sur boxA pour le placer au bon endroit :

1vagrant ssh boxA -c "sudo mv /tmp/nebula.service /etc/systemd/system/"

Enfin, j’active le service pour qu’il démarre au boot.

1vagrant ssh boxA -c "sudo systemctl enable nebula"

Du coup, même punition pour la boxB. Je recopie le fichier :

1vagrant upload nebula.service /tmp/ boxB

Puis je le place où il faut :

1vagrant ssh boxB -c "sudo mv /tmp/nebula.service /etc/systemd/system/"

Et enfin, j’active le service :

1vagrant ssh boxB -c "sudo systemctl enable nebula"

Autour de l’installation de Podman maintenant, d’abord sur boxA :

1vagrant ssh boxA -c "sudo apt install -y podman && sudo reboot"

Et ensuite sur boxB :

1vagrant ssh boxB -c "sudo apt install -y podman && sudo reboot"

Je dois redémarrer les machines après l’installation de podman car ce dernier a besoin d’une session utilisateur pour pouvoir s’exécuter en rootless, d’où le reboot en dernière commande.

Et comme Nebula a été configuré en systemd, le réseau sécurisé fonctionnera au redémarrage.

J’attends que les 2 machines soient bien relancées pour continuer. En exécutant vagrant status, je peux voir l’état des machines :

1> vagrant status
2
3Current machine states: 
4
5boxA                      running (virtualbox)
6boxB                      running (virtualbox)

Je vais maintenant installer l’image de MySQL et lancer son serveur sur boxA :

1vagrant ssh boxA -c "podman run -p 192.168.168.100:3306:3306 --name=db --env MYSQL_ALLOW_EMPTY_PASSWORD='true' -dt docker.io/library/mysql"

Je décrypte cette commande :

podman run : j’utilise Podman sans sudo (c’est son énorme avantage sur Docker) pour démarrer un container avec MySQL dedans.

-p 192.168.168.100:3306:3306 : je publie sur l’IP Nebula (192.168.168.100) et le port 3306 (celui de MySQL) : c’est très important de spécifier que le serveur MySQL puisse écouter sur cette IP sinon impossible de le joindre depuis une autre machine.

–name=db : j’indique aussi un nom à ce container (db) pour le manipuler plus facilement par la suite.

–env MYSQL_ALLOW_EMPTY_PASSWORD=‘true’ : j’indique que je veux un mot de passe vide pour MySQL : je peux me le permettre car c’est juste un test. Evidemment, en production, je ne fais pas ça.

-dt docker.io/library/mysql": et enfin je spécifie l’image de MySQL à installer.

Je vérifie que le serveur est bien lancé grâce à la commande podman ps :

1> vagrant ssh boxA -c "podman ps"
2
3CONTAINER ID  IMAGE                    COMMAND  CREATED         STATUS             PORTS                           NAMES
4d6c2625aafb4  docker.io/library/mysql  mysqld   30 seconds ago  Up 30 seconds ago  192.168.168.100:3306->3306/tcp  db

Ça fonctionne !

Il reste à tester que je peux m’y connecter depuis boxB. J’utilise une commande podman similaire au serveur MySQL plys haut, mais cette fois, j’exécute le client MySQL en précisant l’emplacement du serveur, à travers le tunnel Nebula.

Si tout fonctionne, je devrais avoir le prompt de MySQL :

 1> vagrant ssh boxB -c "podman run -ti --rm docker.io/library/mysql mysql -h192.168.168.100 -uroot"
 2Welcome to the MySQL monitor.  Commands end with ; or \g.
 3Your MySQL connection id is 9
 4Server version: 8.0.29 MySQL Community Server - GPL
 5
 6Copyright (c) 2000, 2022, Oracle and/or its affiliates.
 7
 8Oracle is a registered trademark of Oracle Corporation and/or its
 9affiliates. Other names may be trademarks of their respective
10owners.
11
12Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
13
14mysql> show databases;
15+--------------------+
16| Database           |
17+--------------------+
18| information_schema |
19| mysql              |
20| performance_schema |
21| sys                |
22+--------------------+
234 rows in set (0.01 sec)
24
25mysql>

Hourra!

Technique Linux