Posts Tagged ‘xl2tp’

Problème serveur : récupération sur radius de l’IP de l’utilisateur

vendredi, juin 13th, 2008

L’architecture du service VPN (station de travail -> VPN1/2/3/… -> RADIUS -> LDAP/RADIUS/… ) pose le problème suivant : le client RADIUS est le serveur VPN. De ce fait, RADIUS reçoit par défaut  l’adresse IP du NAS (machine VPN) alors qu’il serait intéressant d’obtenir également l’adresse IP du client réel, c’est-à-dire, la station de travail.

Sur le serveur VPN, le démon XL2TP lance le service PPP qui permet à l’utilisateur de transmettre des informations, notamment login/mot de passe. Le service PPP, inclut dans ses sources une partie RADIUSCLIENT (les binaires radiusclient1 que l’on charge sur le serveur VPN sont donc inutiles) qui adresse au serveur RADIUS via le protocole RADIUS les informations reçues par le serveur VPN.

Or nous avons besoin pour certaines applications du VPN de connaître (reconnaître) l’adresse IP de l’utilisateur (client final à ne pas confondre avec le client du serveur RADIUS) pour l’autoriser ou non à établir une connexion.
Or les arguments transmis par le VPN au serveur RADIUS sont les suivants :

Service-Type = Framed-User
Framed-Protocol = PPP
User-Name = "utilisateur@realm"
User-Password = "mot_de_passe"
NAS-IP-Address = IP_serveur_VPN
NAS-Port = 1

Le serveur RADIUS n’a donc pas d’information sur l’IP de l’utilisateur.

Jean-Michel Caricand a créé et appliqué un patch de quelques lignes pour transmettre cette information.
En effet, dans le fonctionnement de XL2TP (L2TP) sur le serveur VPN, nous pouvons transmettre des attributs statiques à l’aide de l’argument “ipparam”. Si cet argument est transmis, l’attribut qui suit est également transmis. On retrouve cela dans les fichiers de configuration avec le plus souvent une chaîne de caractères (par exemple pour éviter les récursions sur L2TP).
Notre idée est simple : introduire après l’argument ipparam l’adresse IP de l’utilisateur.
cela nous donne le patch :

--- xl2tpd-1.1.12.orig/control.c        2007-10-20 06:22:55.000000000 +0200
+++ xl2tpd-1.1.12/control.c     2008-06-12 15:01:16.000000000 +0200
@@ -954,6 +954,14 @@ int control_finish (struct tunnel *t, st
}
if (c->lns->debug)
po = add_opt (po, "debug");
+
+        po = add_opt (po, "ipparam");
+        po = add_opt (po, "%s", IPADDY (t->peer.sin_addr));
+
+        l2tp_log (LOG_DEBUG,
+             "Use ipparam option with %s value\n",
+             IPADDY (t->peer.sin_addr));
+
if (c->lns->pppoptfile[0])
{
po = add_opt (po, "file");

maintenant, nous avons bien une information supplémentaire très facile à traiter :

Service-Type = Framed-User
Framed-Protocol = PPP
User-Name = "utilisateur@realm"
User-Password = "motdepasse"
Calling-Station-Id = "IP_utilisateur"
NAS-IP-Address = IP_serveur_VPN
NAS-Port = 1

LINUX : L2TP contre XL2TP

vendredi, mai 2nd, 2008

Ces deux programmes permettent d’identifier par une surcouche à PPP un utilisateur à travers un lien IPSEC actif.

Au cours des travaux de mise en oeuvre du projet VPN, nous avons souvent oscillé entre les deux, pour plusieurs raisons :

– L2TP n’est plus maintenur officielement

– XL2TP est maintenu

– pour un client L2TP permet une authentification sans passer par un fichier pap-secret avec un mot de passe en clair

– L2TP est en standard dans les distributions LINUX

– L2TP à été modifié est un repository au LIFC le maintient à jour

Lors des tests beta, nous avons remarquer que L2TP du côté serveur tombait régulièrement sans raison et sans information dans les fichiers de logs.

Le serveur est donc recofiguré avec XL2TP.

Côté client L2TP peu être maintenu.

PPPD + password

mercredi, avril 9th, 2008

en utilisant l’une des dernières versions de XL2TPD, il n’est plus nécessaire de placer le mot de passe dans le fichier /etc/ppp/pap-secrets :
#user2@lifc-edu 194.57.88.62 user2

il suffit de faire appel au module passwordfd.so dans /etc/ppp/options.l2tpd.client :
plugin passwordfd.so
user user2@lifc-edu
...

et de créer la connexion L2TP avec :
echo "c amande passwordfd user2" > /var/run/xl2tpd/l2tp-control