# Client VPN PPTP configurer pour certaines applications

**URL:** <https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560>\
**Category:** Trucs et Astuces\
**Created:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560 "2016-02-21T12:22:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![savexed](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@savexed](https://www.debian-fr.org/u/savexed)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560/1 "2016-02-21T12:22:37Z")

</div>

Bien le bonjour,  
En ce moment, il y a de nombreuse offre pour devenir “anonyme” sur Internet. Une de ses offres : Le VPN

[size=150]I) Comment mettre en place une connection VPN en PPTP en tant que Client, sur Debian[/size]

Tout d’abord il faut installer le paquet:

```auto
apt-get install pptp-linux
```

Editer le fichier chap-secrets

```auto
nano /etc/ppp/chap-secrets
```

Mettre \* si l’adresse ip fournit par votre serveur VPN est dynamique

[code]# Secrets for authentication using CHAP

# client server secret IP addresses

nom\_utilisateur PPTP votre\_mot\_de\_passe \*[/code]

exemple:

[code]# Secrets for authentication using CHAP

# client server secret IP addresses

loupa PPTP tchatchatcha \*[/code]

Creer le fichier nom\_du\_service

```auto
nano /etc/ppp/peers/nom_du_service
```

Exemple:

```auto
nano /etc/ppp/peers/PhantomPeer
```

Et copier dedans:

`#Il faut modifier les nom de type $tatata$
pty "pptp $AdresseIP_ou_NomDNS_du_serveur_VPN$ --nolaunchpppd"
name $nom_utilisateur$
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam $nom_du_service$
persist`

L’option persist permet de réactiver la connexion automatiquement en cas de perte de connexion

Exemple:

`pty "pptp pptp.phantompeer.com --nolaunchpppd"
name loupa
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam PhantomPeer
persist`

Tester la connexion avec la commande de diagnosique

```auto
pon nom_du_service debug dump logfd 2 nodetach
```

exemple:

```auto
pon PhantomPeer debug dump logfd 2 nodetach
```

Pour lancer la commande sans diagnostique de connexion

```auto
pon nom_du_service
```

Stopper la connexion:

```auto
poff nom_du_service
```

[size=150]II) Rendre la connexion automatique au démarrage de vote Debian[/size]

Editer le fichier “interfaces”

```auto
nano /etc/network/interfaces
```

Ajouter dans le fichier

`auto tunnel
iface tunnel inet ppp
        provider nom_du service`

Exemple:

`auto tunnel
iface tunnel inet ppp
        provider PhantomPeer`

[size=150]III) Configuration de la Debian pour utiliser le VPN pour certaines applications:[/size]

J’image qu’il y a certain qui aimerai ne pas balancer tout leur trafic sur le VPN mais juste quelques applications.  
Surtout ceux qui possède plusieurs ordinateurs et qui utilise certain service qui ne marcherai plus dans le cas d’une direction complete du traffic sur le VPN.

J’ai donc, après quelques recherches, trouver une solution.  
Je remercie PascalHambourg pour son exemple sur le routage avancé, ça m’a permis de mettre en place cette partie.

Explication du fonctionnement:  
[ul]- Il faudra tout d’abord créer un table celle du système, elle servira à creer une route par default differente de celle utilisé pour acceder directement à Internet.

- Les paquets seront marqué par apport au protocole et au port choisit (ex: protocole tcp, port 80 =\> Marquage des paquet http en mode connecté)
- Une fois marqué, les paquets seront router vers la nouvelle table de routage créé
- Etant donnée que la nouvelle table de routage possèdera l’interface du VPN en route par default, les paquets marqué seront acheminé directement sur l’interface du VPN.[/ul]

Pour la création de la nouvelle table de routage:

```auto
echo 1 VPN >> /etc/iproute2/rt_tables
```

Changez “VPN” par n’importe quel nom:

[size=120]1) Diriger certaine application sur l’interface du VPN grace à un script[/size]

Créer un fichier puis ajouter le script dedans

Voici le script:

[code]#! /bin/sh

#On récupere l’adresse ip de l’interface VPN.  
#Modifier ppp0 si ce n’est pas l’interface de votre VPN  
IpInterfaceVpn=$(ifconfig ppp0 | sed -n ‘s/._adr:([^]_).\*/\1/p’)

#A modifier suivant votre configuration  
MonInterfaceLan=‘eth1’  
InterfaceViaInternet=‘eth0’  
InterfaceViaVPN=‘ppp0’  
NomTable=‘VPN’

#Désactiver la validation d’adresse source sur l’interface du VPN  
sysctl -w net.ipv4.conf.ppp0.rp\_filter=0

#Si vous voulez rajouter le marquage d’autre paquets reçus, c’est ici.  
#Marquer les paquets reçus par l’interface LAN  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p tcp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p udp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p udp --dport 5500:5510 -j MARK --set-mark 0x1

#Si vous voulez rajouter le marquage d’autre paquets émis, c’est ici.  
#Marquer les paquets émis par le routeur vers internet si nécessaire  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p tcp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p udp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p udp --dport 5500:5510 -j MARK --set-mark 0x1

#Router les paquets marqués avec la table de routage alternative  
ip rule add fwmark 0x1 table $NomTable

#Créer une route par défaut dans la table alternative  
ip route add default dev $InterfaceViaVPN via $IpInterfaceVpn table $NomTable

#Router l’adresse source avec l’adresse de l’interface de sortie  
iptables -t nat -A POSTROUTING -o $InterfaceViaVPN -j SNAT --to $IpInterfaceVpn[/code]

Le rendre executable via la commande

```auto
chmod +x votre_fichier
```

C’est une solution, mais ce n’est pas la meilleur car le script ne marchera pas si vous le mettez au demarrage de l’ordinateur.  
Il vous faudra l’activer vous meme.

De plus, tout routage spécifique pour une connexion pptp doit être definis spécifiquement dans les config de pptp-linux (merci PascalHambourg)

[size=120]2) Diriger certaine application sur l’interface du VPN de façon automatique[/size]

Nous allons dans cette partie travailler dans les dossiers:  
[ul]- /etc/ppp/ip-up.d =\> Scripts lancés apres l’etablissement de la connexion PPTP

- /etc/ppp/ip-down.d =\> Scripts lancés apres une coupure ou la désactivation de la connexion PPTP[/ul]

Dans ces dossiers, il nous est possible d’utiliser plusieurs variable d’environnement dans nos scripts fournis par le service pppd:  
[ul]- $PPP\_IFACE= Nom de l’interface

- $PPP\_TTY= Le téléscripteur (tty)
- $PPP\_SPEED= La vitesse du lien
- $PPP\_LOCAL= L’adresse ip local du VPN (chez nous)
- $PPP\_REMOTE=L’adresse ip sur le serveur VPN distant[/ul]

Nous allons donc tout d’abord créé le script lancé au demarrage de la connexion:

```auto
nano /etc/ppp/ip-up.d/ActivationRoutageVPN
```

[code]#!/bin/sh

#A modifier suivant votre configuration  
MonInterfaceLan=‘eth1’  
InterfaceViaInternet=‘eth0’  
NomTable=‘VPN’

#Désactiver la validation d’adresse source sur l’interface du VPN  
sysctl -w net.ipv4.$PPP\_IFACE.rp\_filter=0

#Si vous voulez rajouter le marquage d’autre paquets reçus, c’est ici.  
#Marquer les paquets reçus par l’interface LAN  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p tcp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p udp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A PREROUTING -i $MonInterfaceLan -p udp --dport 5500:5510 -j MARK --set-mark 0x1

#Si vous voulez rajouter le marquage d’autre paquets émis, c’est ici.  
#Marquer les paquets émis par le routeur vers internet si nécessaire  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p tcp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p udp --dport 80 -j MARK --set-mark 0x1  
iptables -t mangle -A OUTPUT -o $InterfaceViaInternet -p udp --dport 5500:5510 -j MARK --set-mark 0x1

#Router les paquets marqués avec la table de routage alternative  
ip rule add fwmark 0x1 table $NomTable

#Créer une route par défaut dans la table alternative  
ip route add default dev $PPP\_IFACE via $PPP\_LOCAL table $NomTable

#Router l’adresse source avec l’adresse de l’interface de sortie  
iptables -t nat -A POSTROUTING -o $PPP\_IFACE -j SNAT --to $PPP\_LOCAL[/code]

Jusqu’à là, ça ne change pas trop de mon script précédent, à part les variable d’environnement que j’ai ajouté.

Ne pas oubliez les droits d’execution du fichier

```auto
chmod +x /etc/ppp/ip-up.d/ActivationRoutageVPN
```

Nous allons ensuite créé le script lancé en cas de fin de connexion

```auto
nano /etc/ppp/ip-down.d/DesactivationRoutageVPN
```

[code]#!/bin/sh

#A modifier suivant votre configuration  
MonInterfaceLan=‘eth1’  
InterfaceViaInternet=‘eth0’  
NomTable=‘VPN’

#Suppression des routes ajouté dans le script précédent.  
iptables -t mangle -D PREROUTING 3  
iptables -t mangle -D PREROUTING 2  
iptables -t mangle -D PREROUTING 1

iptables -t mangle -D OUTPUT 3  
iptables -t mangle -D OUTPUT 2  
iptables -t mangle -D OUTPUT 1

#Suppression de la route pour les paquets marqués dans la table de routage alternative  
ip rule del fwmark 0x1 table $NomTable

#Suppression de la route par default issue de la table alternative  
ip route del default dev $PPP\_IFACE via $PPP\_LOCAL table $NomTable

# Suppression de la route nat permettant de router l’adresse source avec l’adresse de l’interface de sortie

iptables -t nat -D POSTROUTING 2[/code]

Vérifié bien le numero de vos anciennes regles ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green") :

`iptables -t mangle -L --line-numbers
iptables -t nat -L --line-numbers`

Voila, j’ai essayé de détailler le plus possible pour que ce tuto soit accessible pour tout le monde  
J’espere que ça aidera des gens 😉 .

N’esitez pas si vous voyez des ameliorations à faire.  
Bonne journée à tous

* * *

Les articles et les documentations  
[http://pptpclient.sourceforge.net/](http://pptpclient.sourceforge.net/) =\> Site officiel de pptp-linux (Anglais)  
[http://bibabox.fr/tag/vpn/](http://bibabox.fr/tag/vpn/) =\> Une autre documentation sur la mise en place du Vpn PPTP (Français)  
[http://doc.ubuntu-fr.org/iptables](http://doc.ubuntu-fr.org/iptables) =\> Documentation sur iptables (Français)

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560/2 "2016-02-21T12:22:39Z")

</div>

Les commandes, règles et routes liées à une interface pppN doivent être exécutées à chaque fois après l’établissement du VPN, et annulées après sa fermeture. Pour les automatiser il est possible de les mettre dans des scripts ad hoc placés dans /etc/ppp/ip-up.d/ et /etc/ppp/ip-down.d/. Cerise sur le gâteau, ils reçoivent le nom de l’interface dans la variable d’environnement $PPP\_IFACE. L’identification du VPN peut se faire avec l’option de pppd “ipparam” dans le fichier /etc/ppp/peers/PhantomPeer, dont la valeur se retrouve dans la variable d’environnement $PPP\_IPPARAM.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560/3 "2016-02-21T12:22:41Z")

</div>

Très intéressant tout ça ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![savexed](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/ac8455/32.png) [@savexed](https://www.debian-fr.org/u/savexed)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560/4 "2016-02-21T12:22:42Z")

</div>

> [@](#):
>
> Les commandes, règles et routes liées à une interface pppN doivent être exécutées à chaque fois après l’établissement du VPN, et annulées après sa fermeture. Pour les automatiser il est possible de les mettre dans des scripts ad hoc placés dans /etc/ppp/ip-up.d/ et /etc/ppp/ip-down.d/. Cerise sur le gâteau, ils reçoivent le nom de l’interface dans la variable d’environnement $PPP\_IFACE. L’identification du VPN peut se faire avec l’option de pppd “ipparam” dans le fichier /etc/ppp/peers/PhantomPeer, dont la valeur se retrouve dans la variable d’environnement $PPP\_IPPARAM.

ça marche nikel, j’ai ajouter une autre section du coup.  
Par contre il vaut mieux utilisé la variable $PPP\_LOCAL que $PPP\_IPPARAM.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/client-vpn-pptp-configurer-pour-certaines-applications/53560/5 "2016-02-21T12:22:49Z")

</div>

> [@](#):
>
> Par contre il vaut mieux utilisé la variable $PPP\_LOCAL que $PPP\_IPPARAM.

Les deux variables n’ont pas du tout le même rôle.  
$PPP\_LOCAL contient l’adresse IP configurée sur l’interface pppN, qui est généralement attribuée par le serveur. Sauf si elle est fixe ou dans une plage connue et univoque, elle ne permet pas d’identifier la connexion PPP parmi d’autres que pourrait faire la machine.  
$PPP\_IPPARAM le peut au contraire, puisqu’elle contient une valeur inscrite dans le fichier d’options /etc/ppp/peers/ de la connexion.

Exemple chez moi : mon routeur Debian établit deux types de connexions PPP gérées par pppd :

- une connexion internet sur une ligne ADSL
- des connexions VPN PPTP  
Pour chaque type de connexion, il faut exécuter des commandes différentes à l’établissement et à la terminaison. Je peux différencier chaque type de connexion PPP dans les scripts grâce à $PPP\_IPPARAM.

Evidemment, si pppd ne doit gérer qu’une seule connexion, alors $PPP\_IPPARAM n’est pas nécessaire.

Autres remarques :

1. Il n’est pas nécessaires de supprimer la route liée à $PPP\_IFACE lors de la terminaison de la connexion : les routes liées à une interface sont automatiquement supprimées lorsque celle-ci est désactivée.

2. Il n’est pas nécessaire de recréer et supprimer les règles, routes… qui ne dépendent pas de la présence du VPN, du nom de l’interface ou de son adresse. Il suffit de les créer une fois pour toutes au démarrage du système. Ici, les seule choses qui varient sont la route par défaut de la table de routage alternative et la règles iptables SNAT.

3. Je trouve plus sûr et clair de supprimer une règle iptables en remplaçant -A par -D dans la commande de création plutôt qu’en la désignant par son numéro, ce qui est risqué en cas de modification des règles.
