5 votes

Faire transiter le trafic IPv6 via Debian pptpd dans le tunnel IPv6 de Hurricane Electric

J'ai mis en place un tunnel à l'aide des services de Hurricane Electric sur une machine Debian. Il semble fonctionner correctement ; je peux ping6 ipv6.google.com et l'ouvrir dans links.

J'ai également configuré un service PPTP sur la machine. (Oui, j'ai lu que PPTP est peu sécurisé ; c'est principalement à des fins expérimentales.) Lorsque je me connecte à ce service PPTP à partir de Mac OS X, IPv4 fonctionne bien.

Cependant, je semble incapable de faire fonctionner le routage du trafic IPv6. OS X ne récupère pas d'adresse IPv6 via PPTP, et ignore les annonces utilisant radvd, qui semble être un service pour annoncer l'existence du routeur IPv6. Pour clarifier : je vois les annonces du routeur envoyées par radvd apparaître dans Wireshark sur l'interface ppp0 de la machine OS X.

Dans l'ensemble, ce n'est pas une configuration de production ni à long terme, juste quelque chose que j'aimerais faire fonctionner (sinon je pourrais poster sur ServerFault). Donc je me fiche du fait que si la machine redémarre, la moitié de la configuration s'arrête jusqu'à ce que je la réinitialise manuellement. En fait, c'est un avantage pour moi, dans ce cas.

/etc/network/interfaces (extrait)

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:dead:beef:f00d::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:dead:beef:f00d::1

/etc/pptpd.conf

option /etc/ppp/pptpd-options
localip 10.0.101.1
remoteip 10.0.101.2-200

/etc/ppp/pptpd-options

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
lock
nobsdcomp
ipv6 ,

/etc/ppp/chap-secrets

ivucica pptpd MOTDEPASSEICI 10.0.101.2 10.0.101.3 10.0.101.4 10.0.101.5

/etc/radvd.conf

interface ppp0
{
        AdvSendAdvert on;
        prefix 2001:dead:beef:f00d::/64
        {
        };
};

J'ai activé le transfert d'ipv6 :

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Et oui, j'ai redémarré radvd à chaque fois que je me reconnectais/recréais le périphérique ppp0. :-)

Qu'est-ce que j'ai oublié ?

6voto

Ivan Vučica Points 903

Il s'avère qu'il y avait plusieurs problèmes avec ma configuration. Documentons tout!

Système d'exploitation client

Mac OS X n'aime pas particulièrement l'IPv6 sur PPP. Utilisez ce qui suit une fois la connexion établie :

sudo ipconfig set ppp0 AUTOMATIC-V6
sudo route add -inet6 default -interface ppp0

Le premier semble faire en sorte qu'OS X respecte les annonces de routeur; le second ajoute une route par défaut pour IPv6. (Maintenant, si seulement la version de certain système d'exploitation mobile fruité de route fournissait -inet6, je serais un joyeux garçon en bois.)

Notez également qu'OS X ignorera quelle que soit l'adresse qui devait être négociée via IPv6 et configurera uniquement une adresse locale. Cela peut interférer avec le routage vers OS X.

D'autre part, Windows 8 (de tous les systèmes!) a joyeusement récupéré l'adresse envoyée via PPP, a pris note de l'annonce de routeur, et s'est configuré de manière impeccable. PPTP fonctionne vraiment bien sous Windows.

Serveur

La première chose que j'ai ratée est que le service de tunnel broker d'Hurricane Electric attribue en réalité DEUX préfixes /64; l'un est censé être uniquement destiné à l'usage du client, tandis que l'autre est destiné au routage de clients supplémentaires (comme le client PPTP). Et si vous avez besoin de plus d'adresses (ou de préfixes!), vous pouvez même obtenir un préfixe /48. (Avec IPv6, cela signifie qu'il y a plus de bits pour 'votre' usage; le préfixe de HE ne prend 'que' 48 bits. Vous avez donc quelques bits de plus à contrôler avant que le suffixe généré automatiquement, créé à partir d'une adresse MAC ou même généré aléatoirement, intervienne et prenne en charge les derniers 64 bits. Théoriquement, vous pourriez segmenter même avec seulement 64 bits à épargner, mais j'ai observé un comportement étrange sur Windows 8 ou OS X, donc je ne m'y appuierais pas trop.)

Au lieu de configurer radvd directement et de le lancer comme un serveur - simplement ne le configurez pas globalement. Autrement dit, ne le lancez pas en tant que service sur Debian.

À la place, suivons l'exemple de Konrad Rosenbaum, sur Silmor.de, et configurons radvd après que pppd crée l'interface PPP.

  1. Configurez votre connectivité IPv6. J'utilise Hurricane Electric; je l'ai configuré comme suit :

    # tunnel Hurricane Electric
    # basé sur : http://www.tunnelbroker.net/forums/index.php?topic=1642.0
    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
        address 2001:470:UUUU:VVVV::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:470:UUUU:VVVV::1
        ## à partir de http://lightyearsoftware.com/2011/02/configure-debian-as-an-ipv6-router/
        # Je n'ai pas configuré le routage du préfixe /64 ou /48 ici, mais
        # cela le ferait normalement.
        #up ip link set mtu 1280 dev he-ipv6
        #up route -6 add 2001:470:WWWW:VVVV::/64 he-ipv6
    
        # Notez qu'Hurricane Electric fournit des préfixes IPv6 /64 différents
        # pour le client (UUUU:VVVV) et le routage (WWWW:VVVV).
        # Et le préfixe /48 est très différent.
  2. Installez pptpd. (Bien sûr, prenez note de l'insécurité du PPTP en tant que protocole, et envisagez d'utiliser OpenVPN ou une autre alternative).

  3. Modifiez /etc/ppp/pptpd-options

    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    nodefaultroute
    lock
    nobsdcomp
    ipv6 ::1,::2

    Notez que la dernière ligne est différente du texte dans ma question. Vous attribuez des adresses statiques qui peuvent être respectées par votre système d'exploitation client ou non. (OS X semble les ignorer, mais Windows les utilise.)

  4. Créez des utilisateurs pour PPTP. La deuxième colonne filtre en fonction de l'argument name dans pptpd-options. Modifiez /etc/ppp/chap-secrets :

    ivucica pptpd UnSuperMotDePasseHyperSecretEnClair 10.0.101.2 10.0.101.3 10.0.101.4

    Vous devriez pouvoir remplacer les adresses par * au lieu de les énumérer manuellement. Je n'ai pas essayé cela.

  5. Attribuez à vos utilisateurs PPTP quelques préfixes IPv6. REMARQUE : ceci est uniquement utilisé par le script que je vais détailler ci-dessous, qui est dérivé du script de Konrad.

    Modifiez /etc/ppp/ipv6-addr :

    ivucica:1234
    littlejohnny:1235
  6. Ajoutez le nouveau fichier /etc/ppp/ipv6-up.d/setupradvd :

    #!/bin/bash
    ADDR=$(grep ^$PEERNAME: /etc/ppp/ipv6-addr |cut -f 2 -d :)
    if test x$ADDR == x ; then
     echo "Aucune adresse IPv6 trouvée pour l'utilisateur $PEERNAME"
     exit 0
    fi
    
    # Nous allons attribuer à l'utilisateur un préfixe /64.
    # J'utilise un préfixe /48 attribué par Hurricane Electric.
    
    # Les systèmes d'exploitation semblent s'attendre à pouvoir attribuer les
    # derniers 64 bits de l'adresse (basés sur l'adresse MAC ethernet
    # ou un autre identifiant). Essayez donc d'obtenir un préfixe /48.
    
    # Si vous n'avez qu'un préfixe de 64 bits, vous pouvez essayer d'attribuer un
    # préfixe /80 à vos utilisateurs distants. Cela fonctionne, mais j'essaie
    # seulement maintenant de permettre à ces utilisateurs d'avoir un routage.
    
    USERPREFIX=2001:470:XXXX:$ADDR
    USERPREFIXSIZE=64
    USERPREFIXOURADDRESS=1
    USERPREFIXUSERADDRESS=2
    
    # Ajoutez l'adresse de votre côté du tunnel à l'appareil PPP.
    ifconfig $IFNAME add $USERPREFIX::$USERPREFIXOURADDRESS/$USERPREFIXSIZE
    
    # établir une nouvelle route
    # (lorsqu'un paquet est dirigé vers le sous-réseau de l'utilisateur, envoyez-le à l'adresse IP de l'utilisateur)
    route -6 add $USERPREFIX::/$USERPREFIXSIZE gw $USERPREFIX::$USERPREFIXUSERADDRESS
    
    #générer la configuration radvd
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    RA=$RAP.conf
    echo interface $IFNAME >$RA
    echo '{ AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100;' >>$RA
    echo ' prefix' $USERPREFIX::/$USERPREFIXSIZE '{};' >>$RA
    
    # Au lieu de vos DNS...
    #echo ' RDNSS $USERPREFIX::$USERPREFIXOURADDRESS {}; };' >>$RA
    # ...essayez d'attribuer les DNS de Google :)
    echo ' RDNSS 2001:4860:4860::8888 {}; }; ' >> $RA
    
    # La création de la configuration radvd pourrait être plus lisible, mais bon.
    
    # Démarrer radvd
    /usr/sbin/radvd -C $RA -p $RAP.pid
    
    exit 0

    N'oubliez pas de rendre le script exécutable par pppd avec la commande :

    chmod 755 /etc/ppp/ipv6-up.d/setupradvd
  7. Le script crache la configuration de radvd dans /etc/ppp/ipv6-radvd/… assurez-vous que le dossier existe !

    mkdir /etc/ppp/ipv6-radvd
  8. Ajoutez également /etc/ppp/ipv6-down.d/setupradvd (et rendez-le exécutable!) - pris textuellement de Konrad:

    #!/bin/bash
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    kill `cat $RAP.pid` || true
    rm -f $RAP.*

    Et

    chmod 755 /etc/ppp/ipv6-down.d/setupradvd

Je n'ai pas testé l'utilisation de DHCPv6 pour distribuer les informations de routage, les adresses ou les informations DNS, surtout parce que rtadv devrait remplir ces rôles. Cela ne m'aiderait pas non plus, car à partir de Mountain Lion, OS X ne livre toujours pas avec un client DHCPv6 (peut-être intentionnellement; neuf dentistes sur dix la plupart des experts IPv6 conviennent que DHCP est mauvais).

Encore une fois, veuillez noter les commentaires de Michael sur la sécurité de PPTP; envisagez d'utiliser OpenVPN en production.

Oui, Konrad Rosenbaum a également un excellente tutoriel sur l'IPv6 avec OpenVPN. :-)

1voto

Michael Hampton Points 13142

Poptop ne semble pas avoir de support pour IPv6. Et ses mainteneurs recommandent de ne pas l'utiliser de toute façon, pour des raisons de sécurité.

Le protocole PPTP est connu pour être défectueux. Les concepteurs du protocole, Microsoft, recommandent de ne pas l'utiliser en raison des risques inhérents. Beaucoup de gens utilisent quand même le PPTP en raison de sa facilité d'utilisation, mais cela ne signifie pas qu'il est moins dangereux. Les mainteneurs de PPTP Client et Poptop recommandent d'utiliser OpenVPN (basé sur SSL) ou IPSec à la place.

Les versions récentes d'OpenVPN prennent en charge IPv6, c'est donc probablement votre meilleure option pendant la transition.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X