Estoy intentando acceder a mi máquina de forma remota a través de ssh con mi IP pública.
La forma habitual de hacer esto sería permitir el reenvío de puertos en mi enrutador y luego hacerlo: ssh ubuntu@myPublicIp
pero mi ISP usa CGNAT, por lo que no puedo reenviar puertos con mi IP pública asignada. Entonces utilicé tinyproxy en mi instancia de AWS y conecté mi máquina local a la dirección IP del proxy.
Lo que significa que cada solicitud que hago a través de mi máquina local pasa por la IP del proxy. Ahora mi IP pública se reemplaza con la IP proxy. Mi pregunta es ¿cómo puedo configurar el reenvío de puertos en mi máquina Linux local que tiene el proxy habilitado para poder conectarme a la máquina de forma remota usando ssh como: ssh ubuntu@myProxyIp
.
Respuesta1
Para comunicarse con una máquina detrás de NAT/firewall/lo que sea, no necesita nada excepto que esa máquina pueda establecer una conexión saliente a la red pública y acceso ssh a una instancia en la red pública.
La configuración en la máquina detrás de NAT es para garantizar que realice una conexión ssh saliente con el reenvío de puertos inverso habilitado:
ssh -R:60000:127.0.0.1:22 [email protected]
donde [email protected]
está la cuenta y la dirección de la instancia en la red pública a la que tienes acceso. Este comando, básicamente, significa lo siguiente: establecer una conexión SSH para friendly.domain.tld
usar el usuario joe
para autenticar y exponer nuestro puerto tcp local 22 en el extremo remoto como puerto tcp 60000. Si el software del servidor SSH es lo suficientemente reciente (y la configuración lo permite), puede También asigne directamente su puerto reenviado local a una dirección IP orientada a Internet en friendly.domain.tld
, pero supongo que dicha configuración no está permitida.
Ahora que nuestra máquina ha establecido el enlace saliente, todo lo que tenemos que hacer para conectarnos desde cualquier lugar es utilizarlo friendly.domain.tld
como proxy en nuestra conexión SSH. Para esto necesitarás abrir dos ventanas de terminal: la primera se usará para establecer un enlace con la friendly.domain.tld
instancia para reenviar el puerto tcp 60000 expuesto a tu máquina local:
ssh -L60000:127.0.0.1:60000 [email protected]
Esto asigna el puerto tcp 60000 en la interfaz de bucle invertido friendly.domain.tld
a la interfaz de bucle invertido de la instancia en la que está ejecutando el comando ssh.
A partir de este momento, puede conectarse a su máquina detrás de NAT simplemente usando:
ssh -p60000 my_account@localhost
¿Dónde my_account
hay una cuenta en su máquina detrás de NAT?
En total, hay tres túneles SSH en juego:
machine_behind_nat <=1=> friendly_instance <=2=> your_laptop
<=================3==================>
El motivo de dicha configuración es garantizar que incluso si "friendly_instance" se interrumpe en su comunicación con la máquina detrás de NAT no se vea comprometida (no confiamos en "friendly_instance" más allá de permitirle transferir bytes a través de su interfaz loopback. utilizando cifrado de extremo a extremo en nuestro túnel n.° 3, que pasa por los túneles n.° 1 y n.° 2.
Cubríesta configuración en mi blogSi quieres un poco de historia y otros trucos, puedes hacerlo con ssh.
Respuesta2
Dependiendo de lo que realmente necesite reenviar, puede realizar un reenvío de puerto inverso dinámico con ssh.
Si solo necesita proxy del puerto 22:
ssh -R 22:0.0.0.0:2222 user@remote_server
Luego puedes ssh en tu máquina local haciendo:
ssh -p 2222 localuser@ProxyIP
Si desea reenviar dinámicamente:
ssh -R 0.0.0.0:2222 user @remote_server
Puede acceder a cualquier cosa en su red local mediante cadenas de proxy. Preste atención a que cualquier persona que conozca su IP remota y su puerto para el proxy SOCKS pueda acceder a su red local. Es posible que desee implementar un firewall para restringir quién puede acceder a él.
Aquí hay un buen artículo que habla de ello:https://posts.specterops.io/offensive-security-guide-to-ssh-tunnels-and-proxies-b525cbd4d4c6