Scripts pour VPN

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

Scripts pour VPN

Message par voxdemonix » mer. juil. 19, 2017 11:52 pm

musique d'entrain : Deadmau5 - Chill Mix

[BASH] VpnSwitcher - Multi-OpenVPN Connexion script

[flagFR]
  • Objectif :
    Pouvoir choisir à quel serveur VPN se connecter en fonction de si une machine est détectée (via Adresse Mac) sur le même réseau ou non. Ainsi vous pouvez utiliser un VPN pour le LAN et un VPN pour le Wan, Tor ou encore I2P. Le script ne sera pas perturbé si vous avez plusieurs tunnels ssh ou vpn en cours de fonctionnement, il ne quitte/démarre que la connexion VPN spécifiée.
    Il peut aussi être utilisé pour ajouter un serveur VPN de secours en cas de non disponibilité du premier.

    Fonctionnement :
    Si la connexion VPN est déjà en cours, alors elle sera quittée.
    Si la connexion VPN n'est pas en cours, alors le script va l'initialiser.
    À la demande de l'utilisateur (voir les variables $sshNotLanEnable et $sshLanEnable) le script va, ou non, d'abord initialiser un tunnel SSH paramétrable.



    Installation sur ubuntu/debian/raspbian :
    • Si vous ne passez par SSH :
      1. Vous devez modifier votre fichier /etc/hosts
      2. Et ajouter la ligne suivante en adaptant l'hostname de votre serveur VPN
        • Code : Tout sélectionner

          192.168.1.x	hostname_de_votre_VPN
          192.168.1.x => remplacez par l'adresse IP local (LAN) de votre serveur VPN.
    • Uniquement si vous passez par SSH :
      1. Vous devez modifier votre fichier /etc/hosts
      2. Et ajouter la ligne suivante en adaptant l'hostname de votre serveur VPN
    • Si votre tunnel SSH doit passer par Tor :
      1. Vous devez d'abord rendre compatible le client SSH en éditant le fichier /etc/ssh/ssh_config
      2. Puis coller à la fin du fichiers les lignes suivantes
    • Ensuite créez votre script par exemple dans /opt/scripts (CTRL+X pour sauver et quitter nano)
      • Code : Tout sélectionner

        mkdir -p /opt/scripts
        nano /opt/scripts/manageOpenVPN1.bash
        chmod +x /opt/scripts/manageOpenVPN1.bash
    • Collez le script ci-bas et éditez les variables pour les faire correspondre à vos besoins
      • SCRIPTS OPTIONS
        • LANG="fr" => la langue pour les notifications ; accepte : fr, usa (default)
          notificationType="notify" => le type de notification, accepte : echo, notify, nothing
        NETWORK OPTIONS
        • INTERFACE="tun" => l'interface réseau créée par la connexion VPN (permet de savoir si la connexion est établie ou non)
          hostnameVpnLAN="192.168.1.69" => (VPN1 hostname) l'adresse IP locale ou l'hostname de votre premier serveur VPN
          MacVpnLocal="69:69:69:69:69:69" => l'adresse mac du premier serveur VPN (tapez ifconfig dans un terminal sur votre server pour la voir)
        VPN OPTIONS
        • fichierOvpnLAN="/etc/openvpn/userVPN1.ovpn" => (VPN1) le PATH de votre fichier de conf .ovpn en LAN
          fichierOvpnNotLAN="/etc/openvpn/userVPN2.ovpn" => (VPN2) le PATH de votre fichier de conf .ovpn en WAN
          openVpn1Param="--route-nopull" => Ajoutez d'éventuels paramètres à la commande qui gère la connexion au premier VPN (celui en LAN)
          openVpn2Param="--route-nopull" => Ajoutez d'éventuels paramètres à la commande qui gère la connexion au second VPN (celui en Wan/Tor voir Lan aussi)
        SSH OPTIONS
        • hosnameVpnNotLAN="hostname.onion" => l'hostname de votre second serveur VPN (peut être une adresse IP)
          UserLocalForSshTunneling="daenerys" => l'utilisateur système à utiliser sur votre ordinateur pour le montage du tunnel (celui qui a exporté sa clés)
          UserRemoteForSshTunneling="proxy-ssh" => l'utilisateur à utiliser côté serveur SSH ( /!\ n'utilisez jamais root !)
          portEntree="1194" => le port sur le pc local, par défaut 1194
          portSortie="1194" => le port sur le serveur SSH, par défaut 1194
          sshLanEnable=0 => 0 pour désactiver ou 1 pour activer : permet d'activer/désactiver le montage de tunnel SSH vers le premier serveur VPN
          sshNotLanEnable=1 => 0 pour désactiver ou 1 pour activer : permet d'activer/désactiver le montage de tunnel SSH vers le second serveur VPN


Script vpnSwitcher
  • Code : Tout sélectionner

    #!/bin/bash
    # -- vpnSwitcher --
    #  -> WTFPL - infos script : https://www.0rion.netlib.re/forum4/viewtopic.php?f=9&t=646&p=1460#p1460
    # -> code by voxdemonix <-
    # -> V1.11 (2017/09/11) <-
    # uncomment next line for debug
    #set -x
    
    if [ ! "$SUDO_USER" ]; then
    echo "!!! i need root !!!"
    exit 0
    fi
    
        #SCRIPTS OPTIONS
    LANG="fr" # notification service ; accept : fr, usa (default)
    notificationType="notify" # accept : echo; notify, nothing
    
        # NETWORK OPTIONS
    INTERFACE="tun"
    hostnameVpnLAN="192.168.1.69" # (VPN1 hostname) l'adresse IP locale (LAN) de votre serveur OpenVPN
    MacVpnLocal="69:69:69:69:69:69" #l'adresse mac de votre serveur OpenVPN (tapez ifconfig dans un terminal sur votre server)
    
        # VPN OPTIONS
    fichierOvpnLAN="/etc/openvpn/myUser_LAN.ovpn" # (VPN1) le PATH de votre fichier de conf .ovpn en LAN
    fichierOvpnNotLAN="/etc/openvpn/myUser.ovpn" # (VPN2) le PATH de votre fichier de conf .ovpn pour les connnexions WAN/SSH
    openVpn1Param=" " # add options (ex: --route-nopull) for openvpn connexion to server 1 (lan)
    openVpn2Param=" " # add options (ex: --route-nopull) for openvpn connexion to server 2 (ssh/tor/wan)
    
        # SSH OPTIONS
    hosnameVpnNotLAN="blablablablablabla.onion" # (VPN2 hostname)
    UserLocalForSshTunneling="daenerys" # l'user a utiliser sur votre ordinateur pour le montage du tunnel (celui qui a exporté sa clés)
    UserRemoteForSshTunneling="proxy-ssh" # l'user a utiliser côté server ( /!\ n'utilisez jamais root !)
    portEntree="1194" # le port sur le pc local, par défaut 1194 (tcp)
    portSortie="1194" # le port sur le serveur, par défaut 1194 (tcp)
    sshLanEnable=0  # 0 for disable ; 1 for enable : enable or disable the ssh tunneling in LAN
    sshNotLanEnable=0 # 0 for disable ; 1 for enable : enable or disable the ssh tunneling in Wan | Tor
    
    
    
                # NOTIFICATION SYSTEM
    function vpnNotification {
            # $1 = message ID (watch switch/case);
            # $2 = hostnameVPN
        message=""
        #hostnameVPN=$(cat "$2" | grep "remote " | sed 's/remote //g' | sed 's/ [[:digit:]]\+//g')
        hostnameVPN=$2
    
        case $LANG in
            fr )
                    case $1 in
                        VpnDisabled )
                                message="Connexion VPN fermée ($hostnameVPN)"
                            ;;
                        VpnConnecting )
                                message="Connexion VPN en cours ($hostnameVPN)"
                            ;;
                        VpnEnabled )
                                message="VPN Connecté ! ($hostnameVPN)"
                            ;;
                        SshStop )
                                message="Tunnel SSH STOP ($hostnameVPN)"
                            ;;
                        SshStart )
                                message="Tunnel SSH START ($hostnameVPN)"
                            ;;
                        * )
                                message="message inconnu"
                            ;;
                    esac
                ;;
            usa | *)
                    case $1 in
                        VpnDisabled )
                                message="VPN Connection Close ($hostnameVPN)"
                            ;;
                        VpnConnecting )
                                message="VPN Connection in progress ($hostnameVPN)"
                            ;;
                        VpnEnabled )
                                message="VPN Connected ! ($hostnameVPN)"
                            ;;
                        SshStop )
                                message="SSH Tunneling STOP ($hostnameVPN)"
                            ;;
                        SshStart )
                                message="SSH Tunneling START ($hostnameVPN)"
                            ;;
                        * )
                                message="unknow message"
                            ;;
                    esac
                ;;
        esac
    
    
        case $notificationType in
            echo)
                    echo "$message"
                ;;
            notify)
                    notify-send "$message"
                ;;
            nothing | *)
                ;;
        esac
    }
    
    function quitOpenVPN {
            # $1 = ovpn ( $fichierOvpnLAN, $fichierOvpnNotLAN)
            # $2 = hostnameVPN ( $hostnameVpnLAN, $hosnameVpnNotLAN)
            ovpn=$1
            hostVPN=$2
                #stop VPN
            if [ $(pkill -c -f $ovpn) -gt 0 ]; then
    		hostnameVPN=$(cat $ovpn | grep "remote " | sed 's/remote //g' | sed 's/ [[:digit:]]\+//g')
    		vpnNotification "VpnDisabled" $hostnameVPN
            fi
                #stop ssh
    #        if ps -aux | grep "[a]utossh" | grep "$hostVPN"  | grep -v "grep" >> /dev/null 2>&1; then
    #            for pid in `ps -ef | grep "[a]utossh" | grep "$hostVPN"  | grep -v "grep" | awk '{print $2}'` ; do kill $pid ; done
    		if [ $(pkill -c -f "autossh.*$UserRemoteForSshTunneling@$hostVPN") -gt 0 ]; then
                vpnNotification "SshStop" $hostVPN
            fi
            sleep 1
    }
    
    function startOpenVPN {
            # $1 = hostname VPN ($hostnameVpnLAN, $hosnameVpnNotLAN)
            # $2 = ovpn ($fichierOvpnLAN, $fichierOvpnNotLAN)
            # $3 = ssh enable (1) or not (0) ($sshLanEnable, $sshNotLanEnable)
            # $4 = OpenVpn Param ($openVpn1Param, $openVpn2Param)
    
            hostVPN=$1
            ovpn=$2
            sshChoice=$3
            openvpnParam=$4
    
                    # SSH TUNNELING
                if [ $sshChoice == 1 ]; then
                        # kill oprevious ssh tunneling
                    for pid in `ps -ef | grep "[a]utossh" | grep "$hostVPN" | awk '{print $2}'` ; do kill $pid ; done
                        # creat new ssh tunneling
                    su $UserLocalForSshTunneling -c "autossh -M 0 -q -N -o 'ServerAliveInterval 60' -o 'ServerAliveCountMax 3' -L $portEntree:127.0.0.1:$portSortie $UserRemoteForSshTunneling@$hostVPN -f"
    		        if ps -aux | grep "[a]utossh" | grep "$hostVPN"  | grep -v "grep" >> /dev/null 2>&1; then
    		            vpnNotification "SshStart" $hostVPN
    		        fi
                fi
    
                    # START OpenVPN
                openvpn --daemon $openvpnParam --config $ovpn
    
                    # NOTIFICATIONS
                hostnameVPN=$(cat $ovpn | grep "remote " | sed 's/remote //g' | sed 's/ [[:digit:]]\+//g')
                vpnNotification "VpnConnecting" $hostnameVPN
    
                    # boucle qui permet de verifier si le VPN se connecte bien
            stop=0
            while [ $stop -lt 10 ]
            do       # temps d'attente entre chaque tentative
                if ifconfig | grep -iq $INTERFACE; then
                        vpnNotification "VpnEnabled" $hostnameVPN
                        stop=10
                        exit
                fi
                    sleep 5
                   stop=$((stop+1))
            done
    
    }
    
    
    
            # boucle qui permet d'attendre que le réseau soit connecté
    stop="0"
    while [ $stop -lt 1 ]
    do
    	sleep 3       # temps d'attente entre chaque tentative
    
    	_IP=$(hostname -I) || true
    	if [ "$_IP" ]; then
    	        stop=1
    	fi
    done
    
    if ps -aux | grep "[o]penvpn" >> /dev/null 2>&1; then
        #Connexion VPN active
    
                # vpn server 1
            quitOpenVPN $fichierOvpnLAN $hostnameVpnLAN
                # vpn server 2
            quitOpenVPN $fichierOvpnNotLAN $hosnameVpnNotLAN
    
    
    else
    	arp -d $hostnameVpnLAN # on vire la correspondance de l'IP dans le cache ARP
            ping $hostnameVpnLAN -c 2 >> /dev/null 2>&1
            macRecover=$(arp -n | grep -i -o $MacVpnLocal)
    
            if [ "$macRecover" == "$MacVpnLocal" ]; then
            #        echo "local/LAN/First VPN"
                startOpenVPN $hostnameVpnLAN $fichierOvpnLAN $sshLanEnable $openVpn1Param
    
            else
            #        echo "tor/wan/second VPN"
                startOpenVPN $hosnameVpnNotLAN $fichierOvpnNotLAN $sshNotLanEnable $openVpn2Param
    
            fi
    
    fi
    


Farm Link
Modifié en dernier par voxdemonix le mer. sept. 20, 2017 1:39 pm, modifié 61 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Scripts pour VPN

Message par voxdemonix » jeu. juil. 20, 2017 12:07 am

[BASH] Connexion OpenVPN via SSH Tunneling Lan | SSH Tunneling over Tor Hidden Service
source : [Tuto/HowTo] [GNU/Linux] Accéder à son VPN depuis le réseau Tor via SSH Tunneling
  • [flagFR] Ce script établi un tunnel SSH en local ou via Tor Hidden Service suivant si l'on est sur le même réseau ou non que le serveur VPN. la détection se fait via adresse mac.
    • Code : Tout sélectionner

      #!/bin/bash
      #  -> WTFPL - infos script : https://www.0rion.netlib.re/forum4/viewtopic.php?f=79&t=587&p=1252#p1253
      # -> code by voxdemonix <-
      # -> V1.3 <-
      #su monUser -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 8080:127.0.0.1:80 proxy-ssh@torOrWanadress.onion -f'
      
      
      if [ ! "$SUDO_USER" ]; then
      echo "!!! i need root !!!"
      exit 0
      fi
      
      
      IpVpnLocale="192.168.1.42" # l'adresse IP locale de votre serveur VPN/SSH
      AdresseServerOnion="torOrWanadress.onion"
      MacVpnLocal="00:00:00:00:00:00" # l'adresse mac du serveur VPN/SSH (tapez ifconfig dans un terminal sur votre server pour la voir)
      UserLocalForSshTunneling="myLocalUser" # l'user a utiliser sur votre ordinateur pour le montage du tunnel (celui qui a exporté sa clés)
      UserRemoteForSshTunneling="proxy-ssh" # l'user a utiliser côté server ( /!\ n'utilisez jamais root !)
      portEntree="1194" # le port sur le pc local, par défaut 1194
      portSortie="1194" # le port sur le serveur, par défaut 1194
      fichierOVPN="myUser.ovpn" # le nom de votre fichier de configuration .ovnp
      
      
              # boucle qui permet d'attendre que le réseau soit connecté
      stop="0"
      while [ $stop -lt 1 ]
      do
      sleep 30       # temps d'attente entre chaque tentative
      
      _IP=$(hostname -I) || true
      if [ "$_IP" ]; then
              #printf "My IP address is %s\n" "$_IP"
              stop=1
      fi
      done
      
      arp -d $IpVpnLocale # on vire la correspondance de l'IP dans le cache ARP
      ping $IpVpnLocale -c 2 >> /dev/null 2>&1
      macRecover=$(arp -n | grep -i -o $MacVpnLocal)
      
      if [ "$macRecover" == "$MacVpnLocal" ]; then
      #        echo "local"
              su $UserLocalForSshTunneling -c "autossh -M 0 -q -N -o 'ServerAliveInterval 60' -o 'ServerAliveCountMax 3' -L $portEntree:127.0.0.1:$portSortie $UserRemoteForSshTunneling@$IpVpnLocale -f"
      else
      #        echo "tor/wan"
              su $UserLocalForSshTunneling -c "autossh -M 0 -q -N -o 'ServerAliveInterval 60' -o 'ServerAliveCountMax 3' -L $portEntree:127.0.0.1:$portSortie $UserRemoteForSshTunneling@$AdresseServerOnion -f"
      fi
      sleep 10
      
      	# sur Ubuntu ajoutez --route-nopull à la commande suivante si vous ne voulez pas forcer le trafic à passer par le VPN
      openvpn --daemon --cd /etc/openvpn --config $fichierOVPN
      
Modifié en dernier par voxdemonix le mer. sept. 20, 2017 1:55 pm, modifié 1 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Scripts pour VPN

Message par voxdemonix » mar. juil. 25, 2017 2:24 pm

Script d'arrêt/lancement de la connexion VPN

[flagFR] Ce script stop le VPN s'il est activé et le démarre s'il est à l’arrêt. N'oubliez pas d'indiquer le chemin (path) vers votre fichier de configuraiton OpenVPN (.ovpn) et éventuellement préciser l'interface si vous en avez plusieurs qui tourne sous le même nom.

  • Code : Tout sélectionner

    #!/bin/sh
    OPENVPNCONFFILE="/etc/openvpn/myUser.ovpn";
    LANG="fr"
    INTERFACE="tun"
    
    hostnameVPN=$(cat "$OPENVPNCONFFILE" | grep "remote " | sed 's/remote //g')
    
    case $LANG in
            fr)             VpnDisabled="Connexion VPN ferme   ($hostnameVPN)"
                            VpnEnabled="Connexion VPN active   ($hostnameVPN)";;
            en | usa | *)   VpnDisabled="VPN Connexion Disabled ($hostnameVPN)"
                            VpnEnabled="VPN Connexion Activate ($hostnameVPN)";;
    esac
    
    if ifconfig | grep -iq $INTERFACE; then
        #Connexion VPN active
    
            pkill -SIGTERM -f 'openvpn'
            notify-send "$VpnDisabled"
    else
        #Connexion VPN inactive
                openvpn --daemon --route-nopull --config $OPENVPNCONFFILE
                notify-send "$VpnEnabled"
    fi
    
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Scripts pour VPN

Message par voxdemonix » jeu. nov. 23, 2017 2:14 pm

Script permettant de vérifier que le client VPN est bien connectée

/opt/scripts/checkVPN.bash
  • Code : Tout sélectionner

    #!/bin/bash
    # infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=9&t=646&p=1697#p1697
    
    for interfaceReseau in 'tun0' 'tun1' 'tun2'
    do
    #        echo "L'interface testée est $interfaceReseau"
    
    	if [ `ifconfig | grep -o "$interfaceReseau" | grep [a-z] | wc -l` -eq 0 ]; then
    		#echo "interface $interfaceReseau inexistante"
    			#emplacement de votre script pour démarrer votre client vpn
    		/opt/scripts/startVPN.bash
    	#else
    		#echo "interface $interfaceReseau active"
    	fi
    done
    'tun0' 'tun1' 'tun2' la liste complète de vos interface réseau dédié au VPN.
    /opt/scripts/startVPN.bash votre script pour démarrer votre client/serveur VPN.
Ajoutez le cron système (en tant que root). Et collez les lignes suivantes.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Qui est en ligne

Utilisateurs parcourant ce forum : CommonCrawl [Bot] et 0 invité