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
Où 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É :