4 votos

¿Podemos hacer que un servidor Vpn funcione en Android?

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?

4voto

Jack Wade Puntos 231

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 ejecutando openvpn --genkey --secret tc.key .
    ca.crt , server.key , server.crt y dh2048.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 y tc.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 y wlan0 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:

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X