Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/06/2009, à 21:32

toto2849

Connexion VPN automatique (NetworkManager)

Bonjour,:D



-Actuellement en stage il met demandé de mettre en place une connexion VPN qui se lance automatiquement au démarrage du pc ne laissant juste à l'utilisateur une boite de dialogue demandant login+pass.:rolleyes:

-J'ai déjà installé le plugin "network-manager-pptp" tout est ok la connexion fonctionne ! Cependant j'aimerais que celle-ci se lance d'elle même au démarrage du système malheureusement j'ai beau cocher la case "connexion automatique" rien n'y fait ! Bref je me penche actuellement sur une solution qui puisse en ligne de commande lancer la connexion VPN !

-Le must serait que l'on affiche une boite de dialogue au démarrage demandant les login (user+pass) puis de lancer la connexion dans la foulé. Si la demande des identifiants se fait par l'intermédiaire d'un script shell en console cela me conviendra amplement.


Voila voila merci à ceux qui auront le courage de lire ce message jusqu'à la fin et merci à ceux qui pourrons m'éclairer ! (n'hésiter pas à me demander plus de précision si besoin...)




Cordialement,
Anthony

Hors ligne

#2 Le 04/06/2009, à 10:03

toto2849

Re : Connexion VPN automatique (NetworkManager)

UP personne ? sad




J'ai vu ceci sur le site suivant... mais RIEN ! Je ne sais pas comment activer automatiquement cette connexion....

Quelques infos peu utile ... neutralhttp://projects.gnome.org/NetworkManage … Connection

Dernière modification par toto2849 (Le 04/06/2009, à 21:19)

Hors ligne

#3 Le 04/06/2009, à 20:05

toto2849

Re : Connexion VPN automatique (NetworkManager)

Décidément personne peut m'aider ??

Hors ligne

#4 Le 07/06/2009, à 14:46

toto2849

Re : Connexion VPN automatique (NetworkManager)

hop un UP pour la route....:rolleyes:

Hors ligne

#5 Le 07/06/2009, à 18:51

killman

Re : Connexion VPN automatique (NetworkManager)

je n' ai pas eu le temps de me pencher sur la question, mais tu devrais essayer de rédiger un script qui lance la connexion cliente sur le vpn, si tu veux automatiser ça.

Hors ligne

#6 Le 07/06/2009, à 23:43

toto2849

Re : Connexion VPN automatique (NetworkManager)

-Tout d'abord merci d'avoir répondu à mon problème car j'ai cru que tout le monde s'en foutait... roll

-Donc pour te répondre, oui en effet c'est ce que j'ai pensé aussi; d'ailleurs j'en ai commencé un morceau mais je ne connait pas les raccourcis me permettant de lancer en shell la connexion vpn de NetworkManager... Bien entendu si quelqu'un peut me proposer une méthode alternative qui ne passerait pas par ce gestionnaire cela me conviendra aussi !


Voici pour le moment ce que j'ai pu faire....mais je connais pas grand chose en script:

#!/bin/sh

#saisie des login
echo "Saisir nom d'utilisateur : "
read utilisateur
echo "Saisir mot de passe : "
read -s passe

#lancement de la connexion vpn
org.freedesktop.NetworkManager.ppp_starter    ...mais cela est faux...

Comme dit plus haut j'ai trouvé sur leur site 2/3 truc comme "org.freedesktop.NetworkManager.VPN.Connection" mais es applicable pour lancer une connexion par la console ? j'ai tenté mais rien...peut être un soucis de syntaxe ?

Hors ligne

#7 Le 25/09/2009, à 15:28

coredump

Re : Connexion VPN automatique (NetworkManager)

Moi, j'ai une solution avec NetworkManager.
Il s'agit d'un service qui utilise d-bus pour piloter le NetworkManager.
Le principe est assez simple, mais le script est assez complexe.
...

Suite aux différents échanges qui ont été fait sur le sujet, j'utilise ce post, pour proposer une solution simple et accessible aux néophytes.
Cette solution permet de lancer automatiquement une connexion vpn et qu'elle se reconnecte automatiquement en cas de coupure.
Remarques :
- Cette solution n'est pas forcément compatible avec d'ancienne version d'ubuntu.
- Pour une utilisation avancée, voir les autres posts de cette discussion, en particulier le post #28 (http://forum.ubuntu-fr.org/viewtopic.ph … 7#p3225667) de Papou qui propose des scripts qui permettent de lancer la connexion automatique "à la demande".
- Pour ceux qui auraient déjà mis en place le script connection-service, celui-ci a un peu évolué, il faut donc le mettre à jour.

Voici, la démarche, en deux étapes, à suivre :

- ajouter ce script exécutable 02-loop-vpn dans /etc/NetworkManager/dispatcher.d/ en ayant pris soin de renseigner le nom de la connexion vpn
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

#!/bin/bash
# Script de lancement de connection VPN avec verification

CONNECTION_NAME="Connexion VPN 1"


while ! connection-service "$CONNECTION_NAME" status
do
  connection-service "$CONNECTION_NAME" start
  sleep 30
done

Soit, en ligne de commande :
sudo gedit /etc/NetworkManager/dispatcher.d/02-loop-vpn
copier/coller le code ci-dessus dans le fichier, et renseigner le champ CONNECTION_NAME avec le nom utilisé par le Network Manager pour votre connexion
sudo chmod +x /etc/NetworkManager/dispatcher.d/02-loop-vpn

- ajouter ce script exécutable connection-service dans /usr/local/bin/
/usr/local/bin/connection-service :

#!/bin/bash


	############
	# SETTINGS #
	############

get_connections_paths()
{
	dbus-send --system --print-reply --dest="$1" "/org/freedesktop/NetworkManagerSettings" "org.freedesktop.NetworkManagerSettings.ListConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_connection_settings()
{
	dbus-send --system --print-reply --dest="$1" "$2" org.freedesktop.NetworkManagerSettings.Connection.GetSettings
}

get_connection_string_setting()
{
	echo "$1" | grep -A 1 \""$2"\" | grep variant | cut -d '"' -f2
}

get_connection_id()
{
	get_connection_string_setting "$1" "id"
}

get_connection_type()
{
	get_connection_string_setting "$1" "type"
}

get_device_type_by_connection_type()
{
	echo "$1" | grep -q "ethernet" && echo 1 && return
	echo "$1" | grep -q "wireless" && echo 2 && return
	echo 0
}

find_connection_path()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		[ "$connection_settings_id" = "$2" ] && echo "$1" "$connection_path"
	done
}

find_connection_path_everywhere()
{
	find_connection_path "org.freedesktop.NetworkManagerSystemSettings" "$1"
	find_connection_path "org.freedesktop.NetworkManagerUserSettings" "$1"
}

print_connections_ids()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}

print_connections_ids_everywhere()
{
	print_connections_ids "org.freedesktop.NetworkManagerSystemSettings"
	print_connections_ids "org.freedesktop.NetworkManagerUserSettings"
}


	###########
	# DEVICES #
	###########

get_devices_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.NetworkManager.GetDevices" \
	| grep "object path" | cut -d '"' -f2
}

get_device_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Device" string:"$2" \
	| grep variant | awk '{print $3}'
}

get_device_type()
{
	get_device_property "$1" "DeviceType"
}

get_device_path_by_device_type()
{
	device_path_by_device_type="/"
	for device_path in `get_devices_paths`
	do
		device_type=`get_device_type "$device_path"`
		[ "$device_type" = "$1" ] && device_path_by_device_type="$device_path"
	done
	echo "$device_path_by_device_type"
}


	#######################
	# ACTIVES CONNECTIONS #
	#######################

get_actives_connections_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager" string:"ActiveConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_last_active_connection_path()
{
	get_actives_connections_paths | tail -n 1
}

get_parent_connection_path_by_device_type()
{
	parent_connection_path="/"
	[ "$1" = 0 ] && parent_connection_path=`get_last_active_connection_path`
	echo "$parent_connection_path"
}

get_active_connection_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Connection.Active" string:"$2" \
	| grep variant | awk -F '"' '{print $2}'
}

get_active_connection_service()
{
	get_active_connection_property "$1" "ServiceName"
}

get_active_connection_path()
{
	get_active_connection_property "$1" "Connection"
}

get_active_connection_path_by_connection_path()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		[ "$service" = "$1" ] && [ "$path" = "$2" ] && echo "$active_connection_path"
	done
}

print_actives_connections_ids()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		connection_settings=`get_connection_settings "$service" "$path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}


	##############
	# START/STOP #
	##############

start_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_connection_settings=`get_connection_settings $my_connection_complete_path`
	my_connection_type=`get_connection_type "$my_connection_settings"`
	my_connection_device_type=`get_device_type_by_connection_type "$my_connection_type"`
	
	my_connection_service=`echo $my_connection_complete_path | awk '{print $1}'`
	my_connection_path=`echo $my_connection_complete_path | awk '{print $2}'`
	my_connection_device_path=`get_device_path_by_device_type "$my_connection_device_type"`
	my_parent_connection_path=`get_parent_connection_path_by_device_type "$my_connection_device_type"`
	
	echo "connection_service=$my_connection_service"
	echo "connection_path=$my_connection_path"
	echo "connection_device_path=$my_connection_device_path"
	echo "parent_connection_path=$my_parent_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.ActivateConnection" string:"$my_connection_service" objpath:"$my_connection_path" objpath:"$my_connection_device_path" objpath:"$my_parent_connection_path"
}

stop_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_active_connection_path=`get_active_connection_path_by_connection_path $my_connection_complete_path`
	
	echo "active_connection_path=$my_active_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.DeactivateConnection" objpath:"$my_active_connection_path"
}


	########
	# MAIN #
	########

invalid_arguments()
{
	echo "Usage: `basename "$0"` connexion_name start|stop"
	echo "Connexion disponibles:"
	print_connections_ids_everywhere
	echo "Connexion actives:"
	print_actives_connections_ids
	exit 0
}

[ "$#" != 2 ] && invalid_arguments

case "$2" in
	"start")
		start_connection "$1"
        	;;
	"stop")
		stop_connection "$1"
		;;
	"restart")
		stop_connection "$1"
		start_connection "$1"
		;;
	"status")
		if print_actives_connections_ids | grep -q -x "$1"
		then
			echo "Connexion \"$1\" active"
			exit 0
		else
			echo "Connexion \"$1\" inactive"
			exit 1
		fi
		;;
	*)
		invalid_arguments
		;;
esac

Soit, en ligne de commande :
sudo gedit /usr/local/bin/connection-service
copier/coller le code ci-dessus dans le fichier, puis
sudo chmod +x /usr/local/bin/connection-service

Enjoy it!

Dernière modification par coredump (Le 30/01/2010, à 10:21)

Hors ligne

#8 Le 09/12/2009, à 16:01

legrosschmoll

Re : Connexion VPN automatique (NetworkManager)

Ca n'a pas l'air d 'intéresser toto2849 mais moi oui. Si tu pouvais poster ta solution Merci d'avance


Precise sur W500

Hors ligne

#9 Le 22/12/2009, à 15:57

coredump

Re : Connexion VPN automatique (NetworkManager)

Désolé, si je réponds un peu tard, ça fait un moment que je consulte pas le forum.

Voici ma solution, si ça t'intéresse toujours ou si ça intéresse quelqu'un d'autre.

L'origine du problème a deux sources par rapport au VPN avec Network Manager :
- quand on coche "Connecter automatiquement", ceci n'est pas pris en compte
- quand on coche "Disponible pour tous les utilisateurs", la connexion ne marche pas (à cause d'une histoire de clé quand on regarde les logs)
(En général, je trouve que le Network Manager a de légers disfonctionnements qui démontrent à mon avis quelques problèmes de conceptions ...)

Les scripts que je propose tente de remédier à cela.

Leur but est de connecter automatiquement le VPN et de le reconnecter automatiquement si il se déconnecte.
(Avec de légères modifications, ça pourrait se comporter différemment selon le besoin.)

Le principe est de se lancer et de s'arrêter en fonction d'une autre connexion parente (eth0 par exemple).
Puis de surveiller d-bus pour voir :
- si les paramètres de la connexion VPN sont disponibles (quand l'utilisateur se connecte)
- si la connexion VPN ne s'est pas déconnectée

Il y a deux scripts :
02-service-vpn -> à mettre dans /etc/NetworkManager/dispatcher.d/ (lance ou arrête "checkVPN" en fonction de la connexion parente)
checkVPN -> à mettre dans /usr/local/bin/ (script python qui surveille que la connexion VPN soit toujours bien connecter)
Tous deux doivent être exécutables.

checkVPN dépend d'un autre fichier :
nm_utils.py -> à mettre dans /usr/local/bin/ (outils pour piloter le nm en python)

Il y a deux champs à renseigner dans le script 02-service-vpn :
ETH_INTERFACE_NAME : l'interface de la connexion parente (par exemple : eth0)
VPN_CONNECTION_NAME : le nom de la connexion VPN qui a été renseigner dans le network manager
(Pour que ça marche pour plusieurs utilisateurs, il faut pour chacun définir la connexion VPN.)
(Il y a aussi la possibilité de décommenter des lignes pour avoir des traces.)


/etc/NetworkManager/dispatcher.d/02-service-vpn :

#!/bin/bash

ETH_INTERFACE_NAME="eth0"

# The name of the VPN connection to activate
VPN_CONNECTION_NAME="Connexion VPN"
# Or the uuid of the VPN connection to activate
#VPN_CONNECTION_NAME="UUID=abcf8915-bb27-4634-94e6-04c65261a73e"

SERVICE_VPN_LOG="/dev/null"
#SERVICE_VPN_LOG="/tmp/serviceVPN.log"

CHECK_VPN_LOG="/dev/null"
#CHECK_VPN_LOG="/tmp/checkVPN.log"

echo `date`": $0 $@" >> "$SERVICE_VPN_LOG"

[ "$1" != "$ETH_INTERFACE_NAME" ] && exit 0

case "$2" in
    "up")
        echo "Starting CheckVPN ... ("`which checkVPN`")" >> "$SERVICE_VPN_LOG"
        # On vérifie que checkVPN ne tourne pas déjà
        if [ "`pgrep checkVPN`" == "" ]
        then
            echo "CheckVPN started." >> "$SERVICE_VPN_LOG"
            checkVPN "$VPN_CONNECTION_NAME" > "$CHECK_VPN_LOG" 2>&1 &
        else
            echo "CheckVPN already running !" >> "$SERVICE_VPN_LOG"
        fi
        ;;
    "down")
        echo "Stoping checkVPN ..." >> "$SERVICE_VPN_LOG"
        if [ "`pgrep checkVPN`" == "" ]
        then
            echo "CheckVPN not running !" >> "$SERVICE_VPN_LOG"
        else
            pkill checkVPN
            echo "CheckVPN stopped." >> "$SERVICE_VPN_LOG"
        fi
        ;;
    *)
        echo "Nothing to do" >> "$SERVICE_VPN_LOG"
        ;;
esac

/usr/local/bin/checkVPN :

#!/usr/bin/python -u
# coding=UTF-8


import sys
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
from nm_utils import *


VPN_CONNECTION_UUID = VPN_CONNECTION_NAME = None

# Default values :
# The name of the VPN connection to activate
#VPN_CONNECTION_NAME = "Connexion VPN 1"
# or the uuid of the VPN connection to activate
#VPN_CONNECTION_UUID = "fabf8915-bb27-4634-94e6-04c65261a73e"


if len(sys.argv) > 1:
    vpn_argument = sys.argv[1]
    VPN_CONNECTION_UUID = VPN_CONNECTION_NAME = None
    if (vpn_argument[:5] == "UUID="):
        VPN_CONNECTION_UUID = vpn_argument[5:]
        print "VPN_CONNECTION_UUID=%s" % (VPN_CONNECTION_UUID)
    else:
        VPN_CONNECTION_NAME = vpn_argument
        print "VPN_CONNECTION_NAME=%s" % (VPN_CONNECTION_NAME)

if (not VPN_CONNECTION_UUID) and (not VPN_CONNECTION_NAME):
    print "Usage : "+sys.argv[0]+" connexion_vpn_name"
    print "Liste des connexions diponibles :"
    print_connections_infos()
    sys.exit(1)


vpn_connection_infos = {'vpn_connection_settings': None,
                        'vpn_connection_path': None}


def get_vpn_connection_settings():
    if VPN_CONNECTION_UUID:
        return get_connection_settings_by_uuid(VPN_CONNECTION_UUID)
    if VPN_CONNECTION_NAME:
        return get_connection_settings_by_name(VPN_CONNECTION_NAME)
    return None

def get_vpn_connection_path():
    if VPN_CONNECTION_UUID:
        return get_active_connection_path_by_uuid(VPN_CONNECTION_UUID)
    if VPN_CONNECTION_NAME:
        return get_active_connection_path_by_name(VPN_CONNECTION_NAME)
    return None

def get_eth_active_connection_path():
    try:
        active_connections_paths = get_active_connections_paths()
        active_connections_paths_count = len(active_connections_paths)
        if active_connections_paths_count == 0:
            return None
        return active_connections_paths[active_connections_paths_count-1]
    except Exception as exception:
        print exception
    return None


def update_vpn_connection_settings():
    vpn_connection_settings = get_vpn_connection_settings()
    vpn_connection_infos['vpn_connection_settings'] = vpn_connection_settings
    print "update_vpn_connection_settings=%s" % get_connection_infos(vpn_connection_settings)

def update_vpn_connection_path():
    vpn_connection_path = get_vpn_connection_path()
    vpn_connection_infos['vpn_connection_path'] = vpn_connection_path
    print "update_vpn_connection_path: vpn_connection_path=%s" % vpn_connection_path


def start_connection(settings, active_connection_path):
    
    def reply_handler(opath):
        vpn_connection_path = opath
        vpn_connection_infos['vpn_connection_path'] = vpn_connection_path
    
    def error_handler(*args):
        print args
    
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager')
    iface.ActivateConnection(get_connection_settings_type(settings),
                             get_connection_settings_path(settings),
                             dbus.ObjectPath("/"),
                             active_connection_path,
                             reply_handler=reply_handler,
                             error_handler=error_handler)


def checkVPN():
    
    vpn_connection_settings = vpn_connection_infos['vpn_connection_settings']
    # Do nothing if vpn connection settings don't exist
    print "checkVPN: vpn_connection_settings=%s" % get_connection_infos(vpn_connection_settings)
    if not vpn_connection_settings:
        return
    
    vpn_connection_path = vpn_connection_infos['vpn_connection_path']
    # Do nothing if vpn connection already exist
    print "checkVPN: vpn_connection_path=%s" % vpn_connection_path
    if vpn_connection_path:
        return
    
    eth_connection_path = get_eth_active_connection_path()
    print "checkVPN: eth_connection_path=%s" % eth_connection_path
    # Do nothing if eth connection don't exist
    if not eth_connection_path:
        return
    
    start_connection(vpn_connection_settings, eth_connection_path)


def handle_connection_settings_changed():
    print "handle_connection_settings_changed"
    update_vpn_connection_settings()
    checkVPN()

def handle_connections_changed():
    print "handle_connections_changed"
    update_vpn_connection_path()
    checkVPN()


def all_signal_receiver(*args, **kwargs):
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManagerSettings"):
        handle_connection_settings_changed()
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManagerSettings.Connection")\
            and (kwargs['signal_name'] == "Updated"):
        handle_connection_settings_changed()
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManager")\
            and (kwargs['signal_name'] == "PropertiesChanged")\
            and args[0].has_key('ActiveConnections'):
        handle_connections_changed()


DBusGMainLoop(set_as_default=True)

dbus.SystemBus().add_signal_receiver(all_signal_receiver,
    interface_keyword='dbus_interface', member_keyword='signal_name')

update_vpn_connection_settings()
update_vpn_connection_path()
checkVPN()

gobject.MainLoop().run()

/usr/local/bin/nm_utils.py :

# coding=UTF-8

import dbus


# Get connection settings from settings type and settings path
# (settings type is 'org.freedesktop.NetworkManagerSystemSettings' or 'org.freedesktop.NetworkManagerUserSettings')
def get_connection_settings(settings_type, settings_path):
    proxy = dbus.SystemBus().get_object(settings_type, settings_path)
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManagerSettings.Connection')
    settings = iface.GetSettings()
    settings['settings-type'] = settings_type
    settings['settings-path'] = settings_path
    return settings


# Get differents informations from connection settings
def get_connection_settings_type(settings):
    return settings['settings-type']

def get_connection_settings_path(settings):
    return settings['settings-path']

def get_connection_settings_uuid(settings):
    return settings['connection']['uuid']

def get_connection_settings_name(settings):
    return settings['connection']['id']


# Get all settings paths associated to a type of settings
def get_connections_settings_paths(settings_type):
    try:
        proxy = dbus.SystemBus().get_object(settings_type, '/org/freedesktop/NetworkManagerSettings')
        iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManagerSettings')
        return iface.ListConnections()
    except Exception as exception:
        print " !!! get_connections_settings_paths:"
        print exception
    return []

# Get all connections settings associated to a type of settings
def get_connections_settings_by_type(settings_type):
    connections_settings = []
    for settings_path in get_connections_settings_paths(settings_type):
        connection_settings = get_connection_settings(settings_type, settings_path)
        connections_settings.append(connection_settings)
    return connections_settings

# Get all connections settings
def get_all_connections_settings():
    return get_connections_settings_by_type('org.freedesktop.NetworkManagerUserSettings') + \
           get_connections_settings_by_type('org.freedesktop.NetworkManagerSystemSettings')


# Get the esssential informations of the connection
def get_connection_infos(settings):
   if settings:
      conn = settings['connection']
      return "%s (type=%s, UUID=%s)" % (conn['id'], conn['type'], conn['uuid'])
   else:
      return None

# Print the list of connections
def print_connections_infos():
    for connection_settings in get_all_connections_settings():
        print get_connection_infos(connection_settings)


# Get connection settings from the settings UUID
def get_connection_settings_by_uuid(uuid):
    try:
        for settings in get_all_connections_settings():
            if get_connection_settings_uuid(settings) == uuid:
                return settings
    except Exception as exception:
        print exception
    return None

# Get connection settings from the settings UUID
def get_connection_settings_by_name(name):
    try:
        for settings in get_all_connections_settings():
            if get_connection_settings_name(settings) == name:
                return settings
    except Exception as exception:
        print exception
    return None


# Get list of active connections paths
def get_active_connections_paths():
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
    return iface.Get('org.freedesktop.NetworkManager', 'ActiveConnections')

# Get connection settings from the connection path
def get_connection_settings_by_connection_path(connection_path):
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', connection_path)
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
    settings_type = iface.Get('org.freedesktop.NetworkManager.Connection.Active', 'ServiceName')
    settings_path = iface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
    return get_connection_settings(settings_type, settings_path)

# Get list of active connections paths
def get_active_connections_settings():
    actives_connections_settings = []
    for connection_path in get_active_connections_paths():
        settings = get_connection_settings_by_connection_path(connection_path)
        settings['connection-path'] = connection_path
        actives_connections_settings.append(settings)
    return actives_connections_settings

# Look for connexion path in active connexions with particular uuid
def get_active_connection_path_by_uuid(uuid):
    try:
        for connection_path in get_active_connections_paths():
            settings = get_connection_settings_by_connection_path(connection_path)
            if get_connection_settings_uuid(settings) == uuid:
                return connection_path
    except Exception as exception:
        print exception
    return None

# Look for connexion path in active connexions with particular name
def get_active_connection_path_by_name(name):
    try:
        for connection_path in get_active_connections_paths():
            settings = get_connection_settings_by_connection_path(connection_path)
            if get_connection_settings_name(settings) == name:
                return connection_path
    except Exception as exception:
        print exception
    return None

Voilà, ça peut certainement être amélioré ou généralisé, mais j'espère au moins que ça pourra te dépanner.

Hors ligne

#10 Le 27/12/2009, à 20:05

ElFabio

Re : Connexion VPN automatique (NetworkManager)

En tout cas, ca en dépanne d'autres ! merci bp pour ce boulot coredump, ca marche nickel, et c'est en plus trés propre, pas grand chose à redire, si ce n'est merci !

Hors ligne

#11 Le 29/12/2009, à 08:21

coredump

Re : Connexion VPN automatique (NetworkManager)

Merci ElFabio pour ton soutien et content que ça puisse te servir.

Une solution plus propre serait de trouver une correction au niveau du network manager ou de l'applet (est-ce que l'applet KDE marche ?).

Si j'avais un peu de temps et plus d'expérience dans la rédaction d'articles, j'aurais bien fait un tuto sur l'utilisation de d-bus pour contrôler le NM, car la documentation à ce sujet est assez maigre sur le net.

Voici quand même quelques liens qui m'ont été utiles :
  - http://doc.ubuntu-fr.org/networkmanager … e_commande
  - http://doc.ubuntu-fr.org/dbus
  - http://old.nabble.com/dbus-and-OpenVPN- … 05375.html
  - http://projects.gnome.org/NetworkManage … /spec.html
  - http://linuxfr.org/forums/15/27406.html
  - http://dbus.freedesktop.org/doc/dbus-py … orial.html

Je recommande aussi l'interface graphique d-feet pour s'exercer à utiliser d-bus (pratique aussi pour retrouver les API des services).
(Quand on veut être "listener" - à l'écoute - d'un service, la commande dbus-monitor aussi est pratique.)


Et pour ceux qui voudraient piloter NM à l'aide de d-bus, voici quelques exemples de lignes de commande qui permettent de le faire :

Afficher la liste des chemins des définitions des connexion selon leurs appartenances (système - disponibles pour tous les utilisateurs / personnel - propre à l'utilisateur) :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManagerSystemSettings "/org/freedesktop/NetworkManagerSettings" \
	org.freedesktop.NetworkManagerSettings.ListConnections

(ou --dest="org.freedesktop.NetworkManagerUserSettings")

Afficher les paramètres d'une connexion selon son appartenance et connaissant son chemin

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManagerSystemSettings "/org/freedesktop/NetworkManagerSettings/0" \
	org.freedesktop.NetworkManagerSettings.Connection.GetSettings

(ou --dest="org.freedesktop.NetworkManagerUserSettings")

Afficher la liste des chemins des connexions actives :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.DBus.Properties.Get string:"org.freedesktop.NetworkManager" string:"ActiveConnections"

Afficher une propriété d'une connexion active connaissant son chemin :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager/ActiveConnection/2" \
	org.freedesktop.DBus.Properties.Get string:"org.freedesktop.NetworkManager.Connection.Active" string:"nom_de_la_propriete"

"nom_de_la_propriete" est à renseigner.
Par exemple, "nom_de_la_propriete" peut-être "ServiceName" ou "Connection" pour connaître l'appartenance et le chemin de la définition de la connexion.

Arrêter une connection active connaissant son chemin :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.DeactivateConnection objpath:"/org/freedesktop/NetworkManager/ActiveConnection/2"

Démarrer une connexion :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.ActivateConnection string:"org.freedesktop.NetworkManagerSystemSettings" objpath:"/org/freedesktop/NetworkManagerSettings/0" objpath:"/org/freedesktop/NetworkManager/Devices/0" objpath:"/"

ou dans le cas d'une connection vpn :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.ActivateConnection string:"org.freedesktop.NetworkManagerUserSettings" objpath:"/org/freedesktop/NetworkManagerSettings/1" objpath:"/" objpath:"/org/freedesktop/NetworkManager/ActiveConnection/2"

Le problème de cette commande est qu'il faut passer en argument de la commande le chemin du device (ethN ou rien pour le vpn) et le chemin de la connexion active dont elle dépend (si elle n'utilise pas de device). Malheureusement ces informations ne sont pas évidentes à déduire.


Pour terminer voici un exemple de script utilisant ces commandes et permettant de démarrer ou d'arrêter une connexion en lui passant le nom de la connexion.
Pour l'utiliser, nommer le fichier "connection-service", le rendre exécutable et placer le dans "/usr/local/bin/", puis taper :
connection-service "nom_de_la_connexion" start|stop
Par exemple :
connection-service "Connection VPN 1" start

/usr/local/bin/connection-service :

#!/bin/bash


	############
	# SETTINGS #
	############

get_connections_paths()
{
	dbus-send --system --print-reply --dest="$1" "/org/freedesktop/NetworkManagerSettings" "org.freedesktop.NetworkManagerSettings.ListConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_connection_settings()
{
	dbus-send --system --print-reply --dest="$1" "$2" org.freedesktop.NetworkManagerSettings.Connection.GetSettings
}

get_connection_string_setting()
{
	echo "$1" | grep -A 1 \""$2"\" | grep variant | cut -d '"' -f2
}

get_connection_id()
{
	get_connection_string_setting "$1" "id"
}

get_connection_type()
{
	get_connection_string_setting "$1" "type"
}

get_device_type_by_connection_type()
{
	echo "$1" | grep -q "ethernet" && echo 1 && return
	echo "$1" | grep -q "wireless" && echo 2 && return
	echo 0
}

find_connection_path()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		[ "$connection_settings_id" = "$2" ] && echo "$1" "$connection_path"
	done
}

find_connection_path_everywhere()
{
	find_connection_path "org.freedesktop.NetworkManagerSystemSettings" "$1"
	find_connection_path "org.freedesktop.NetworkManagerUserSettings" "$1"
}

print_connections_ids()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}

print_connections_ids_everywhere()
{
	print_connections_ids "org.freedesktop.NetworkManagerSystemSettings"
	print_connections_ids "org.freedesktop.NetworkManagerUserSettings"
}


	###########
	# DEVICES #
	###########

get_devices_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.NetworkManager.GetDevices" \
	| grep "object path" | cut -d '"' -f2
}

get_device_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Device" string:"$2" \
	| grep variant | awk '{print $3}'
}

get_device_type()
{
	get_device_property "$1" "DeviceType"
}

get_device_path_by_device_type()
{
	device_path_by_device_type="/"
	for device_path in `get_devices_paths`
	do
		device_type=`get_device_type "$device_path"`
		[ "$device_type" = "$1" ] && device_path_by_device_type="$device_path"
	done
	echo "$device_path_by_device_type"
}


	#######################
	# ACTIVES CONNECTIONS #
	#######################

get_actives_connections_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager" string:"ActiveConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_last_active_connection_path()
{
	get_actives_connections_paths | tail -n 1
}

get_parent_connection_path_by_device_type()
{
	parent_connection_path="/"
	[ "$1" = 0 ] && parent_connection_path=`get_last_active_connection_path`
	echo "$parent_connection_path"
}

get_active_connection_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Connection.Active" string:"$2" \
	| grep variant | awk -F '"' '{print $2}'
}

get_active_connection_service()
{
	get_active_connection_property "$1" "ServiceName"
}

get_active_connection_path()
{
	get_active_connection_property "$1" "Connection"
}

get_active_connection_path_by_connection_path()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		[ "$service" = "$1" ] && [ "$path" = "$2" ] && echo "$active_connection_path"
	done
}

print_actives_connections_ids()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		connection_settings=`get_connection_settings "$service" "$path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}


	##############
	# START/STOP #
	##############

start_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_connection_settings=`get_connection_settings $my_connection_complete_path`
	my_connection_type=`get_connection_type "$my_connection_settings"`
	my_connection_device_type=`get_device_type_by_connection_type "$my_connection_type"`
	
	my_connection_service=`echo $my_connection_complete_path | awk '{print $1}'`
	my_connection_path=`echo $my_connection_complete_path | awk '{print $2}'`
	my_connection_device_path=`get_device_path_by_device_type "$my_connection_device_type"`
	my_parent_connection_path=`get_parent_connection_path_by_device_type "$my_connection_device_type"`
	
	echo "connection_service=$my_connection_service"
	echo "connection_path=$my_connection_path"
	echo "connection_device_path=$my_connection_device_path"
	echo "parent_connection_path=$my_parent_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.ActivateConnection" string:"$my_connection_service" objpath:"$my_connection_path" objpath:"$my_connection_device_path" objpath:"$my_parent_connection_path"
}

stop_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_active_connection_path=`get_active_connection_path_by_connection_path $my_connection_complete_path`
	
	echo "active_connection_path=$my_active_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.DeactivateConnection" objpath:"$my_active_connection_path"
}


	########
	# MAIN #
	########

invalid_arguments()
{
	echo "Usage: `basename "$0"` connexion_name start|stop"
	echo "Connexion disponibles:"
	print_connections_ids_everywhere
	echo "Connexion actives:"
	print_actives_connections_ids
	exit 0
}

[ "$#" != 2 ] && invalid_arguments

case "$2" in
	"start")
		start_connection "$1"
        	;;
	"stop")
		stop_connection "$1"
		;;
	"restart")
		stop_connection "$1"
		start_connection "$1"
		;;
	"status")
		if print_actives_connections_ids | grep -q -x "$1"
		then
			echo "Connexion \"$1\" active"
			exit 0
		else
			echo "Connexion \"$1\" inactive"
			exit 1
		fi
		;;
	*)
		invalid_arguments
		;;
esac

Dernière modification par coredump (Le 28/01/2010, à 12:21)

Hors ligne

#12 Le 29/12/2009, à 17:50

ElFabio

Re : Connexion VPN automatique (NetworkManager)

effectivement, tu as bien potassé ton d-bus ! et de rien pour le soutien, c'est le moins que je puisse faire, surtout que j'utilise maintenant ton script tous les jours ! vraiment exactement ce que je recherchais !

Hors ligne

#13 Le 29/12/2009, à 18:39

coredump

Re : Connexion VPN automatique (NetworkManager)

Par les temps qui courent, il vaut mieux surfer bien couvert wink

Hors ligne

#14 Le 29/12/2009, à 18:44

Brunod

Re : Connexion VPN automatique (NetworkManager)

Salut,
Je te félicite anticipativement parce que là, en congé, je n'en ai pas besoin; mais à la rentrée, faudra que je me penche dessus !
Merci !


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#15 Le 30/12/2009, à 12:17

coredump

Re : Connexion VPN automatique (NetworkManager)

À noter, que le script "connection-service" défini dans mon post #11 ci-dessus peut aussi être utilisé pour connecter automatiquement le VPN.

Pour cela, créer un script "vpn-autostart" exécutable dans "/usr/local/bin/",
/usr/local/bin/vpn-autostart :

#!/bin/bash

# Délai de 10 secondes pour laisser le temps à nm-applet de démarrer
sleep 10 && connection-service "Connection VPN 1" start

Ajouter ensuite un programme "VPN" dans la liste des "Applications au démarrage" avec comme commande :

vpn-autostart

Ceci démarrera la connexion "Connection VPN 1" à l'ouverture de la session.

Et pour reconnecter automatiquement la connexion en cas de coupure, ajouter ce script "02-loop-vpn" exécutable dans "/etc/NetworkManager/dispatcher.d/":
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

#!/bin/bash

[ "$2" = "vpn-down" ] && vpn-autostart

Et voilà !

Hors ligne

#16 Le 30/12/2009, à 13:45

lynn

Re : Connexion VPN automatique (NetworkManager)

Bonjour,

Merci à toi coredump pour ces scripts de connection automatique pour VPN. Ils fonctionnent parfaitement cool
Comme tu le dis si bien :

- quand on coche "Connecter automatiquement", ceci n'est pas pris en compte
- quand on coche "Disponible pour tous les utilisateurs", la connexion ne marche pas (à cause d'une histoire de clé quand on regarde les logs)

A quand un Network Manager complètement fonctionnel ? roll Parce que c'est vrai que ce genre de "détails" est quand même bien ch...t.
En attendant, merci encore coredump et je pense que ce post va intéresser pas mal de monde .....:P


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#17 Le 01/01/2010, à 21:47

ElFabio

Re : Connexion VPN automatique (NetworkManager)

Merci encore une fois coredump pour ce tutoriel trés pratique et directement utilisable, j'en profite pour abuser un peu de tes compétences pour te poser une question concernant l'usage de tes scripts (j'utilise en particulier checkVPN) : aprés maintenant plusieurs jours d'utilisation, je remarque qu'au fur et à mesure de mes reconnexions automatique à mon provider VPN (lors d'une déconnexion), le débit global des téléchargements (dans mon client torrent préféré...) a tendance à se contracter fortement (divisé par 2 ou 3), et un simple redémarrage du PC permet de revenir à un débit normal. Pour info je me connecte en WiFi, et peut être n'est ce pas du à l'utilisation de tes scripts, mais est ce que ca ne pourrait pas venir d'un "engorgement" de process qui s'accumulent en taches de fond suite à de multiples déconnexion/reconnexion VPN, je ne pense pas trop parce qu'en faisant un ps aux je n'en trouve pas trace et qu'en plus ton script me parait vraiment trés propre, mais je n'ai pas d'explications plausibles... est ce que tu aurais déjà rencontré le même genre de soucis ou aurais tu une idée de leur origine ?
Je te souhaite une trés bonne année,

Hors ligne

#18 Le 02/01/2010, à 09:26

rogerjm

Re : Connexion VPN automatique (NetworkManager)

Bravo coredump pour ce post (qui n'est pas loin d'être un article wink). Tout ce que tu y as décrit m'a été très utile pour configurer mon VPN et le lancer automatiquement, mais aussi m'a appris plein de choses.
Bonne année

Hors ligne

#19 Le 02/01/2010, à 11:11

coredump

Re : Connexion VPN automatique (NetworkManager)

Bonne année à tous  !

Au sujet de ton problème, ElFabio, je ne pense pas pouvoir t'aider beaucoup.

À vue de nez, voici mes impressions :

- Concernant le script de reconnexion, ça m'étonnerait qu'il puisse provoquer un "engorgement".
La plupart du temps il est au repos (en attente d'évènements) et quand il bosse, il ne fait jamais que quelques petites opérations.
Le seul petit souci que je verrais, serait le délai de reconnexion.
En cas de coupure, il cherche instantanément à se reconnecter et ce n'est peut-être pas très bon.
J'ai remarqué qu'en cas de coupure, la reconnexion ne se fait pas toujours à la première tentative.
Le fait d'envoyer des requêtes de reconnexion aussi proches n'est peut-être pas très bon.
En même temps, une fois qu'il s'est reconnecté, je n'ai pas observé pour ma part de diminution de la bande passante.

Mais, si tu veux chercher dans cette voie, tu peux essayer avec l'autre méthode (elle n'utilise pas de process en fond de tâche)
et jouer sur le délai de reconnection.

Les autres pistes pourraient venir à mon avis de la connexion Wifi, du client torrent ou du service VPN :

- Pour la connexion Wifi, j'ai entendu dire que le peer-to-peer n'est pas très bon.
J'ai eu à une époque un fournisseur internet wifi qui interdisait de faire du peer-to-peer sur son réseau (sinon ça le faisait planter).
De cette époque, j'ai pris l'habitude de faire du warez, je n'utilise les torrents que de façon ponctuel, donc je n'ai pas trop d'expérience à ce sujet.
Tout ce que je peux te dire, c'est que je ne rencontre pas ce problème avec les boards warez et JDownloader.

Pour explorer cette piste, il faudrait que tu es la possibilité de tester la différence avec une connexion filaire,
ou consulter les forums sur les torrents et le Wifi.

- Pour le client torrent, peut-être que le fait d'avoir des coupures le perturbe.
Une possibilité pourrait être de le relancer quand tu observes une diminution de débit et voir si ça change quelque chose.
Ou voir si tu observes aussi sur cette baisse de débit sur un test de bande passante (avec speedtest.net, par exemple).

- Le fournisseur VPN peut-être aussi offre de moins bon service au bout d'une certaine durée de connexion.
Là, si tu as la possibilité d'essayer une autre connexion VPN pour voir la différence.
Ou provoquer volontairement les coupures VPN depuis l'applet du Network Manager pour voir si ce sont bien les coupures qui font baisser le débit.

En gros, essaye de voir, et si c'est possible, si ton problème persiste :
- sans vpn (mais ça, tu le sais surement déjà)
- ou avec une connexion réseau filaire
- ou en redémarrant le client torrent
- ou en redémarrant le Network Manager (sudo service network-manager restart, NetworkManager pour les versions d'ubuntu plus anciennes)
- ou en espaçant les délais entre les reconnections
- ou avec un autre fournisseur VPN (personnellement, j'utilise HideMyNet, un peu payant)
ça t'aidera peut-être mieux à localiser ton problème qu'en redémarrant le pc.

Bonne chance !

Dernière modification par coredump (Le 02/01/2010, à 11:14)

Hors ligne

#20 Le 02/01/2010, à 12:30

ElFabio

Re : Connexion VPN automatique (NetworkManager)

Déjà je te remercie pour avoir pris autant de temps pour me répondre, je vais essayer de reparcourir les pistes que tu as mentionné mais, effectivement, ce sont également sensiblement les mêmes que celles que j'avais regardé jusque-là. Mes premieres impresssions tendraient à confirmer les tiennes, le probléme semblerait effectivement provenir davantage de la connexion en Wifi, puisque j'utilise également tes scripts sur un PC fixe en ethernet avec le même provider VPN, et je ne rencontre pas ce genre de problème. J'avais déjà éliminé la piste du provider VPN dont je suis personnellement trés satisfait (il s'agit de TorrentFreedom), et d'ailleurs le fait qu'en redémarrant le PC je retrouve un débit normal tend également à confirmer que le pb ne vient pas de là. D'ailleurs je n'ai pas, comme tu le mentionnes pour toi, de problémes de connexion particulier au VPN, la connexion se fait trés rapidement, par contre, en revanche, il se produit des déconnexions au VPN de façon trés régulière voire périodique (presque toutes les 30mn), ce qui me fait également pencher vers un probléme WiFi ou plutôt de passerelle (Livebox dans mon cas actuel) voire de FAI...
Je vais par contre également regarder du côté de ton 2eme script pour voir si j'observe des changements.
En tout cas, merci pour ton temps et ta réponse, ca me permet de disposer d'un 2eme avis "éclairé" sur le sujet !

Hors ligne

#21 Le 02/01/2010, à 21:29

hybernatus

Re : Connexion VPN automatique (NetworkManager)

Fiou... merci pour ce script et tout ton boulot, je me suis abonné hier à Ipredator (ayant trouvé un super tuto, et n'y connaissant rien en réseaux, j'ai fait au plus simple ^^ ) et j'ai remarqué qu'il se déconnecte de temps en temps... ce qui est un peu c*n tout de même quand on veut une connexion sécurisée et anonyme je trouve neutral

J'essairai d'appliquer ça dès que je trouve la motiv big_smile merci !

Hors ligne

#22 Le 12/01/2010, à 20:10

ElFabio

Re : Connexion VPN automatique (NetworkManager)

Salut coredump, je reviens juste vers toi pour te faire un petit debriefing : ta deuxiéme solution (via connection-service) a résolu mes problémes de "coupure" intempestive et réguliére du VPN, je l'ai un peu aménagé à ma sauce, notamment pour disposer d'une connexion 'manuelle' au VPN et non un lancement automatique au démarrage, mais, que ce soit en Wi-Fi ou en Ethernet, cela fonctionne maintenant parfaitement. Donc encore merci pour ton travail, et bonne continuation !

Hors ligne

#23 Le 17/01/2010, à 21:09

Papou

Re : Connexion VPN automatique (NetworkManager)

Merci Coredump pour ces scripts très utiles.

La reconnection automatique c'est nickel .... sauf quand c'est le modem qui décroche de l'ADSL et met un peu de temps pour redémarrer, la reconnection au VPN n'aboutit alors pas et l'accès internet se retrouve en direct quelques secondes plus tard.

Serait-il possible de faire encore mieux ?


Un pour tous et tous pour un, les petits ruisseaux feront les grandes rivières ...

Hors ligne

#24 Le 18/01/2010, à 14:41

coredump

Re : Connexion VPN automatique (NetworkManager)

Tout d'abord merci ElFabio pour ton retour d'expérience.
A mon avis :
- la première solution (en python) est plus fiable, car le service tourne en tâche de fond et ne dépend  pas de la connexion de l'utilisateur, mais plus complexe et donc plus difficile à maintenir,
- la deuxième (en shell) est plus simple et plus clair, et donc plus adaptable et plus facile à maintenir, et par expérience marche bien.
Et en définitif, je conseillerai donc plutôt celle-ci.
Pour rappel, cette méthode est décrite dans le post #15 avec le script "connection-service" de la fin du poste #11.
(Si je trouve un peut de temps, j'en ferais bien la synthèse dans un tuto ...)

Ensuite par rapport à Papou, si tu veux que le vpn se reconnecte quand ta connexion adsl se reconnecte (j'imagine que tu utilises la deuxième méthode et qu'il ne s'agit pas d'une connexion adsl pppoe ?), tu peux essayer d'ajouter cette ligne dans le script
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

[ "$2" = "up" ] && vpn-autostart

(Pour voir si ça marche, tu peux essayer en redémarrant à la main ton modem en cours de connexion.)

Dernière modification par coredump (Le 18/01/2010, à 14:45)

Hors ligne

#25 Le 19/01/2010, à 21:24

Papou

Re : Connexion VPN automatique (NetworkManager)

coredump,

Merci pour ta réponse.
j'utilise la deuxième méthode et il s'agit d'une connexion adsl pppoe.
L'inconvénient d'ajouter la ligne "[ "$2" = "up" ] && vpn-autostart" est qu'il devient alors impossible de déconnecter volontairement le VPN pour les applications qui ne le supporte pas (sauf a écrire un script de déconnexion volontaire qui va déplacer le fichier 02-loop-vpn en dehors de dispatcher).

D'autre part, il me semble avoir remarqué que le problème est que la connection VPN échoue parfois (timeout d'environ 10 sec ? ) et qu'il n'y a alors pas de deuxième essai.


Un pour tous et tous pour un, les petits ruisseaux feront les grandes rivières ...

Hors ligne