3 votes

Pouvons-nous faire fonctionner un serveur Vpn sur Android ?

Pouvons-nous faire fonctionner un serveur VPN sur Android? Est-ce que les applications peuvent le faire? Si oui, quels protocoles sont pris en charge et est-ce une bonne idée d'utiliser de telles applications? Si non, quelles sont les problèmes auxquels nous pourrions être confrontés?

4voto

Irfan Latif Points 16863

Oui, nous pouvons exécuter un serveur VPN sur Android, mais pas sans root. Android de base ne prend pas en charge les serveurs VPN, même de nombreux protocoles ne sont pas pris en charge en tant que client non plus, alors vous devez installer des applications tierces. Il y a des applications comme Servers Ultimate qui offrent un serveur VPN, mais je ne les ai pas testées. La CLI simplifie la vie :

  • Construisez le binaire statique openvpn et copiez-le dans /system/bin.

  • Créez un fichier de configuration de serveur de base :

    ### /etc/openvpn/server.conf
    
    # configuration de base
    port 69
    proto udp
    dev tun
    mode server
    tls-server
    keepalive 10 120
    
    # pool IP dynamique
    server 10.8.0.0 255.255.255.0
    
    # envoi de la commande RESTART aux clients si le tunnel est redémarré (UDP)
    explicit-exit-notify 1
    
    # configuration comme un réseau basé sur la diffusion "traditionnelle"
    topologie subnet
    push "topologie subnet"
    
    # envoi de tout le trafic du client au VPN
    push "redirect-gateway def1 bypass-dhcp"
    
    # serveurs DNS
    push "option DHCP DNS 1.1.1.1"
    push "option DHCP DNS 1.0.0.1"
    
    # certificats et clés à utiliser
    ca ca.crt
    cert server.crt
    clé de serveur
    dh dh2048.pem
    tls-crypte tc.key
    
    # algorithme de chiffrement à utiliser pour le cryptage
    chiffre AES-256-CBC
    
    # fichiers journaux
    log /data/media/0/openvpn.log
    état /data/media/0/openvpn-status.log
    verbe 3
    
    # ne recréer pas l'interface TUN à la réinitialisation (SIGUSR1)
    persist-tun
    
    # ne relisez pas les fichiers de clés à la réinitialisation (SIGUSR1)
    persist-key
  • Créez les clés et certificats du serveur. tc.key peut être créé en exécutant openvpn --genkey --secret tc.key.
    ca.crt, server.key, server.crt et dh2048.pem sont construits à l'aide de EasyRSA. Cela peut être facilement fait sur un PC Linux/Windows, sur Android cela nécessite un effort supplémentaire :

    ~$ easyrsa init-pki
    ~$ easyrsa build-ca
    ~$ easyrsa build-server-full server nopass
    ~$ easyrsa gen-dh
  • Copiez le fichier de configuration, les certificats et les clés dans /etc/openvpn/ et définissez les autorisations :

    ~# chmod 0600 /etc/openvpn/{ca.crt,dh2048.pem,server.crt,server.key,tc.key}
    ~# chmod 0644 /etc/openvpn/server.conf
    ~# chmod 0755 /system/bin/openvpn
    ~# chown -R 0.0 /etc/openvpn /system/bin/openvpn
  • De la même manière, créez la clé et le certificat client en utilisant EasyRSA :

    ~$ easyrsa --jours=30 build-client-full client nopass

    Copiez le contenu de ca.cert, client.key, client.crt et tc.key dans le fichier de configuration du client. Ajoutez également l'adresse IP publique de l'appareil Android si vous voulez vous connecter depuis Internet ou l'adresse IP locale (WiFi/hotspot) :

    ### client.ovpn
    
    client
    dev tun
    auth-nocache
    verbe 3
    
    remote-cert-tls serveur
    chiffre AES-256-CBC
    
    tirer
    resolv-retry infini
    
    à distance  69 udp
    nobind
    connect-retry 5 5
    connect-timeout 10
    
    # uniquement pour Windows
    #block-outside-dns
    
     INSÉRER_ICI 
     INSÉRER_ICI 
     INSÉRER_ICI 
     INSÉRER_ICI 
  • Android ignore la table main complètement, créez une règle personnalisée et insérez des routes :

    ~# ip règle add table 5000 priorité 5000
    ~# ip route add 10.8.0.0/24 dev tun0 table 5000
    ~# ip route add 192.168.43.0/24 dev wlan0 table 5000
    ~# ip route add default dev rmnet_data1 table 5000

    rmnet_data1 est l'interface connectée aux données mobiles et wlan0 est le WiFi ou le hotspot. Ajustez les noms des interfaces et les adresses réseau en fonction de votre appareil.

    Configurer le transfert et la translation d'adresse source :

    ~# echo -n 1 >/proc/sys/net/ipv4/ip_forward
    ~# iptables -I AVANT -i tun+ -j ACCEPTER
    ~# iptables -I AVANT -o tun+ -j ACCEPTER
    ~# iptables -t nat -I POSTROUTING -o rmnet_data1 -j MASQUERADE
  • Exécutez le serveur, mais apportez d'abord un ajustement mineur en raison de la différence entre Android et Linux :

    ~# mkdir /dev/net
    ~# ln -s /dev/tun /dev/net/tun
    
    ~# openvpn --cd /etc/openvpn/ --config server.conf

Importez le client.ovpn dans n'importe quelle application client OpenVPN (sur Android / Windows / Linux) et connectez-vous.

Vous pouvez effectuer des configurations avancées sur le serveur, le faire fonctionner en tant que service init Android, ou quoi que vous souhaitiez.


LIÉ :

0 votes

Merci @Irfan Latif. J'ai essayé votre recette ip route add 10.8.0.0/24 dev tun0 table 5000, dois-je l'exécuter après chaque connexion client ?

androidalle.com

AndroidAlle est une communauté de androiders 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