NPPPD

npppd est un démon libre apparu dans OpenBSD 5.4. Celui-ci vise à remplacer le vieillissant Poptop”) en offrant une configuration simple et claire avec un axe réseau et sécurité, comme la plupart des logiciels issus de la communauté OpenBSD.

A l’heure actuelle npppd n’est présent que sur OpenBSD.

Configuration par défaut

La configuration se situe dans /etc/npppd/npppd.conf.

Voici le fichier de configuration de base:

# $OpenBSD: npppd.conf,v 1.1 2012/09/20 12:51:43 yasuoka Exp $
# sample npppd configuration file.  see npppd.conf(5)

authentication LOCAL type local {
        users-file "/etc/npppd/npppd-users"
}
#authentication RADIUS type radius {
#       authentication-server {
#               address 192.168.0.1 secret "hogehoge"
#       }
#       accounting-server {
#               address 192.168.0.1 secret "hogehoge"
#       }
#}

tunnel L2TP_ipv4 protocol l2tp {
        listen on 0.0.0.0
}
tunnel L2TP_ipv6 protocol l2tp {
        listen on ::
}

ipcp IPCP {
        pool-address 10.0.0.2-10.0.0.254
        dns-servers 8.8.8.8
}

# use pppx(4) interface.  use an interface per a ppp session.
interface pppx0 address 10.0.0.1 ipcp IPCP
bind tunnel from L2TP_ipv4 authenticated by LOCAL to pppx0
bind tunnel from L2TP_ipv6 authenticated by LOCAL to pppx0

# use tun(4) interface.  multiple ppp sessions concentrate one interface.
#interface tun0  address 10.0.0.1 ipcp IPCP
#bind tunnel from L2TP_ipv4 authenticated by LOCAL to tun0
#bind tunnel from L2TP_ipv6 authenticated by LOCAL to tun0

Comme vous pouvez le voir il est extrêmement simple et clair.

Configuration d’un serveur PPTP

Nous allons ici créer un service de pptp basé sur deux serveurs RADIUS.

Tout d’abord déclarons nos radius:

authentication RADIUS_UNIX_EXPERIENCE type radius {
       authentication-server {
               address 10.56.10.1 port 1812 secret "myprivatesecret"
               address 10.56.10.2 port 1812 secret "mysecondprivatesecret"
       }
       accounting-server {              
               address 10.56.10.1 port 1812 secret "myprivatesecret"
               address 10.56.10.2 port 1812 secret "mysecondprivatesecret"
       }
}

Note 1: Vous serez obligés d’indiquer l’adresse IP des serveurs.

Note 2: L’authentification par défaut est de type MSCHAPv2

Nous allons ensuite déclarer notre tunnel PPTP:

tunnel PPTP_UNIX_EXPERIENCE protocol pptp {
        listen on 0.0.0.0
}

Note: le protocole PPTP ne fonctionne que sur IPv4.

Nous configurons ensuite un pool d’adresses IP qui sera utilisé par nos clients:

ipcp IPCP_UNIX_EXPERIENCE {
        pool-address 10.75.40.2-10.75.40.100
        dns-servers 194.7.35.6 194.7.36.6
}

Puis nous configurons l’interface associée à ce pool d’adresses:

interface tun0 address 10.75.40.1 ipcp IPCP_UNIX_EXPERIENCE

Pour terminer on déclare un processus de tunneling PPTP authentifié via notre RADIUS sur cette interface:

bind tunnel from PPTP_UNIX_EXPERIENCE authenticated by RADIUS_UNIX_EXPERIENCE to tun0

La partie npppd est terminée.

Passons maintenant à la configuration système.

Configuration d’OpenBSD

Dans un premier temps nous allons autoriser le GRE (PPTP s’appuie sur GRE) et le routage (les paquets seront routés de tun0 vers notre interface de sortie, que nous nommerons ici em0)

sysctl net.inet.ip.forwarding=1
sysctl net.inet.gre.allow=1

Pour rendre ces changements permanents, entrez le couple option/valeur dans /etc/sysctl.conf.

tun0 est une interface virtuelle. Elle n’existe pas par défaut et npppd ne va pas la créer. Nous allons donc l’ajouter

echo "up" > /etc/hostname.tun0
sh /etc/netstart tun0

La partie réseau est désormais terminée. On va maintenant NATer les paquets de tun0 vers em0 afin de rendre notre VPN opérationnel. Editons donc la configuration de PF (/etc/pf.conf) en ajoutant la ligne suivante:

pass out quick on em0 from 10.75.40.0/24 nat-to (em0)

Ce qui nous donnera donc:

block
pass
pass out quick on em0 from 10.75.40.0/24 nat-to (em0)

Chargeons maintenant ces règles

pfctl -f /etc/pf.conf

Il ne nous reste plus qu’à activer et à lancer npppd

echo "npppd_flags=" >> /etc/rc.conf.local
/etc/rc.d/npppd start

Conclusion

Nous avons vu ici comment mettre en place rapidement un serveur PPTP. Je vous suggère de consulter le man de npppd afin de connaître l’ensemble des options (elles sont extrêmement nombreuses !).

NPPPd est une réussite en terme d’administration, il est bien plus intuitif et efficace que poptop et sera un digne successeur.