firefox, les proxy et les adresses locales

Après m’être fait suer quelques heures sur un problème débile de conf de proxy Firefox, j’ai décidé d’en faire part dans ce billet. Ca fera peut-être gagner du temps à certains. Vu que la litterature sur le sujet est assez éparpillée (voir à la fin de l’article). La seule vraie information semble être un bugzilla de Mozilla, daté de 2001 et toujours en cours de discussion ! (au moins jusqu’à mi 2008)

L’histoire est la suivante

Vous utilisez un proxy, mais vous ne voulez pas l’utiliser pour les adresses locales (genre : vos intranets). C’est un choix raisonnable.
Bien sûr, vous voulez utiliser les noms de hosts et pas les FQDN, exemple : http://serveur/ et pas http://serveur.masociete.net/
Raisonnable là aussi

Le constat d’échec

- Sous IE, lorsque vous cochez “ne pas utiliser de proxy pour les adresses locales”, ça fait ce qu’on veut (waaa, m’enfin, il y a d’autres travers avec IE)

- Sous firefox, c’est moins simple :

  • Si vous indiquez “.masociete.net” dans les adresses à exclure (notez le “.”), alors les adresses du genre http://serveur.masociete.net/ sont bien traitées en direct (bypass du proxy) et les adresses courtes “peuvent” marcher :
    • Ca marche si : par exemple avec Squid, vous avez ajouté le paramètre “append_domain” contenant votre “societe.net”. MAIS : vous passez par le proxy même pour ces sites locaux. C’est débile ! (mais ça marche, on est d’accord)
    • Ca ne marche pas sinon, Firefox commence à chercher sur google ce que pourrait être votre nom de host… Et pas la peine de vous exciter sur la conf DNS de votre PC windows pour lui faire ajouter des suffixes DNS partout, ça ne change rien
  • Si vous ne mettez aucune exclusion, ça revient au même. Les syntaxes genre ” *.masociete.net” ne sont pas reconnues (silencieusement)
  • Enfin, si vous vous limitez à exclure des plages d’IP, genre 192.168.x.y/m ça ne suffit pas. Firefox se gourre (de mon point de vue) car il raisonne sur le nom et pas sur l’IP. Donc le filtre marchera bien si vous tapez “http://une.adr.esse.ip/” mais fera comme expliqué ci-dessus avec les noms de machines

La seule solution (il me semble) industrialisable

En passant par un fichier “PAC” (voir mon article sur le sujet), alors ça marche.
Le secret ? ce mécanisme force à résoudre l’IP associée au nom avant de commencer à réfléchir, via la fonction isInNet par exemple (isPlainHostName doit pouvoir marcher aussi) ; de là, si on voit qu’on est sur telle plage d’IP, on fait sans le proxy, en DIRECT.
Exemple ultra-simple de conf :
function FindProxyForURL(url, host)
{
if (isInNet(host, "192.168.0.0", "255.255.0.0")) {
return "DIRECT";
}
else
return "PROXY mon_proxy:3128";
}

Reste à déployer ce script et modifier les conf des navigateurs. A vos GPO, scripts Samba, registrie etc.

Quelques références

https://bugzilla.mozilla.org/show_bug.cgi?id=72444
https://bugzilla.mozilla.org/show_bug.cgi?id=91587
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q303650
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262981
Bonne lecture, surtout pour le premier…

Si vous avez une meilleure solution je suis preneur…
Notez que je n’ai pas testé depuis un firefox sous Linux ; mon propos étant dans une entreprise avec des postes Windows.

Vus : 345
Publié par Michauko : 64