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.