J’ai un problème depuis un certain temps maintenant : mes appareils Android Ice Cream Sandwich (ICS) n’ont pas pu se connecter à mon VPN L2TP/IPSec PSK. Cela s’est produit sur mon Asus Transformer Prime (TF201) fonctionnant avec ICS 4.0.3 et mon nouveau Samsung Galaxy S3 fonctionnant avec ICS 4.0.4
Pour faire mon travail, je dois me connecter à mon VPN afin d’avoir une connexion sécurisée au réseau local, aux serveurs internes et à mon ordinateur de bureau. Ce problème était donc majeur. Hier soir, j’ai finalement pris quelques minutes pour diagnostiquer le problème.
Mon serveur VPN fonctionne sous Ubuntu 10.04 LTS et est configuré à l’aide d’OpenSwan (l2tpd et pluto ipsec). J’ai vérifié le fichier /var/log/pluto.log en essayant de connecter mon appareil Android au VPN, et j’ai remarqué ces erreurs :
"L2TP-PSK-NAT"[16] 11.22.33.44#15: byte 7 of ISAKMP NAT-OA Payload must be zero, but is not
"L2TP-PSK-NAT"[16] 11.22.33.44#15: malformed payload in packet
| payload malformed after IV
| 7c 98 58 d1 bd 64 bd 43 6f c3 5d 7c 19 e3 23 ef
"L2TP-PSK-NAT"[16] 11.22.33.44#15: sending notification PAYLOAD_MALFORMED to 11.22.33.44:4500
Après une recherche rapide sur Google sur « ics l2tp ipsec vpn malformed payload in packet », j’ai trouvé le rapport de bogue suivant sur Google Code : Problème 23124 : Can’t connect to VPN (nexus s – ice cream sandwich).
Le commentaire 203 de Strawman est particulièrement intéressant car la personne a identifié le bogue et fournit une solution. Fondamentalement, Google ne suit pas la RFC dans les règles et OpenSwan ne tolère pas cette erreur. L’utilisateur a corrigé la construction du paquet ISAKMP NAT-OA (octet 7) dans /system/bin/racoon et a téléchargé son correctif.
Cela implique de copier le binaire « racoon » sur votre système Android, vous aurez donc besoin de root pour le faire :
- Téléchargez le nouveau binaire « raton laveur » du commentaire 203 dans le lien Google Code ci-dessus
- Copiez le binaire « racoon » sur la carte SD interne de votre appareil Android (je suppose qu’il s’agit de /mnt/sdcard/ dans ces instructions)
- Ouvrir une session Terminal ou ADB Shell
- Obtenez un accès de superutilisateur (root) :
su
- Montez le système de fichiers /system en tant que RW, vous avez besoin de root pour cela :
mount -o remount,rw /system
- Faites une sauvegarde du binaire « raton laveur » existant :
cd /system/bin
cp racoon racoon.original - Copiez le nouveau « raton laveur » dans /system/bin :
cp /mnt/sdcard/racoon .
- Définissez les autorisations appropriées sur le nouveau « raton laveur » :
chmod 755 racoon
chgrp shell racoon - Remonter le système de fichiers /system en tant que RO :
mount -o remount,ro /system
Voilà, vous avez terminé. Maintenant, essayez à nouveau de vous connecter à votre VPN L2TP/IPSec PSK avec votre appareil Android, et en quelques secondes, vous devriez enfin pouvoir vous connecter avec succès.
Si quelque chose tourne mal, que le correctif ne fonctionne pas, ou si une future mise à niveau OTA échoue, n’oubliez pas de supprimer le « nouveau » raton laveur et de renommer l’original à son nom propre.
P.S. : Tout le mérite revient à l’homme de paille sur le commentaire 203. Le nouveau binaire « raton laveur » peut être téléchargé à partir de la page Google Code liée ci-dessus.