chproxy ou comment adapter mon proxy à chaque établissement de la connexion

Spécifier le proxy à utiliser pour son système est parfois une galère car chaque application utilise son propre système. Mandriva a réalisé un petit outil « drakproxy » qui permet de réaliser cela simplement (mais malheureusement, pour les cas simples…) quel que soit son environnement de bureau.

Mais il y a deux gros (énormes) problèmes avec une telle solution : lorsque l’on désire changer de proxy, les changements ne se font qu’après déconnexion de la session et reconnexion. C’est malheureusement une limitation qu’il est difficile de résoudre pour le moment étant donné que la plupart des applications utilisent des variables d’environnement pour connaitre le/les proxy utilisés (c’est au moins le cas des applications KDE). L’autre problème, c’est que pour utiliser cette application, il faut être root et surtout, la lancer… ce qui est embêtant lorsque l’on souhaite changer de proxy très souvent (c’est mon cas : au boulot, j’utilise un proxy et chez moi, j’en utilise un autre).

Auparavant, j’utilisais netprofile (qui permet la gestion de profils réseaux), mais cette solution est lourde et semble abandonnée par Mandriva (si quelqu’un a un équivalent, d’ailleurs… n’hésitez pas à le mentionner dans les commentaires). Puis, je me suis souvenu d’un mail sur la liste cooker qui parlait de la manière de lancer un script à chaque branchement du câble réseau (ou connexion à un point d’accès wifi) : ce mail indiquant qu’il fallait placer le-dit script dans /etc/sysconfig/network-scripts/ifup.d/.

J’ai donc bidouillé deux petits scripts qui me permettent de réaliser ce que je souhaite : en fonction du réseau auquel je me connecte, mes proxy sont adaptés automatiquement ! Il y a des limitations quand même : les deux réseaux sont identifiés par leur adresse de « network », c’est à dire qu’ils ne doivent pas avoir les mêmes notations CIDR. Si vous avez un réseau 192.168.0.0/16 au boulot et à la maison, le script ne fera pas la différence…

Le premier (petit) script à placer dans /etc/sysconfig/network-scripts/ifup.d/ va appeler le deuxième avec un argument qui indique dans quel réseau vous vous trouvez. Ce script est appelé automatiquement lors de l’établissement de la connexion réseau avec le nom de l’interface comme paramètre :

#!/bin/sh

IP_ADDR_MASK=`ip addr show dev $1 | grep "inet[^6]" | awk '{print $2}'`

[ -n "$IP_ADDR_MASK" ] || exit 1

eval `ipcalc -n $IP_ADDR_MASK`

if [ "$NETWORK" = "10.XXX.XXX.XXX" -o "$NETWORK" = "10.YYY.YYY.YYY" ]; then
/etc/sysconfig/network-scripts/chproxy boulot
else
/etc/sysconfig/network-scripts/chproxy default
fi

Le deuxième script baptisé « chproxy » permet d’activer les changement de proxy et est à placer dans /etc/sysconfig/network-scripts/

#!/bin/sh
usage()
{
echo <<!
usage : $0 [-l]
$0 profile

        -l      List all profiles available
!
}

listprofiles()
{
echo "not implemented yet..."
ls /etc/profile.d/proxy.sh.*
ls /etc/firefox.cfg.*
ls /etc/profile.d/proxy.csh.*
}

if ( [ -z "$1" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ] )
then
usage
exit 1
fi

if ( [ "$1" = "-l" ] )
then
listprofiles
exit 0
fi

# Switch to profile

[ -f "/etc/profile.d/proxy.sh.$1"  ] && cp -f /etc/profile.d/proxy.sh.$1 /etc/profile.d/proxy.sh
[ -f "/etc/profile.d/proxy.csh.$1"  ] && cp -f /etc/profile.d/proxy.csh.$1 /etc/profile.d/proxy.csh
[ -f "/etc/firefox.cfg.$1" ] && cp -f /etc/firefox.cfg.$1 /etc/firefox.cfg
[ -f "/etc/urpmi/proxy.cfg.$1"  ] && cp -f /etc/urpmi/proxy.cfg.$1 /etc/urpmi/proxy.cfg

Bon, je ne conseille à personne l’utilisation de ces scripts, sans avoir un minimum lu ce qu’il font et sans savoir réellement comment fonctionne Mandriva ou dérivés ou parents proches.

Quand même une petite explication du fonctionnement du deuxième script, car il ne fonctionne pas « comme par magie ».

En fait, il se contente de remplacer les fichiers de configuration de 2 applications (firefox et urpmi) ainsi que remplacer le script qui change le proxy dans les variables d’environnement à chaque connexion (utilisé par toutes les applis KDE et sûrement d’autres applications).

Il vous faut donc d’abord configurer le proxy de toutes ces applications pour qu’elles fonctionnent correctement, puis copier leur fichier de configuration (dont on voir le chemin à la fin du script) en ajoutant à l’extension du fichier votre nom de profil. Ça parrait bien mystique, mais voici par exemple ce que donne « ls /etc/firefox.cfg* » chez moi :
/etc/firefox.cfg
/etc/firefox.cfg.default
/etc/firefox.cfg.boulot

J’ai donc mon fichier de configuration courant et deux fichiers de configuration qui correspondent à mes deux profils.

Tout ceci est encore un peu en chantier, mais utilisable dès maintenant et j’avais envie de partager cela avec vous, car ça m’a ôté une belle épine du pied et j’espère que ça pourra servir à quelqu’un.

About these ads

7 Réponses to “chproxy ou comment adapter mon proxy à chaque établissement de la connexion”

  1. Jérôme Martin Says:

    Un truc qui a rien a voir avec le présent post mais sur Planet Mandriva l’ensemble de tes posts ont pour titre « yoho ».

  2. yoho Says:

    Je ne sais pas si c’est l’ensemble de mes posts : ce ne serait pas plutôt ceux avec des accents ?

  3. Olivier Says:

    Pour Firefox, j’ai utilisé pendant longtemps l’extension switchproxy.

    Pour les scripts, une petite astuce qui permet de différencier entre le boulot et la maison : pinger une machine interne, voir même le proxy.

    Par exemple, au lieu de regarder sa propre adresse ip, tu fais ping -c 1 proxyBoulot.maboite.fr et le résultat te dit si tu es au boulot ou pas.

    Bien sûr, il faut qu’un ping sur cette machine ne donne rien depuis la maison, mais j’ose espérer que le proxy est pas public :)

  4. yoho Says:

    Oui, c’est une bonne possibilité d’amélioration. En fait, il faudrait généraliser tout cela avec un script qui « détecte » l’environnement à l’aide de plusieurs autres petits scripts (qui pingent, qui véirifient l’adresse IP, et certainement d’autres choses possibles) + un autre script qui « effectue » réellement le boulot de changer certains fichiers de conf, là encore à l’aide d’autres petits scripts (là, c’est limité au proxy, mais ça pourrait être d’autres types de fichiers). On aurait vraiment un framework générique avec ça. Ce dernier script aurait aussi la possibilité de faire certaines actions (redémarrer un service par exemple).

    On arriverait à un netprofile version 2, beaucoup mieux conçu et plus générique et extensible.

    D’autre part, on pourrait se débrouiller pour avoir un « script de session » qui se lance au démarrage de la session utilisateur et qui modifie les paramètres de l’utilisateur aussi en fonction du profil dans lequel on se trouve, par exemple, je ne vérifie pas mon compte gmail au boulot en imap, car c’est bloqué, mais je le vérifie chez moi.

    Mais bon, je manque de temps pour réaliser une telle bête. Néanmoins, l’idée est intéressante.

  5. blino (Olivier Blin) Says:

    Nous avons metaconf ( http://niemeyer.net/metaconf ) en contrib pour utiliser un profil suivant le lieu (en détectant une certaine adresse MAC sur le réseau), et il y a d’autres alternatives comme guessnet et whereami.
    Cf ce mail sur debian-laptop@ pour plus de pistes :

    http://lists.debian.org/debian-laptop/2003/01/msg00028.html

  6. yoho Says:

    J’ai lu la page de metaconf : c’est génial et ça régle mon problème d’avoir un framework générique pour modifier des options de configuration. Je ne comprends pas, par contre, comment on peut l’utiliser pour « détecter » l’environnement dans lequel on est (comme tu sembles le dire pour la MAC addresse).

    Guessnet semble par contre la solution de « détection » et (ce que j’aime bien) il se contente de faire cela.

    Whereami semble par contre plus générique, peut-être mieux conçus mais nettement moins documenté, bref du pur Debian :D

    Je vais m’attaquer d’abord à Guessnet + metaconf et je vais ensuite voir ce que je peux faire avec whereami + metaconf. Merci pour toutes ces infos en tout cas, olivier !

  7. yoho Says:

    Pour faire un peu rabat-joie, il y a un truc quand même que je n’aime pas dans metaconf : il suppose qu’il y aura peu de changements entre deux fichiers de configuration et tu dois te palucher un fichier de configuration en XML qui liste tout les changements que tu veux faire dans ton fichier de configuration. Pas très pratique… le language de description des changements est relativement complexe et tu dois tout apprendre.

    Donc, sur ce point, je préfère ma méthode qui laisse plus de choix quand aux changements qu’on peut faire dans les fichiers conf. Pour résumer ma méthode : si tu as 3 profils P1, P2, P3 et deux fichiers de configuration C1 et C2, tu créeras 6 fichiers C1.P1, C1.P2, C1.P3, C2.P1, C2.P2, C3.P3 et si tu veux utiliser le profil P2, tu écrase le fichier C1 avec C1.P2 et C2 avec C2.P2. Ça laisse le choix total quand aux changements qu’on peut faire dans le fichier de conf et on a juste qu’à connaître la syntaxe du fichier de conf, pas besoin d’apprendre la syntaxe de metaconf + le XML.


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Suivre

Recevez les nouvelles publications par mail.

%d blogueurs aiment cette page :