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 (+1/-0).

    • 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 (page perso) . Évalué à 7 (+5/-0).

    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 (+0/-0).

    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

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.