Se connecter à TigerVPN avec Linux

J’ai profité d’une offre promotionnelle proposée par TigerVPN pour leur service de VPN à vie pour 30€. C’est toujours pratique de pouvoir changer d’IP en cas de route réseau défectueuse ou lorsque l’IP du FAI est banni par le service qu’on essaye d’atteindre (les restriction géographique par exemple tombent dans ce cas).

Bref, Tiger et la plupart de ses concurrents proposent des VPN clé-en-main pour plateforme Windows et mobile. On a donc souvent du IPSec/L2TP, OpenVPN, ou parfois l’utilisation d’un client maison (mais c’est vraiment pas génial sur mobile, du fait de la mauvaise intégration d’un point de vue de la continuité du service et de la consommation batterie). Sur ces plateformes, ça marche mais on ne trouve aucune informations techniques permettant de s’y connecter proprement depuis un client Linux.

Voici ma configuration, après pas mal d’essais, pour se connecter à TigerVPN en utilisant Strongswan sous Gentoo.

Tout d’abord, on aura besoin des paquets suivants :

emerge va xl2tpd strongswan

La configuration de la partie IPSec. Elle établit un tunnel entre le Linux et TigerVPN, uniquement pour les paquets udp sur le port 1701. C’est le port qu’utilise par défaut le protocole L2TP.

conn tigervpn
        add=route
        type=transport
        right=xxx.tigervpn.com
        esp=aes256-sha1!
        ike=aes256-sha1-modp1024!
        rekey=no
        keyingtries=1
        leftprotoport=udp/1701
        rightprotoport=udp/1701
        leftid=192.168.12.14
        leftsubnet=192.168.12.14/32
        rightid=%any
        leftcert=
        leftca=
        rightca=
        leftauth=psk
        rightauth=psk
        keyexchange=ikev1
        mobike=yes
192.168.12.14 %any : PSK "secret-partagé-tigervpn"

Maintenant, on passe à la configuration de la couche L2TP :

[lac tigervpn]
lns = xxx.tigervpn.com
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
require authentication = yes

Puis la configuration de la couche PPP :

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
#crtscts
mtu 1410
mru 1410
nodefaultroute
lock
proxyarp
silent
name your-username
password your-very-secret-password

On vérifiera que les fichiers contenant des mot de passes ne sont accessibles que par root !

Maintenant, on peut démarrer les différents services :

/etc/init.d/ipsec start
/etc/init.d/xl2tpd start
sleep 3
echo "c tigervpn" > /var/run/xl2tpd/l2tp-control

Le sleep s’assure que les deux daemons soient bien initialisées.

La commande echo demande à xl2tpd de se connecter au lac nommé tigervpn. Ce lac a pour LNS xxx.tigervpn.com, lequel doit passer en IPSec.

Si tout a bien fonctionné, une nouvelle interface pppX est visible. Il n’y aura plus qu’à ajouter les différentes routes vers les destinations que l’on souhaite faire passer dans le VPN.

Enjoy !

Extraire un dossier d’un dépôt git avec suivi du renommage

git contient une commande permettant d’extraire un dossier d’un dépôt existant. C’est pratique lorsque le dépôt contenait initialement un seul projet, qui a évolué au cours du temps, grossit, et est devenu un truc trop gros pour rester dans un dépôt unique. Cela se fait avec la commande git –subdirectory , mais cette commande ne suivait pas le renommage du dossier à extraire et l’on se retrouvait donc avec un historique tronqué.

Le script ci-dessous fonctionne (c’est déjà ça), en travaillant sur le dépôt lui-même plutôt que l’espace de travail, lequel ne reflète qu’une version spécifique. Il :

  • ne garde du dépôt que tout ce qui se trouve ou bien dans Kveer.MyAwesomeProject, ou bien dans MyAwesomeProject, qui sont un même dossier que j’ai renommé à un moment donné
  • il fait remonter à la racine le contenu des dossiers susmentionnés
  • quitte à casser tout l’historique, j’en profite pour unifier le nom et l’email utilisé dans les commits (on pourra ajouter une condition pour ne réécrire que ses propres commits)
  • je supprime le dossier package pour réduire la taille du dépôt
  • plus qu’à nettoyer
  • le nouveau dépôt est prêt à être chargé.
# extracts the subdirectory
# i take this opportunity to rewrite author name and email of my commits
git filter-branch --prune-empty --env-filter '
GIT_AUTHOR_EMAIL=my-awesome-email@kveer.fr
GIT_AUTHOR_NAME=Veovis' --index-filter '
    # Delete files which are NOT needed
    git ls-files -z | egrep -zv  "^(Kveer.MyAwesomeProject|MyAwesomeProject)" |
        xargs -0 -r git rm --cached -q
    # Move files to root directory
    git ls-files -s | sed -e "s-\t\(Kveer.MyAwesomeProject\|MyAwesomeProject\)/-\t-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
        git update-index --index-info &&
        ( test ! -f "$GIT_INDEX_FILE.new" \
            || mv -f "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" )
'

# deletes the backup ref
git update-ref -d refs/original/refs/heads/master

# more cleaning by removing a directory that should not be tracked
git filter-branch --index-filter \
  'git rm --ignore-unmatch --cached packages'

# deletes the backup ref
git update-ref -d refs/original/refs/heads/master

# cleans the repo
git gc
git repack -Ad


La commande subdirectory ne doit pas servir à modifier un dépôt existant. En effet il réécrit tous les commits, tous les hash sont différents. Le nouveau dépô n’aura donc plus aucun lien avec l’ancien dépôt et il sera impossible de faire un push autrement que sur un dépôt vierge ou bien en forçant le passage.

Sources