Hice un reenvío local de puerto SSH en una máquina remota:
ssh -N -L 127.0.0.1:3388:127.0.0.1:22 localhost
Funciona en la propia máquina remota:
telnet localhost 3388
devoluciones
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
Sin embargo, cuando uso este reenvío desde la máquina local:
telnet remote.ip 3388
falla:
Trying remote.ip...
telnet: Unable to connect to remote host: Connection refused
Uno podría pensar que el puerto 3388 de la máquina remota está bloqueado por el firewall o algo de la red, así que desactivé el reenvío SSH y probé un servidor http escuchando en el puerto 3388 en la máquina remota:
python3 -m http.server 3388
luego me conecto a este puerto desde mi máquina local:
telnet remote.ip 3388
El resultado da
Trying remote.ip...
Connected to remote.ip.
Escape character is '^]'.
quit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code: 400</p>
<p>Message: Bad request syntax ('quit ').</p>
<p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
</body>
</html>
Connection closed by foreign host.
lo que significa que el puerto 3388 de la máquina remota es accesible desde mi máquina local. Entonces, ¿por qué tanto el reenvío SSH como la red funcionan correctamente de forma individual, pero fallan cuando se combinan? ¿Alguien sabe cómo solucionar este problema? Gracias.
Respuesta1
Configuró el reenvío local SSH para que solo escuche en el puerto 3388 de localhost. No se puede acceder a localhost desde otros dispositivos en la red, por lo que no pudo establecer una conexión de forma remota.
Para exponer el puerto de reenvío a otras máquinas de la red, debe vincularlo a una dirección accesible como 192.168.1.5 o 0.0.0.0 (todas las interfaces).
p.ejssh -N -L 0.0.0.0:3388:127.0.0.1:22 localhost