Forum Linux.général Choix du proxy fonction du reseau.

Posté par  . Licence CC By‑SA.
1
1
oct.
2017

Hello,
J'aimerai connaitre comment vous faites pour configurer automatiquement le proxy de votre systĂšme qd vous avez un PC portable.
Par exemple, entre ma connexion personnelle derriÚre une box en 192.168.1/24 (pas de proxy) et celle de mon entreprise en 10/8 (proxy de l'entreprise), j'aimerai que la config du proxy soit automatiquement réglée (au niveau KDE et des variables http_proxy, no_proxy).

Idéalement, j'aurai bien voulu passer par un proxy local qui sache lire un proxy.pac ou un truc du genre.

Je suis preneur de toutes idées (et solutions élégantes :) ).

Par avance merci.

  • # proxydriver

    Posté par  . Évalué à 3.

    • je pense que proxydriver rĂ©pond en partie Ă  ta demande. Il s'appuie sur les capacitĂ©s de scripting de NetworkManager.
    • proxydriver sait piloter Firefox, Gnome, KDE.
    • je n'ai rien vu pour les aspects configuration de dĂ©pots. Nous avons un mirroir Debian sur notre rĂ©seau local ainsi que des paquets locaux.
  • # Mon bidouillage perso

    Posté par  . Évalué à 7.

    Alors, ça ne me concerne (pour l’instant) plus car aucun des rĂ©seaux auxquels je connecte mon PC n’a de proxy, mais j’ai Ă©tĂ© dans cette situation il y a quelques annĂ©es, et je procĂ©dais ainsi.

    D’abord, un script lancĂ© par NetworkManager se charge d’identifier le rĂ©seau auquel je viens de me connecter. Il utilise pour ça toute information disponible dans la rĂ©ponse DHCP du rĂ©seau permettant d’identifier de maniĂšre unique un rĂ©seau donnĂ© (l’idĂ©al est la variable DHCP4_DOMAIN_NAME, mais tous les serveurs DHCP ne fournissent pas cette information). Une fois le rĂ©seau identifiĂ©, il Ă©crit un nom arbitraire pour ce rĂ©seau dans le fichier /var/state/network.

    #!/bin/sh
    
    interface=$1
    status=$2
    
    case "$status" in
    up)
        if [ "x$DHCP4_DOMAIN_NAME" = 'xschool.example' ]; then
            echo school > /var/state/network
        elif [ "x$DHCP4_DOMAIN_NAME" = 'xcompany.example' ]; then
            echo company > /var/state/network
        elif [ "x$IP4_NAMESERVERS" = 'x203.0.113.65' ]; then
            # Cas d'un réseau qui ne fournit que trÚs peu d'infos,
            # on se base sur l'adresse du serveur DNS indiqué dans
            # la réponse DHCP -- en espérant qu'elle ne change pas
            # au cours du temps...
            echo discret > /var/state/network
        else
            echo unknown > /var/state/network
            # On dumpe toutes les variables dans un fichier,
            # dans l'espoir d'y trouver des infos qui permettront
            # de mieux caractériser ce réseau inconnu
            env > /var/state/network.infos
        fi
        ;;
    
    esac

    Le contenu du fichier /var/state/network peut ensuite ĂȘtre utilisĂ© par d’autres scripts pour toutes les actions qui doivent varier en fonction du rĂ©seau. En particulier, un script se charge d’écrire les informations relatives aux proxys dans un fichier /etc/proxy.conf :

    #!/bin/sh
    
    [ "x$2" = xup ] || exit 0
    
    case "$(< /var/state/network)" in
    school)
        echo PROXY_ON=1 > /etc/proxy.conf
        echo PROXY_HOST=www-cache.school.example >> /etc/proxy.conf
        echo PROXY_PORT=3128 >> /etc/proxy.conf
        echo EXCEPTIONS=.school.example >> /etc/proxy.conf
        ;;
    
    company)
        echo PROXY_ON=1 > /etc/proxy.conf
        echo PROXY_HOST=cache.company.example >> /etc/proxy.conf
        echo PROXY_PORT=3128 >> /etc/proxy.conf
        echo EXCEPTIONS= >> /etc/proxy.conf
        ;;
    
    *)
        # No proxy on the other networks
        cat /dev/null > /etc/proxy.conf
        ;;
    
    esac

    À ce stade, on se retrouve avec un fichier /etc/proxy.conf qui contient les informations sur le proxy Ă  utiliser. Le reste est l’affaire d’un script exĂ©cutĂ© au dĂ©marrage d’une session (par exemple dans ~/.xprofile), qui doit lire ce fichier et s’assurer que tous les programmes tiennent compte du proxy. C’était la partie la plus dĂ©licate car tous les programmes n’ont pas le bon goĂ»t de respecter la variable d’environnement http_proxy 
 Je n’ai plus ce script sous la main, mais de mĂ©moire il faisait Ă  peu prĂšs ça :

    • dĂ©finir http_proxy et no_proxy pour les programmes bien Ă©levĂ©s ;
    • Ă©diter le fichier de configuration KDE dĂ©finissant le proxy pour toutes les applications KDE (je ne sais plus quel Ă©tait ce fichier, mais de toute façon depuis le temps ça a peut-ĂȘtre changĂ©) ;
    • Ă©diter le fichier .mozilla/firefox/{profile}/prefs.js pour Firefox (qui Ă  une Ă©poque n’était pas un programme bien Ă©levĂ©) ;
    • dĂ©finir un alias java=java -Dhttp.proxyHost=proxy_host -Dhttp.proxyPort=proxy_port pour les programmes Java ;
    • et peut-ĂȘtre encore deux ou trois autres cas particuliers.

    Globalement, ce n’était sĂ»rement pas une solution parfaite, mais ça marchait quand mĂȘme Ă  peu prĂšs bien (mis Ă  part le fait que le passage d’un rĂ©seau Ă  un autre n’était pas pris en compte immĂ©diatement, il fallait redĂ©marrer la session graphique pour que le script .xprofile relise /etc/proxy.conf et que l’environnement soit mis Ă  jour — mais comme il ne m’arrivait que rarement de changer de rĂ©seau pendant une session, ce n’était pas trĂšs gĂȘnant).

  • # utiliser le network-manager

    Posté par  . Évalué à 2.

    il a une applet qui se loge dans la barre de tache à coté de l'horloge
    tu y definis des "reglages reseaux"

    par exemple :
    maison - en wifi, ip fixe, sans proxy
    bureau - en filaire, dhcp, avec proxy X et ses exceptions
    clientA - filaire, ip fixe, sans proxy, etc

    ca marche superbien

Suivre le flux des commentaires

Note : les commentaires appartiennent Ă  celles et ceux qui les ont postĂ©s. Nous n’en sommes pas responsables.