Il m’arrive parfois d’être confronté à déployer ses playbooks Ansible sur une machine sans accès à internet en zone restreinte. Mais il faut déployer des tâches ayant un dépôt github par exemple… Dans ce cas, l’utilisation d’un proxy socks sur ce serveur est très utile!


Utilisation simple d’un Ansible proxy socks

Pour expliquer l’utilisation de proxy avec Ansible, il faut d’abord comprendre la base : créer un proxy socks depuis une machine sans internet en zone restreinte vers une machine ayant internet en ssh. Pour ma part, je préfère ouvrir ssh dans un screen pour laisser un visu et fermer la connexion par la suite. Il est possible d’utiliser l’argument ssh permettant créer la connexion en arrière plan.

Sur notre serveur sans internet :

~$ ssh -4 -D 8888 mon_serveur_avec_internet
~$ curl -m 5 perdu.com
curl: (28) Failed to connect to perdu.com port 80 after 3852 ms: Connection timed out
~$ export ALL_PROXY="socks5://localhost:8888"
~$ curl -m 5 perdu.com
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>
~$ export ALL_PROXY=

On a donc bien accès à internet depuis notre machine.

Il arrive parfois que vous n’ayez même pas un serveur sur qui rebondir… A ce moment là il est possible d’utiliser votre propre machine comme passerelle! Pour cela il faut faire 2 choses :

  • Depuis votre pc, vous créez avec ssh un bind de port reverse sur votre propre machine en vous connectant sur la machine n’ayant pas accès à internet :
~$ ssh -R 2222:127.0.0.1:22 serveur_sans_internet
  • La console vers le serveur sans internet s’ouvre
  • Vous créez le port dynamique pour le socks sur le port local 2222 du serveur (qui va rediriger vers le ssh de votre pc

~$ ssh -4 -D 8888 -p 2222 127.0.0.1
  • Vous ouvrez un second terminal pour vous connecter directement au serveur et vous avez accès au net
~$ export ALL_PROXY="socks5://localhost:8888"
~$ curl -m 5 perdu.com
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>

Ansible et proxy ssh socks

Variable d’environnement du role Ansible

Dans un playbook, nous pouvons ajouter directement une directive environment qui sera utilisée sur un role ou une tasks. Exemple dans un playbook automysqlbackup :

- name: Automysqlbackup Installation
  hosts: databases_dump_server

  roles:
    - role: roles/database/belgotux.automysqlbackup
      environment:
        all_proxy: "socks5://localhost:8888"

Cela va faire l’équivalent de l’export vu plus haut : export ALL_PROXY="socks5://localhost:8888"

Pour en savoir plus sur le rôle Ansible Automysqlbackup.

Utilisation plus générique et facultative sur un playbook existant

On peut utiliser une variable proxy qui sera utilisée dans les variables de l’hôte ou du groupe si besoin d’utiliser un proxy. Avec l’option default pour ne pas que notre playbook soit inutilisable sur un serveur n’ayant pas besoin de proxy…

playbook.yml :

- name: Automysqlbackup Installation
  hosts: databases_dump_server

  roles:
    - role: roles/database/belgotux.automysqlbackup
      environment:
        all_proxy: "{{ proxy | default('')}}"

hote.yml :

proxy: "socks5://localhost:8888"
Summary
Ansible proxy avec machine sans internet
Article Name
Ansible proxy avec machine sans internet
Description
Création d'un proxy socks ssh pour déployer des playbooks Ansible sur une machine sans accès à internet.
Author