Podemos hacer que un servidor Vpn funcione en Android. ¿Pueden las aplicaciones hacer esto? En caso afirmativo, ¿qué protocolos son compatibles y es una buena idea utilizar dichas aplicaciones? Si no es así, ¿cuáles son algunos problemas que podemos enfrentar?
Respuesta
¿Demasiados anuncios?Sí podemos ejecutar el servidor VPN en Android, pero no sin Root. Android de serie no es compatible con los servidores VPN, incluso muchos protocolos no son compatibles con el cliente también, por lo que tiene que instalar aplicaciones de terceros. Hay aplicaciones como Servers Ultimate
que ofrecen servidor VPN, pero no lo he probado. CLI mantiene la vida simple:
-
Construir openvpn binario estático y copiarlo en
/system/bin
. -
Cree un archivo de configuración básica del servidor:
### /etc/openvpn/server.conf # basic configuration port 69 proto udp dev tun mode server tls-server keepalive 10 120 # dynamic IP pool server 10.8.0.0 255.255.255.0 # send RESTART command to clients if tunnel is restarted (UDP) explicit-exit-notify 1 # configure like a "traditional" broadcast-based network topology subnet push "topology subnet" # send all traffic from client to VPN push "redirect-gateway def1 bypass-dhcp" # DNS nameservers push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" # certificates and keys to use ca ca.crt cert server.crt key server.key dh dh2048.pem tls-crypt tc.key # cipher algorithm to use for encryption cipher AES-256-CBC # log files log /data/media/0/openvpn.log status /data/media/0/openvpn-status.log verb 3 # do not recreate TUN interface on reset (SIGUSR1) persist-tun # do not reread key files on reset (SIGUSR1) persist-key
-
Crear claves y certificados de servidor.
tc.key
se puede crear ejecutandoopenvpn --genkey --secret tc.key
.
ca.crt
,server.key
,server.crt
ydh2048.pem
se construyen utilizando EasyRSA . Se puede hacer fácilmente en un PC con Linux/Windows, en Android requiere un esfuerzo adicional:~$ easyrsa init-pki ~$ easyrsa build-ca ~$ easyrsa build-server-full server nopass ~$ easyrsa gen-dh
-
Copie el archivo de configuración, los certificados y las claves en
/etc/openvpn/
y establecer los permisos:~# 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
-
Del mismo modo, construya la clave y el certificado del cliente utilizando EasyRSA:
~$ easyrsa --days=30 build-client-full client nopass
Copiar el contenido de
ca.cert
,client.key
,client.crt
ytc.key
al archivo de configuración del cliente. Añade también la dirección IP pública del dispositivo Android si quieres conectarte desde Internet o desde una dirección IP local (WiFi/hotspot):### client.ovpn client dev tun auth-nocache verb 3 remote-cert-tls server cipher AES-256-CBC pull resolv-retry infinite remote <IP_ADDRESS> 69 udp nobind connect-retry 5 5 connect-timeout 10 # only for Windows #block-outside-dns <ca> INSERT_HERE </ca> <cert> INSERT_HERE </cert> <key> INSERT_HERE </key> <tls-crypt> INSERT_HERE </tls-crypt>
-
Android ignora
main
tabla en absoluto, crear una regla personalizada e insertar rutas:~# ip rule add table 5000 priority 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
Dónde
rmnet_data1
es la interfaz que conecta con los datos móviles ywlan0
es WiFi o hotspot. Ajusta los nombres de las interfaces y las direcciones de red según tu dispositivo.Configurar el reenvío y el NAT de origen:
~# echo -n 1 >/proc/sys/net/ipv4/ip_forward ~# iptables -I FORWARD -i tun+ -j ACCEPT ~# iptables -I FORWARD -o tun+ -j ACCEPT ~# iptables -t nat -I POSTROUTING -o rmnet_data1 -j MASQUERADE
-
Ejecute el servidor, pero primero haga un pequeño ajuste debido a la diferencia entre Android y Linux:
~# mkdir /dev/net ~# ln -s /dev/tun /dev/net/tun ~# openvpn --cd /etc/openvpn/ --config server.conf
Importe el client.ovpn
en cualquier aplicación cliente OpenVPN (en Android / Windows / Linux) y conéctate.
Puedes hacer una configuración avanzada en el servidor, ejecutarlo como un Android init
servicio, o lo que quieras.
RELACIONADO: