Skip to content
Snippets Groups Projects

WSL2 & VPN

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Nicolas.Chuche

    TL;DR

    VPN et WSL2 ne font pas tout le temps bon ménage. Parfois la VM ne peut plus se connecter à l'extérieur. En PJ, un script pour générer la commande route add qui va bien. Il suffit de lancer le script dans WSL et de la copier/coller dans un powershell avec les droits administrateurs.

    Symptômes

    Le réseau WSL2 fonctionne parfaitement tant qu'on n'est pas déconnecté. Il perd la connexion réseau en cas de déconnexion/reconnexion au VPN. La route par défaut permettant de sortir du conteneur WSL n'existe plus.

    Exemple, le diff entre les commandes route print pendant la première connexion au VPN et une connexion suivante (l'IP de la machine WSL est 192.168.73.237/20) :

    diff -rbu avant-deconnexion.txt apres-reconnexion.txt
    --- avant-deconnexion.txt 2021-04-16 08:18:23.021858100 +0200
    +++ apres-reconnexion.txt 2021-04-16 08:25:14.471858100 +0200
    @@ -18,20 +18,12 @@
             127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
             127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
       127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
    -     172.30.192.0    255.255.240.0         On-link      172.30.192.1    271
          172.30.192.1  255.255.255.255         On-link      172.30.192.1    271
    -   172.30.207.255  255.255.255.255         On-link      172.30.192.1    271
           192.168.1.8  255.255.255.255         On-link       192.168.1.8    296
    -     192.168.64.0    255.255.240.0         On-link      192.168.64.1    271
          192.168.64.1  255.255.255.255         On-link      192.168.64.1    271
    -   192.168.79.255  255.255.255.255         On-link      192.168.64.1    271
         194.5.173.155  255.255.255.255      192.168.1.1      192.168.1.8     40
             224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
    -        224.0.0.0        240.0.0.0         On-link      172.30.192.1    271
    -        224.0.0.0        240.0.0.0         On-link      192.168.64.1    271
       255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
    -  255.255.255.255  255.255.255.255         On-link      172.30.192.1    271
    -  255.255.255.255  255.255.255.255         On-link      192.168.64.1    271
     ===========================================================================
     Itin�raires persistants�:
       Adresse r�seau    Masque r�seau  Adresse passerelle M�trique

    Solution

    Recréer la route qui n'est plus active. Dans l'exemple ci-dessus ça donne :

    route add 192.168.64.0 mask 255.255.240.0 192.168.64.1

    Automatisation

    Le script ci-dessous écrit la commande route à copier dans powershell admin.

    Edited
    gateway.py 903 B
    #!/usr/bin/env python3
    import sys
    import subprocess
    
    # l'interface utilisée par WSL
    DEV = 'eth0'
    
    # récupérer le couple addresse/cidr avec ip a
    command = f"ip -br -4 a show dev {DEV}"
    result = subprocess.run(command.split(), stdout=subprocess.PIPE, universal_newlines=True)
    addr_cidr = result.stdout.split()[-1]
    
    (addrString, cidrString) = addr_cidr.split('/')
    
    # séparer l'adresse en octets et transformer le cidr en entier
    addr = addrString.split('.')
    cidr = int(cidrString)
    
    # calculer le mask à partir du cidr
    _mask = [0, 0, 0, 0]
    for i in range(cidr):
        _mask[i//8] = _mask[i//8] + (1 << (7 - i % 8))
    
    # calculer l'adresse de réseau
    _net = [(int(addr[i]) & _mask[i]) for i in range(4)]
    
    # la passerelle
    _gateway = _net[0:3] + [1]
            
    mask = ".".join(map(str, _mask))
    gateway = ".".join(map(str, _gateway))
    net = ".".join(map(str, _net))
    
    print(f"route add {net} mask {mask} {gateway}")
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment