En la mayoría de los casos no podrá realizar la conexión de entrada cuando utilice Datos Móviles debido a CGNAT y cortafuegos a nivel de ISP, como explica acejavelin en el comentario. Para conocer el problema en detalle y cómo se puede solucionar ver ¿Cómo conectarse a Android a través de SSH sobre IP pública 3G/4G?
Sin embargo, si puedes llegar a tu teléfono desde Internet, extender este acceso a un host conectado (PC en tu caso) no es un problema. El reenvío de puertos se realiza con los routers, y cuando se utiliza como punto de acceso Wi-Fi (o con el anclaje USB), el teléfono está actuando de hecho como un router.
Solución de root:
Para reenviar el puerto, es necesario hacer la traducción de direcciones de destino ( DNAT ) utilizando la herramienta de espacio de usuario del kernel de Linux iptables
.
Primero asegúrate de que el kernel está configurado para reenviar el tráfico de Internet (ya está configurado cuando el hotspot está activado):
~# echo 1 >/proc/sys/net/ipv4/ip_forward
Digamos que la dirección IP asignada por el hotspot al PC es 192.168.43.10
y desea reenviar el puerto SSH por defecto ( 22
):
~# iptables -t nat -I PREROUTING -p tcp --dport 22 -j DNAT --to 192.168.43.10
Esta es la forma más simple de reenvío de puertos.
Si la POLÍTICA por defecto de la cadena FORWARD en la tabla FILTER no es ACCEPT, defina reglas explícitamente para aceptar los paquetes reenviados:
~# iptables -I FORWARD -p tcp -d 192.168.43.10 --dport 22 -j ACCEPT
También acepta el tráfico saliente reenviado si es necesario.
SOLUCIÓN NO root:
En los dispositivos no rooteados se puede utilizar adb
o algún otro mínimo Servidor TCP/UDP como netcat
o socat
para el reenvío de puertos. Tenga en cuenta que esto no funcionará para puertos menores de 1024 . Para reenviar el puerto 2222
:
~$ adb reverse tcp:2222 tcp:2222
O por teléfono:
~$ nc -lk -p 2222 -e nc 192.168.43.10 2222
* nc
es un applet de busybox. Pero asegúrese de obtener el binario correcto, hay múltiples implementaciones de netcat
.
* Utilizar -u
para reenviar el puerto UDP.
Sin embargo, nc
sólo acepta una única conexión a la vez. Utilice socat
o ncat
para opciones más avanzadas, por ejemplo, de Termux:
~$ socat tcp-l:2222,fork,reuseaddr tcp:192.168.43.10:2222
Ver Uso de netcat para el reenvío de puertos .
También hay aplicaciones como Fwd (es de código abierto, no tengo ninguna afiliación) destinado al reenvío de puertos.
FUENTE:
4 votos
Generalmente no se puede, no porque Android no sea capaz, sino porque en general los operadores no permiten el tráfico entrante de ningún tipo a los dispositivos móviles. Puede que obtengas una dirección IP de tu operador, pero eso es sólo para el tráfico saliente, el tráfico entrante no solicitado (el tipo para el que necesitas el reenvío de puertos) está casi siempre bloqueado por cada operador en todo el mundo. Además, la mayoría de los operadores no te dan una IP pública de todos modos, por lo que incluso si consigues que el reenvío de puertos funcione, es probable que no puedas usarlo.
0 votos
Eso no es cierto, si su aplicación no puede recibir el tráfico de entrada cómo se obtiene el mensaje a su teléfono.
4 votos
@ShawnThomasRheal abriendo una conexión de salida y manteniéndola abierta para las respuestas. Para eso es para lo que la mayoría de las aplicaciones usan GCM - así que no todas las aplicaciones tienen que mantener su propia conexión abierta.