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.
-
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.
-
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).
-
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.)
-
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.
-
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
-
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
-
Le script crache la configuration de radvd
dans /etc/ppp/ipv6-radvd/
… assurez-vous que le dossier existe !
mkdir /etc/ppp/ipv6-radvd
-
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. :-)